#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat LCD dan ukuran 20x4
const int terasPin = 2; // Digital pin untuk lampu Teras (kuning)
void setup() {
Serial.begin(9600);
Wire.begin();
rtc.begin();
rtc.adjust(DateTime(2024, 3, 23, 9, 0, 0)); // Set initial time to March 23, 2024, 17:00:00
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Menghidupkan backlight LCD
pinMode(terasPin, OUTPUT); // Mengatur pin sebagai output (kuning)
// Menampilkan judul lampu pada LCD
lcd.setCursor(0, 2);
lcd.print("TRS: OFF BLK: OFF");
lcd.setCursor(0, 3);
lcd.print("TGH: OFF KMR: OFF");
}
void loop() {
DateTime now = rtc.now(); // Mendapatkan waktu sekarang dari RTC
// Menampilkan tanggal dan waktu pada LCD
lcd.setCursor(0, 0);
lcd.print(now.day(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.year(), DEC);
lcd.print(" ");
lcd.print(now.hour(), DEC);
lcd.print(':');
if (now.minute() < 10) lcd.print('0'); // Menambahkan 0 di depan menit jika kurang dari 10
lcd.print(now.minute(), DEC);
lcd.print(':');
if (now.second() < 10) lcd.print('0'); // Menambahkan 0 di depan detik jika kurang dari 10
lcd.print(now.second(), DEC);
// Jam untuk menyalakan dan mematikan lampu
if ((now.hour() >= 8 && now.hour() < 11)) {
// Lampu Teras dan Balkon Menyala
digitalWrite(terasPin, HIGH);
// Menampilkan status lampu pada LCD
lcd.setCursor(5, 2);
lcd.print("ON ");
lcd.setCursor(15, 2);
lcd.print("ON ");
}
else {
// Lampu Teras dan Balkon Mati
digitalWrite(terasPin, LOW);
// Menampilkan status lampu pada LCD
lcd.setCursor(5, 2);
lcd.print("OFF ");
lcd.setCursor(15, 2);
lcd.print("OFF ");
}
if ((now.hour() >= 15 && now.hour() < 18)) {
// Lampu Ruang Tengah dan Kamar Menyala
digitalWrite(terasPin, HIGH);
// Menampilkan status lampu pada LCD
lcd.setCursor(5, 3);
lcd.print("ON ");
lcd.setCursor(15, 3);
lcd.print("ON ");
} else {
// Lampu Ruang Tengah dan Kamar Mati
digitalWrite(terasPin, LOW);
// Menampilkan status lampu pada LCD
lcd.setCursor(5, 3);
lcd.print("OFF ");
lcd.setCursor(15, 3);
lcd.print("OFF ");
}
delay(1000); // Tunggu 1 detik sebelum melakukan loop lagi
}