Переключение режимов кнопкой
- Войдите на сайт для отправки комментариев
Здравствуйте, как сделать кнопку на удержание?
мне нужно переключать режимы работы двигателей одной кнопкой, при этом, второй режим работы нужно настроить как-то на удержание, то есть: пока кнопка нажата - двигатели не работают.
в целом, все это должно выглядеть так: подключаю ардуинку к питанию через USB порт, двигатели не работают, затем, нажимаю кнопку - двигатели работают, крутятся вперед. Нажимаю второй раз кнопку и обязательно удерживаю её - двигатели останавливаются до тех пор, пока я не отпущу кнопку. Если я отпускаю кнопку двигатели крутятся в обратную сторону
(А1, В1 отвечают за движение вперед, А2 В2 - за движение назад)
пока удалось создать просто переключение режимов кнопкой, то есть одно нажатие - движки работают, второе, не работают, третье - работают в обратную сторону)
Moderator : пожалуйста, вставьте код правильно (возможно, новым сообщением в тему),
Топик "Титановый велосипед" почитай - там есть класс для кнопки, у которого есть нужный функционал.
Что-то еще менее понятно стало, есть где попроще? а то я совсем зеленый в этом деле..
есть где попроще?
Для начала, прочитайте обязательную для всех новичков тему и "зайдите, как положено".
Можете попробовать но без антидребезга может работать не стабильно.
int button1 = 10; const int motorB1 = 8; const int motorB2 = 9; const int motorA1 = 11; const int motorA2 = 12; bool flag = 0; uint8_t regim = 0; uint8_t temp_regim = 0; void setup() { Serial.begin(9600); pinMode(motorB1, OUTPUT); pinMode(motorB2, OUTPUT); pinMode(motorA1, OUTPUT); pinMode(motorA2, OUTPUT); pinMode(button1, INPUT); } void loop() { if (digitalRead(button1) == LOW && flag == 0) { temp_regim = regim; regim = 0; flag = 1; } if (digitalRead(button1) == HIGH && flag == 1) { flag = 0; if(temp_regim == 1)regim = 2; else regim = 1; } if (regim == 1) { Serial.print("regim == 0"); digitalWrite(motorB1, HIGH); digitalWrite(motorB2, LOW); digitalWrite(motorA1, HIGH); digitalWrite(motorA2, LOW); } if (regim == 0) { Serial.print("regim == 1"); digitalWrite(motorB1, LOW); digitalWrite(motorB2, LOW); digitalWrite(motorA1, LOW); digitalWrite(motorA2, LOW); } if (regim == 2) { Serial.print("regim == 2"); digitalWrite(motorB1, LOW); digitalWrite(motorB2, HIGH); digitalWrite(motorA1, LOW); digitalWrite(motorA2, HIGH); } }int button1 = 10; const int motorB1 = 8; const int motorB2 = 9; const int motorA1 = 11; const int motorA2 = 12; int flag = 0; int regim = 0; void setup() { Serial.begin(9600); pinMode(motorB1, OUTPUT); pinMode(motorB2, OUTPUT); pinMode(motorA1, OUTPUT); pinMode(motorA2, OUTPUT); pinMode(button1, INPUT); } void loop() { if (digitalRead(button1) == LOW && flag == 0) { regim++; flag = 1; if(regim > 3) { regim = 0; } } if (digitalRead(button1) == HIGH && flag == 1) { flag = 0; } if (digitalRead(button1) == HIGH && flag == 0) { } if (regim == 0) { Serial.print("regim == 0"); digitalWrite(motorB1, HIGH); digitalWrite(motorB2, LOW); digitalWrite(motorA1, HIGH); digitalWrite(motorA2, LOW); } if (regim == 1) { Serial.print("regim == 1"); digitalWrite(motorB1, LOW); digitalWrite(motorB2, LOW); digitalWrite(motorA1, LOW); digitalWrite(motorA2, LOW); } if (regim == 2) { Serial.print("regim == 2"); digitalWrite(motorB1, LOW); digitalWrite(motorB2, HIGH); digitalWrite(motorA1, LOW); digitalWrite(motorA2, HIGH); } if (regim == 3) { Serial.print("regim == 3"); digitalWrite(motorB1, LOW); digitalWrite(motorB2, LOW); digitalWrite(motorA1, LOW); digitalWrite(motorA2, LOW); } }Теперь код вроде бы работает, но после удержания кнопки, перекидывает в первый режим, а при повторном удержании в 3ий, минуя второй
вы бы для начала четко описали, что и как должно переключатся. Например в заглавном сообщении я никаких трех оежимов не вижу.