#include <Wire.h> // Library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C
#include <RTClib.h> // Library untuk Real-time Clock
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27,20,4); //Mengakses alamat LCD
const int BalkonDanTerasRelay = 2; // Pin untuk relay lampu balkon dan teras
const int RuangTengahDanKamarRelay = 3; // Pin untuk relay lampu ruang tengah dan kamar
char namaHari [7][12]= {"Minggu","Senin","Selasa","Rabu","Kamis","Jum'at","Sabtu"};
String namaBulan[] {"","Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"};
void setup() {
lcd.init(); // Reset LCD
lcd.backlight(); // Menyalakan background LCD
rtc.begin(); // Mulai Real time clock
pinMode(BalkonDanTerasRelay, OUTPUT);
pinMode(RuangTengahDanKamarRelay, OUTPUT);
rtc.adjust(DateTime(2023,02,10,22,24,18));
}
void loop() {
DateTime now = rtc.now();
lcd.setCursor(0,0);
lcd.setCursor(1,1);
lcd.print(namaHari[now.dayOfTheWeek()]);
lcd.setCursor(7,1);
lcd.print(","); lcd.print(now.day()); lcd.print("/"); lcd.print(namaBulan[now.month()]); lcd.print("/"); lcd.print(now.year());
lcd.setCursor(11,2);
lcd.print(now.hour()); lcd.print(":"); lcd.print(now.minute()); lcd.print(":"); lcd.print(now.second());
if (now.hour() >= 18 && now.minute() >= 0 && now.second() >=0 ||now.hour()<6) {
// Saat pukul 18.00
digitalWrite(BalkonDanTerasRelay, HIGH); //Nyalakan lampu Teras dan Balkon
} else {
// Saat pukul 06.00
digitalWrite(BalkonDanTerasRelay, LOW); // Matikan lampu Teras dan Balkon
}
if (now.hour() >= 17 && now.minute() >= 0 && now.second() >= 0 || now.hour()<6) {
// Saat pukul 17.00
digitalWrite(RuangTengahDanKamarRelay, HIGH); //Nyalakan lampu Ruang Tengah dan Kamar
} else {
// Saat pukul 06.00
digitalWrite(RuangTengahDanKamarRelay, LOW); //Matikan lampu Ruang Tengah dan Kamar
}
}