Arduino - Кнопка для запуска/остановки цикла

button loop

По сути, я пытаюсь создать устройство, в котором при нажатии кнопки запускается цикл. Когда я снова нажимаю эту кнопку, цикл останавливается. Сейчас я подключил его к последовательному порту. Он запускается правильно, без выходных данных. Когда я нажимаю кнопку, цикл начинается, и он непрерывно выдает «включено». Когда я снова нажимаю кнопку... ничего не происходит. В идеале он должен перестать выдавать «включено» и просто вернуться к ничегонеделанию.

#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");
  }
}

, 👍1


2 ответа


1

Если вы измените свой эскиз на этот, вы увидите проблему:

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

,

-1

Исправлено. Решение, которое я использовал, состояло в том, чтобы добавить проверку изменения состояния с помощью .fell(), что вы увидите ниже. Я добавил проверку изменения состояния с помощью Bounce2.fell(), вот так:

  if (bouncer.read() == LOW && bouncer.fell()) {
,