#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Sesuaikan alamat I2C dengan modul Anda.
const int ledPin = 13; // Pin LED (ganti sesuai kebutuhan)
bool isLedOn = false;
void setup() {
Wire.begin();
rtc.begin();
// Uncomment baris di bawah ini jika Anda ingin mengatur waktu awal RTC
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
pinMode(ledPin, OUTPUT);
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop() {
DateTime now = rtc.now();
// Waktu untuk menghidupkan LED (misalnya: 08:00)
int onHour = 14;
int onMinute = 43;
// Waktu untuk mematikan LED (misalnya: 20:00)
int offHour = 14;
int offMinute = 44;
// Konversi waktu hidup dan mati ke dalam menit
int onTimeInMinutes = onHour * 60 + onMinute;
int offTimeInMinutes = offHour * 60 + offMinute;
// Konversi waktu saat ini ke dalam menit
int currentTimeInMinutes = now.hour() * 60 + now.minute();
// Cek apakah saat ini dalam rentang waktu untuk menghidupkan atau mematikan LED
if (currentTimeInMinutes >= onTimeInMinutes && currentTimeInMinutes < offTimeInMinutes) {
if (!isLedOn) {
digitalWrite(ledPin, HIGH); // Menghidupkan LED
isLedOn = true;
}
} else {
if (isLedOn) {
digitalWrite(ledPin, LOW); // Mematikan LED
isLedOn = false;
}
}
// Tampilkan tanggal dan waktu pada LCD
lcd.setCursor(0, 0);
lcd.print("Date: ");
lcd.print(now.day());
lcd.print('/');
lcd.print(now.month());
lcd.print('/');
lcd.print(now.year());
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(now.hour());
lcd.print(':');
if (now.minute() < 10) {
lcd.print('0'); // Tambahkan 0 jika menit kurang dari 10
}
lcd.print(now.minute());
lcd.print(':');
if (now.second() < 10) {
lcd.print('0'); // Tambahkan 0 jika detik kurang dari 10
}
lcd.print(now.second());
delay(1000); // Tunggu 1 detik sebelum memeriksa waktu lagi
}