C++| ARDUINO IDE | ESP8266. Схема подключения кнопки

 

Рис. 1

Кнопочные переключатели, тумблеры и электромеханические реле имеют одно общее свойство: содержат контакты. Эти контакты металлические, они замыкают и размыкают цепь электрического тока. Поскольку металлические контакты  имеют массу и хотя бы один из контактов является подвижным и имеет упругость, то при замыкании  контакты смыкаются и отскакивают друг от друга несколько раз (обычно 5-100 раз в течении 40—100 миллисекунд) прежде чем, наконец, перейдут в полное замкнутое положение. Эффект называется «дребезг контактов» см. Рис 1. Обратите внимание, что контакты могут дребезжать как  при замыкании, а также при размыкании.

Соответственно, микроконтроллер в силу своего быстрого восприятия изменений на своих контактах ввода воспринимает все эти  импульсы дребезга контактов как настоящие сигналы , потому мы получаем ложные переключения вместе с настоящими замыканиями/размыканиями  кнопки.

C++| ARDUINO IDE | ESP8266. Программное подавление дребезга контактов

const byte interruptPin = D7;
volatile byte state = LOW;

void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), blink, FALLING);
}

void loop() {
digitalWrite(LED_BUILTIN, state);
}

void blink() {
static unsigned long millis_prev;
if ( millis () — 100 > millis_prev) state = !state; // меняем значение на противоположное
millis_prev = millis ();

Serial.print («I/O Pins Modes Set =»);
Serial.println (state);
}

После того как мы нажали кнопку несколько раз, то стало явно заметно по четкому переключению встроенного светодиода на плате ESP8266 что дребезг контактов устранен. И устранён он именно программным способом, так как на мониторе порта СОМ видно, что за счет дребезга функция обработки прерывания void blink() вызывалась несколько раз по однократному замыканию кнопки (вывод D7  закорачивался на землю), программная задержка срабатывания не давала изменить значение самой функции.

Рис. 1 Дребезг контактов  с кнопкой КМ-1-1 

*Важно.  Дребезг контактов сильно зависит от конструкции кнопки, например кнопка ПКН 125 (SWT-5  или  KAN1211-0431B ) имеет сравнительно низкий дребезг  контактов. Это можно увидеть на мониторе порта СОМ Рис.2 :

Рис.3 Дребезг контактов  с кнопкой ПКН 125