Я хочу нажать кнопку, чтобы остановить двигатель постоянного тока, но он не работает. Работает только одна кнопка
когда я нажимаю левую кнопку, правый двигатель останавливается, как я хочу, но другая кнопка не работает, чтобы остановить левый двигатель
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);
}
}
@susanna, 👍1
Обсуждение1 ответ
... другая кнопка ...
Точка с запятой (;
) после следующей строки неверна:
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
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
вполне возможно, что вам нужны только два утверждения "если"... по одному на каждый мотор ...
if (estado1 == HIGH) {}
иif (estado2 == HIGH) {}
, @jsotola