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()) {
Пожалуйста, используйте ссылку «Изменить» в вашем вопросе, чтобы добавить дополнительную информацию. Кнопка «Отправить ответ» должна использоваться только для полных ответов на вопрос. - [Из обзора](/review/low-quality-posts/36734), @VE7JRO
Я предлагаю @C Steph отредактировать свой вопрос и вернуть исходный неработающий код. Затем вы можете отредактировать свой ответ и использовать свой полный функциональный скетч с библиотекой Bounce2. Ваш текущий ответ состоит всего из 7 слов, поэтому он неполный. Примерно через 24 часа вы сможете принять свой собственный ответ, и я призываю вас это сделать. Это даст вам дополнительную репутацию в сети Arduino.SE., @VE7JRO
Если вы отредактируете свой вопрос с помощью исправления, то ответы (и ваш вопрос) не будут иметь *никакого* смысла. @VE7JRO - Я сделал это для OP., @Greenonline
Я искал, Вопрос = сломанный код, Ответ = полностью исправленный и рабочий код. Было 2 правки OP в их исходном Вопросе. Я надеялся, что OP изменит Вопрос обратно на эскиз, который они впервые опубликовали (он не использовал библиотеку Bounce2 и был идентичен эскизу в моем ответе, за исключением комментария к коду и дополнительного Serial.println, который я добавил). Есть ли способ вернуться назад через процесс редактирования вопроса, чтобы восстановить первый пост OP?, @VE7JRO
Я только что попытался отредактировать вопрос и не смог вернуться к первому посту OP. Скорее всего, мой уровень репутации недостаточно высок для доступа к информации или только модератор сайта может вносить такие изменения., @VE7JRO
- Как повторить другое действие внутри цикла?
- Кнопка выхода из текущего цикла
- Обнаружение нажатия кнопки в цикле
- Как сделать так, чтобы мой пьезо-зуммер гудел только один раз без повторения?
- Непрерывно запускайте функцию световой последовательности в операторе if
- Путаница между switch и if
- Состояние ввода остается HIGH, когда функция, вызываемая с помощью ввода, также использует тот же ввод для вызова другой функции
- Как переключить светодиод при нажатии кнопки?
Я добавил Bounce2 (я считаю, правильно), и результат все еще тот же. Я добавил этот бит, чтобы увидеть значение wOn, и оно правильно меняется между 0 и 1. Все еще тот же конечный результат. Я обновил свой фрагмент кода, чтобы отразить свои изменения., @C Steph
Кажется, он только меняет wOn обратно на false, когда я нажимаю на него, а затем мгновенно возвращается к 1. Проблема, похоже, в том, что он бесконечно меняет wOn обратно. Может быть, мне нужно учитывать изменения состояния?, @C Steph