#include <TinyWireM.h>
#include "RTClib.h"
/* ---------- PIN DEFINITIONS ---------- */
#define RED_PIN 0 // PB0 (LED or Relay)
/* ---------- RED TIME SETTINGS ---------- */
// RED ON at 18:30
#define RED_ON_HOUR 18
#define RED_ON_MIN 30
// RED OFF at 06:00
#define RED_OFF_HOUR 6
#define RED_OFF_MIN 0
RTC_DS3231 rtc;
/* ---------- SETUP ---------- */
void setup() {
pinMode(RED_PIN, OUTPUT);
digitalWrite(RED_PIN, LOW); // RED OFF initially
TinyWireM.begin();
if (!rtc.begin()) {
while (1); // RTC error → fail safe
}
// ⚠️ RUN ONLY ONCE, THEN COMMENT
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
/* ---------- RED TIME CHECK ---------- */
bool isRedTime(int h, int m) {
int nowMin = h * 60 + m;
int onMin = RED_ON_HOUR * 60 + RED_ON_MIN;
int offMin = RED_OFF_HOUR * 60 + RED_OFF_MIN;
// Overnight case (evening → morning)
if (onMin > offMin) {
return (nowMin >= onMin || nowMin < offMin);
}
// Same-day case
return (nowMin >= onMin && nowMin < offMin);
}
/* ---------- LOOP ---------- */
void loop() {
DateTime now = rtc.now();
if (isRedTime(now.hour(), now.minute())) {
digitalWrite(RED_PIN, HIGH); // RED ON
} else {
digitalWrite(RED_PIN, LOW); // RED OFF
}
delay(1000); // check every second
}