Возвращать состояние кнопки только один раз в X раз?
Я хочу определить, была ли нажата кнопка, но я не хочу, чтобы она возвращала состояние "нажато" более одного раза в течение секунды или двух.
Например, с помощью этого кода:
void loop() {
passButtonState = digitalRead(passButton);
if (passButtonState == LOW) {
Serial.println("PASSED!");
}
}
Выдал бы что-то подобное одним быстрым нажатием кнопки:
PASSED!
PASSED!
PASSED!
PASSED!
PASSED!
PASSED!
PASSED!
PASSED!
PASSED!
Но я хочу, чтобы нажатие одной кнопки просто возвращало PASSED!
один раз для этого нажатия одной кнопки.
@Shpigford, 👍0
4 ответа
Лучший ответ:
Чтобы избежать этой проблемы, вы можете использовать логическую переменную в качестве флага, который разрешает войти внутрь if
только один раз.
bool flag = true;
void loop() {
passButtonState = digitalRead(passButton);
if (passButtonState == LOW && flag) {
Serial.println("PASSED!");
flag = false;
}
}
Вы можете добавить задержку.
void loop() {
passButtonState = digitalRead(passButton);
if (passButtonState == LOW) {
Serial.println("PASSED!");
delay(1000);
}
}
Не могли бы вы объяснить, почему это было бы хорошим решением? Хотя это может быть тривиальным для вас и меня, это точно будет не для всех. Кроме того, вы должны указать, что добавление задержки «замедлит» всю программу. Вы можете даже предложить альтернативные решения., @Paul
Если я правильно понимаю проблему, думаю, ответ может быть довольно распространенным. Ваша схема может страдать от "дребезга", и решение называется "устранение дребезга".
Перейдите по этой ссылке, чтобы найти возможное решение: Отказ от программного обеспечения
void loop() {
passButtonState = digitalRead(passButton);
if (passButtonState == LOW) {
Serial.println("PASSED!");
while (passButtonState == LOW) delay(1);
}
}
- Как запрограммировать кнопку джойстика, чтобы сбросить все?
- Как использовать SPI на Arduino?
- Библиотека DHT.h не импортируется
- Светодиоды: разница между общим анодом и общим катодом
- Как повторить кусок кода
- Хорошая кнопка debouncing/Библиотека StateChange
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
Но с этого момента эта кнопка навсегда отключается. Я просто хочу, чтобы он возвращался только один раз для каждого нажатия, а не дюжины., @Shpigford
@Shpigford, вы можете сбросить
flag = true
через некоторое время., @rebatoma