Arduino - Кнопка для запуска/остановки цикла
По сути, я пытаюсь создать устройство, в котором при нажатии кнопки запускается цикл. Когда я снова нажимаю эту кнопку, цикл останавливается. Сейчас я подключил его к последовательному порту. Он запускается правильно, без выходных данных. Когда я нажимаю кнопку, цикл начинается, и он непрерывно выдает «включено». Когда я снова нажимаю кнопку... ничего не происходит. В идеале он должен перестать выдавать «включено» и просто вернуться к ничегонеделанию.
#include <Bounce2.h>
Bounce bouncer = Bounce();
const int W = 10;
bool wOn = false;
void setup() {
Serial.begin(9600);
pinMode(W, INPUT_PULLUP);
bouncer.attach(W);
bouncer.interval(5);
}
void loop() {
bouncer.update();
if (bouncer.read() == LOW) {
wOn = !wOn;
}
if (wOn > 0) {
Serial.println("toggled on");
}
}
@C Steph, 👍1
2 ответа
Если вы измените свой эскиз на этот, вы увидите проблему:
const int W = 10;
bool wOn = false;
void setup() {
Serial.begin(9600);
pinMode(W, INPUT_PULLUP);
}
void loop() {
if (digitalRead(W) == LOW) {
wOn = !wOn;
}
if (wOn) {
//Serial.println("toggled on");
}
Serial.println(wOn);
}
Контакты кнопки «дребезжат» (Google «contact bounce»), отправляя несколько сигналов от низкого к высокому. Есть несколько программных решений, которые устранят эту проблему. Взгляните на: arduino.cc/en/Tutorial/Debounce. Есть несколько библиотек, которые упрощают устранение дребезга кнопок: playground.arduino.cc/Code/Debounce и playground.arduino.cc/Code/Bounce
Исправлено. Решение, которое я использовал, состояло в том, чтобы добавить проверку изменения состояния с помощью .fell()
, что вы увидите ниже. Я добавил проверку изменения состояния с помощью Bounce2.fell()
, вот так:
if (bouncer.read() == LOW && bouncer.fell()) {
- Как повторить другое действие внутри цикла?
- Кнопка выхода из текущего цикла
- Обнаружение нажатия кнопки в цикле
- Как сделать так, чтобы мой пьезо-зуммер гудел только один раз без повторения?
- Непрерывно запускайте функцию световой последовательности в операторе if
- Путаница между switch и if
- Состояние ввода остается HIGH, когда функция, вызываемая с помощью ввода, также использует тот же ввод для вызова другой функции
- Как переключить светодиод при нажатии кнопки?