#define BUTTON_PIN 2
#define LED_PIN 13
// Состояния
bool ledState = LOW; // Текущее состояние светодиода
bool lastButtonState = HIGH; // Предыдущее состояние кнопки (HIGH = отпущена)
bool buttonState = HIGH; // Текущее состояние кнопки
// Для антидребезга
const unsigned long DEBOUNCE_DELAY = 50; // 50 мс задержка антидребезга
unsigned long lastDebounceTime = 0;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP); // Используем внутренний подтягивающий резистор
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, ledState);
}
void loop() {
// Читаем состояние кнопки
int reading = digitalRead(BUTTON_PIN);
// Если состояние изменилось, сбрасываем таймер
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
// Если прошло достаточно времени после последнего изменения
if ((millis() - lastDebounceTime) > DEBOUNCE_DELAY) {
// Если состояние кнопки стабильно и отличается от сохранённого
if (reading != buttonState) {
buttonState = reading;
// Если кнопка была нажата (LOW, так как INPUT_PULLUP)
if (buttonState == LOW) {
ledState = !ledState; // Переключаем состояние
digitalWrite(LED_PIN, ledState);
}
}
}
lastButtonState = reading;
}