Программное обеспечение, устраняющее дребезг кнопки при отпускании
У меня возникли проблемы с программным устранением дребезга на Arduino UNO. В моем коде есть условие, при котором нежелательный дребезг регистрируется как нажатие кнопки.
Я использую прерывание для нажатия кнопки, так как мой основной цикл иногда имеет большие задержки, если выполняются определенные условия. Я прикрепил вывод 2 к своему прерыванию следующим образом:
#define BTN 2
pinMode(BTN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(BTN),buttonClick, FALLING);
И моя функция прерывания:
volatile unsigned long _lastClick = 0;
void buttonClick()
{
unsigned long _clickTimer = millis();
if (_clickTimer - _lastClick > DEBOUNCE)
{
_timer = 0;
_count++;
_lcd.setCursor(0, 1);
_lcd.print(_count);
_softSerial.println("stuff");
}
_lastClick = _clickTimer;
}
Это работает просто отлично при нажатии кнопки. Однако это не учитывает отскок при отпускании кнопки. Поэтому иногда, если я удерживаю кнопку нажатой достаточно долго, а затем отпускаю, отскок от нажатия клавиши также регистрируется как падающий фронт.
Все работает просто отлично, если нажатие кнопки достаточно короткое, чтобы попасть в предел, установленный DEBOUNCE
. Каков наилучший способ гарантировать, что прерывание не будет вызвано при нажатии кнопки? Без добавления пассивных элементов в мою схему, таких как конденсаторы?
@Boyfinn, 👍0
1 ответ
Непроверенная идея: распознавать нажатие кнопки только по заднему фронту, который следует длительный период HIGH. Для этого вам придется:
присоедините обработчик прерываний к событиям CHANGE
обновлять
_lastClick
при каждом таком событииподтверждать нажатие, если время
DEBOUNCE
истекло и Входная строка читаетLOW
.
Примечание: делать длинные вещи (например, печатать на SoftSerial или LCD) в контексте прерывания.
- Устранение дребезга кнопки с помощью прерывания
- Хорошая кнопка debouncing/Библиотека StateChange
- Как прервать функцию цикла и перезапустить ее?
- Прерывание при нажатии кнопки + устранение дребезга
- Как заставить ЖК-экран прокручивать текст , позволяя вводить кнопки?
- Кнопка переключения переключает между операторами обращения с разблокированием кнопки
- Кнопка Отправить работает только при нажатии сразу после этого
- Внешнее прерывание кнопки (цифровой вывод 3) Arduino не работает