#include #include #include RTC_DS3231 rtc; const int buttonPins[] = {2, 3, 4, 5}; const int ledPins[] = {8, 9, 10, 11}; const int ledMap[] = {3, 1, 0, 2}; const int resistorPin = 6; // RESISTOR GOES HERE (Pin 6 to GND) bool ledState[] = {false, false, false, false}; bool resetPerformed = false; unsigned long lastKeepAlive = 0; const int pulseDuration = 800; // 0.2s is usually enough to reset the timer const int pulseInterval = 10000; // 20s interval (test if your power bank handles this) void setup() { rtc.begin(); // Ensure the resistor pin starts LOW (off) pinMode(resistorPin, OUTPUT); digitalWrite(resistorPin, LOW); // Disable the onboard LED explicitly pinMode(13, OUTPUT); digitalWrite(13, LOW); for (int i = 0; i < 4; i++) { pinMode(buttonPins[i], INPUT_PULLUP); pinMode(ledPins[i], OUTPUT); ledState[i] = EEPROM.read(i); digitalWrite(ledPins[i], ledState[i] ? HIGH : LOW); } } void loop() { DateTime now = rtc.now(); unsigned long currentMillis = millis(); // --- 1. SILENT KEEP-ALIVE (PIN 6 ONLY) --- if (currentMillis - lastKeepAlive > pulseInterval) { digitalWrite(resistorPin, HIGH); if (currentMillis - lastKeepAlive > (pulseInterval + pulseDuration)) { digitalWrite(resistorPin, LOW); lastKeepAlive = currentMillis; } } // --- 2. BUTTONS --- for (int i = 0; i < 4; i++) { if (digitalRead(buttonPins[i]) == LOW) { delay(50); int targetLed = ledMap[i]; ledState[targetLed] = !ledState[targetLed]; digitalWrite(ledPins[targetLed], ledState[targetLed] ? HIGH : LOW); EEPROM.update(targetLed, ledState[targetLed]); while(digitalRead(buttonPins[i]) == LOW); } } // --- 3. DAILY RESET (12:00 PM) --- if (now.hour() == 12 && now.minute() == 0 && now.second() == 0) { if (!resetPerformed) { for (int k = 0; k < 4; k++) { ledState[k] = false; digitalWrite(ledPins[k], LOW); EEPROM.update(k, false); } resetPerformed = true; } } else { resetPerformed = false; } }