#define BTN 3 // кнопка подключена сюда (PIN --- КНОПКА --- GND) #define DEBOUNCE 100 // таймаут антидребезга, миллисекунды boolean btnState, btnFlag; unsigned long debounceTimer; void setup() { Serial.begin(9600); pinMode(BTN, INPUT_PULLUP); } void loop() { btnState = !digitalRead(BTN); // читаем состояние кнопки с инверсией. 1 - нажата, 0 - нет // если нажата и была отпущена (btnFlag 0) и прошло не менее DEBOUNCE времени if (btnState && !btnFlag && (millis() - debounceTimer > DEBOUNCE)) { btnFlag = true; // запомнили что нажата debounceTimer = millis(); // запомнили время нажатия Serial.println("press"); } if (!btnState && btnFlag) { // если отпущена и была нажата (btnFlag 1) btnFlag = false; // запомнили что отпущена debounceTimer = millis(); // запомнили время отпускания Serial.println("release"); } }
Ссылка на источник: https://alexgyver.ru/arduino-algorithms/