#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 Titik 1
const int balkonPin = 3; // Digital pin untuk Titik 2
const int ruangTengahPin = 4; // Digital pin untuk Titik 3
const int kamarPin = 5; // Digital pin untuk Titik 4
void setup() {
Serial.begin(9600);
Wire.begin();
rtc.begin();
rtc.adjust(DateTime(2024, 3, 23, 17, 0, 0)); // Set initial time to March 24, 2024,
//Only for Simulation
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Menghidupkan backlight LCD
pinMode(terasPin, OUTPUT); // Mengatur pin sebagai output
pinMode(balkonPin, OUTPUT); // Mengatur pin sebagai output
pinMode(ruangTengahPin, OUTPUT); // Mengatur pin sebagai output
pinMode(kamarPin, OUTPUT); // Mengatur pin sebagai output
// Menampilkan judul lampu pada LCD
lcd.setCursor(0, 2);
lcd.print("T.1: OFF T.2: OFF");
lcd.setCursor(0, 3);
lcd.print("T.3: OFF T.4: 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() >= 17 && now.minute() >= 0) or (now.hour() < 5 && now.minute() <= 59) ) {
// Lampu Teras dan Balkon Menyala
digitalWrite(terasPin, HIGH);
digitalWrite(balkonPin, 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);
digitalWrite(balkonPin, LOW);
// Menampilkan status lampu pada LCD
lcd.setCursor(5, 2);
lcd.print("OFF ");
lcd.setCursor(15, 2);
lcd.print("OFF ");
}
if ((now.hour() >= 17 && now.minute() >= 0) or (now.hour() < 6 && now.minute() <= 59) ) {
// Lampu Ruang Tengah dan Kamar Menyala
digitalWrite(ruangTengahPin, HIGH);
digitalWrite(kamarPin, 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(ruangTengahPin, LOW);
digitalWrite(kamarPin, 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
}