#define BUTTON_PIN 8 #define LED_PIN 9 #define ON_TIME_MS 3000 #define BOUNCE_MS 500 unsigned long lastOnTime = 0; unsigned long lastChangeTime = 0; byte isLedOn = false; void setup() { pinMode(BUTTON_PIN, INPUT); pinMode(LED_PIN, OUTPUT); } void loop() { unsigned long now = millis(); if ((digitalRead(BUTTON_PIN) == HIGH) && (BOUNCE_MS < (now - lastChangeTime))) { if (isLedOn) { digitalWrite(LED_PIN, LOW); isLedOn = false; lastChangeTime = now; } else { digitalWrite(LED_PIN, HIGH); isLedOn = true; lastOnTime = now; lastChangeTime = now; } } if ((ON_TIME_MS < (now - lastOnTime)) && isLedOn) { digitalWrite(LED_PIN, LOW); isLedOn = false; } }