Дребезг контактов
Программное решение
Теперь рассмотрим программное решение проблемы дребезга. В данном методе для избежания дребезга контактов программно отключается реакция Arduino на повторное нажатие кнопки в течении определённого времени. Таким образом, когда на Arduino с нажатием кнопки появится первое колебание, она перестанет воспринимать какие-либо колебания на этом выводе в течении определённого времени.
Опрос кнопки
Пример использования кнопки для управления работы светодиода без использования прерывания приведён ниже.В функции void setup мы должны установить режимы работы выводов:
pinMode(13, OUTPUT);
pinMode(2, INPUT);
Затем нам понадобятся переменные -- чтобы хранить состояние кнопки:
byte button = 0; // Состояние светодиода
byte oldbutton = 1; // Последнее состояние светодиода, для
// исключения ложных переключений
Теперь напишем в функцию loop проверку и реализацию управления светодиодом:
if (digitalRead(2) == HIGH) { // Кнопка нажата?
delay(100); //Защита от дребезга
//Проверка, что состояние кнопки изменилось
if (button == oldbutton) {
button = ! button;
}
} else {
oldbutton = button;
}
digitalWrite(13, button); //Переключаем светодиод
Пример программного решения дребезга кнопки используя прерывания:
const int BUTTON_PIN = 18;
void
setup() {
//
Установка прерывания
pinMode(BUTTON_PIN,
INPUT_PULLUP); // button
attachInterrupt(digitalPinToInterrupt(BUTTON_PIN),
butISR,
RISING);
}
//
инициализация переменных
bool
is_button_disabled = false;
unsigned
long
button_timer
= 0;
int is_led_enabled = false;