#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi objek RTC dan LCD
RTC_DS1307 Rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Ganti 0x27 ke 0x3F jika LCD tidak muncul
const int led1 = 2; // Pin LED atau relay
int lastHour = -1; // Menyimpan jam terakhir untuk deteksi perubahan jam
void setup() {
Serial.begin(115200);
Wire.begin();
Rtc.begin();
lcd.begin(16, 2); // Inisialisasi LCD 16 kolom, 2 baris
lcd.backlight(); // Aktifkan lampu latar LCD
pinMode(led1, OUTPUT);
digitalWrite(led1, LOW); // Awal: matikan lampu
// Aktifkan baris ini sekali untuk set waktu RTC sesuai waktu komputer:
// Rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop() {
DateTime now = Rtc.now();
int hour = now.hour();
int minute = now.minute();
int second = now.second();
// Tampilkan waktu ke LCD
lcd.setCursor(0, 0);
lcd.print("Waktu: ");
if (hour < 10) lcd.print("0");
lcd.print(hour);
lcd.print(":");
if (minute < 10) lcd.print("0");
lcd.print(minute);
lcd.print(":");
if (second < 10) lcd.print("0");
lcd.print(second);
// Tampilkan status lampu di baris kedua
lcd.setCursor(0, 1);
lcd.print("Lampu: ");
lcd.print(digitalRead(led1) == HIGH ? "NYALA " : "MATI ");
// Deteksi pergantian jam
if (hour != lastHour && minute == 0 && second == 0) {
Serial.println("Pergantian jam! Lampu dinyalakan.");
digitalWrite(led1, HIGH); // Nyalakan lampu
delay(10000); // Tunggu 10 detik
digitalWrite(led1, LOW); // Matikan lampu
lastHour = hour; // Simpan jam saat ini
}
delay(1000); // Tunggu 1 detik sebelum update lagi
}