first version
This commit is contained in:
76
arduino_logic.ino
Normal file
76
arduino_logic.ino
Normal file
@@ -0,0 +1,76 @@
|
||||
#include <Wire.h>
|
||||
#include <RTClib.h>
|
||||
#include <EEPROM.h>
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user