Заимел скетч, а так же поимел с ним проблему. При нажатии кнопки всё срабатывает, но иногда при отпускании кнопки происходит так же срабатывание. Подключал резистор не помогает. На другом скетче эта кнопка работает нормально. подскажите, в чём проблема. #define BUTTON_PIN 4 // кнопка подключается между пином и GND #define LED_PIN 13 // LED подключается через резистор 200-400 Ом между пином и GND const byte ledTimeout = 1; // время до отключения LED, сек (не более 255) boolean LEDstate; // переменная-флаг для обмена информацией между функциями unsigned long timestamp; // переменная для расчета времени отключения LED void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(LED_PIN, OUTPUT); } void loop() { checkButton(); // вызываем функцию чтения состояния кнопки setLED(); // вызываем функцию управления LED } void checkButton() { static boolean btnState = false; // локальная переменная для хранения состояния кнопки if (!digitalRead(BUTTON_PIN)) // реакция на нажатие кнопки { if (btnState == false) // если до этого момента кнопка была НЕ нажата... { btnState = true; // то ставим флаг, что кнопка нажата, LEDstate = true; // разрешаем включение LED timestamp = millis() + ledTimeout * 50; // и запоминаем время отключения } } else btnState = false; // реакция на отжатие кнопки: ставим флаг, что кнопка НЕ нажата } void setLED() { if (LEDstate == true) // если включение LED разрешено... { if (millis() < timestamp) digitalWrite(LED_PIN, HIGH); // и если с момента включения прошло меньше 2 сек, то подаем питание на LED else LEDstate = false; // если прошло больше 2 сек, то запрещаем включение LED } else digitalWrite(LED_PIN, LOW); // в любом другом случае гасим LED }
Код (C++): #define BUTTON_PIN 4 // кнопка подключается между пином и GND #define LED_PIN 13 // LED подключается через резистор 200-400 Ом между пином и GND const byte ledTimeout = 1; // время до отключения LED, сек (не более 255) boolean LEDstate; // переменная-флаг для обмена информацией между функциями unsigned long timestamp; // переменная для расчета времени отключения LED void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(LED_PIN, OUTPUT); } void loop() { checkButton(); // вызываем функцию чтения состояния кнопки setLED(); // вызываем функцию управления LED } void checkButton() { static boolean btnState = false; // локальная переменная для хранения состояния кнопки if (!digitalRead(BUTTON_PIN)) // реакция на нажатие кнопки { if (btnState == false) // если до этого момента кнопка была НЕ нажата... { btnState = true; // то ставим флаг, что кнопка нажата, LEDstate = true; // разрешаем включение LED timestamp = millis() + ledTimeout * 50; // и запоминаем время отключения } } else btnState = false; // реакция на отжатие кнопки: ставим флаг, что кнопка НЕ нажата } void setLED() { if (LEDstate == true) // если включение LED разрешено... { if (millis() < timestamp) digitalWrite(LED_PIN, HIGH); // и если с момента включения прошло меньше 2 сек, то подаем питание на LED else LEDstate = false; // если прошло больше 2 сек, то запрещаем включение LED } else digitalWrite(LED_PIN, LOW); // в любом другом случае гасим LED }