Я хочу нажать кнопку, чтобы остановить двигатель постоянного тока, но он не работает. Работает только одна кнопка

когда я нажимаю левую кнопку, правый двигатель останавливается, как я хочу, но другая кнопка не работает, чтобы остановить левый двигатель

int estado1 = 0;
int estado2 = 0;

int pwm_speedA = 255;
int pwm_speedB = 255;
int pwm_speedC = 0;


void setup()
{
  Serial.begin(9600);
  //saídas
  pinMode(2, OUTPUT); 
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  
  pinMode(5, OUTPUT); 
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  
  //entradas
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  
}


void loop()
{
  
 estado1 = digitalRead (10);
 estado2 = digitalRead (11);
  
  
 
  if (estado1 == LOW && estado2 == LOW)
 {
    digitalWrite(3, HIGH);
    digitalWrite(4, LOW);
    analogWrite(2, pwm_speedA);
    
    digitalWrite(6, HIGH);
    digitalWrite(7, LOW);
    analogWrite(5, pwm_speedB);
  }
  
  if (estado1 == HIGH && estado2 == LOW)
  { 
    digitalWrite(3, LOW);
    digitalWrite(4, HIGH);
    analogWrite(2, pwm_speedC);
    
    digitalWrite(6, HIGH);
    digitalWrite(7, LOW);
    analogWrite(5, pwm_speedB);
    
  }
  
  if (estado1 == LOW && estado2 == HIGH);
  {
    digitalWrite(3, HIGH);
    digitalWrite(4, LOW);
    analogWrite(2, pwm_speedA);
    
    digitalWrite(6, HIGH);
    digitalWrite(7, LOW);  
    analogWrite(5, pwm_speedC);
    
  }

}

when i press the left button, the right motor stops as i want, but the other button doesnt work to stop the left motor

, 👍1

Обсуждение

вполне возможно, что вам нужны только два утверждения "если"... по одному на каждый мотор ... if (estado1 == HIGH) {} и if (estado2 == HIGH) {}, @jsotola


1 ответ


2

... другая кнопка ...

Точка с запятой (;) после следующей строки неверна:

if (estado1 == LOW && estado2 == HIGH);

С точкой с запятой в этой позиции ваш код имеет следующее значение:

if (estado1 == LOW && estado2 == HIGH)
{
}
if(1 == 1)
{
    digitalWrite(3, HIGH);
    ...
,

Вероятно, это не причина вашей проблемы, но вы используете INPUT_PULLUP, который подтягивает вывод до 5 В через внутренний резистор 20K Ом и в то же время внешний тянуть вниз 10K Ом, чистый результат (без нажатия кнопки) будет низким. Результат нажатия кнопки будет зависеть от ориентации ваших кнопок, которая не ясна на диаграмме., @Bra1n

@Martin Rosenau if(1 == 1) является синонимом if(true), @jsotola

@jsotola Это правильно; однако некоторые компиляторы C не поддерживают ключевое слово true. И я не знал, является ли компилятор, используемый для Arduino, одним из них, потому что у меня нет Arduino. Вы также можете написать if(1)"; однако для начинающих не очевидно, что делает " if(1)", в то время как все понимают 1==1` ., @Martin Rosenau

@MartinRosenau спасибо вам за эту информацию ... Каждый день я узнаю что-то новое, @jsotola