Дребезг контактов

Программное решение

Теперь рассмотрим программное решение проблемы дребезга. В данном методе для избежания дребезга контактов программно отключается реакция 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;