#include <Wire.h>
#include "RTClib.h"
// Pines
const int PIN_RELE = 23;
const int PIN_PIR = 19;
RTC_DS1307 rtc;
bool luz = false;
unsigned long ultimoMovimiento = 0;
const unsigned long TIEMPO_ON = 20000; // 20 segundos para la prueba
void setup() {
pinMode(PIN_RELE, OUTPUT);
pinMode(PIN_PIR, INPUT);
Serial.begin(115200);
// I2C estándar para ESP32
Wire.begin(21, 22);
if (!rtc.begin()) {
Serial.println("RTC no encontrado");
while (1);
}
// Descomentar línea solo una vez para ajustar la hora si es necesario
// rtc.adjust(DateTime(2026, 3, 28, 18, 0, 0));
}
void loop() {
DateTime now = rtc.now();
int hora = now.hour();
Serial.println(hora);
// 🕕 6pm–10pm: Encendido fijo
if (hora >= 18 && hora < 22) {
luz = true;
}
// 🌙 10pm–6am: Encendido por movimiento
else if (hora >= 22 || hora < 6) {
if (digitalRead(PIN_PIR) == HIGH) {
ultimoMovimiento = millis();
}
// La luz se mantiene encendida si no ha pasado el TIEMPO_ON desde el último movimiento
luz = (millis() - ultimoMovimiento < TIEMPO_ON);
}
// 🌞 Día (6am - 6pm): Apagado
else {
luz = false;
}
// Ejecutamos la acción en el relé
digitalWrite(PIN_RELE, luz);
}