#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
// Inisialisasi LCD I2C
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Inisialisasi RTC DS1307
RTC_DS1307 rtc;
void setup() {
// Memulai komunikasi dengan LCD
lcd.begin(20, 4); // Menambahkan argumen kolom dan baris
lcd.backlight(); // Menyalakan lampu latar LCD
// Memulai komunikasi dengan RTC
if (!rtc.begin()) {
lcd.print("RTC tidak ditemukan!");
while (1);
}
// Memeriksa kembali RTC
if (!rtc.isrunning()) {
lcd.clear();
lcd.print("Mengatur waktu...");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Set waktu awal ke waktu kompilasi
}
}
void loop() {
DateTime now = rtc.now(); // Membaca waktu dari RTC
// Menampilkan judul
lcd.setCursor(0, 0);
lcd.print("Waktu Digital");
// Menampilkan waktu pada baris kedua
lcd.setCursor(0, 1);
lcd.print("Waktu : ");
if (now.hour() < 10) lcd.print("0"); // Tambah 0 jika jam kurang dari 10
lcd.print(now.hour());
lcd.print(":");
if (now.minute() < 10) lcd.print("0"); // Tambah 0 jika menit kurang dari 10
lcd.print(now.minute());
lcd.print(":");
if (now.second() < 10) lcd.print("0"); // Tambah 0 jika detik kurang dari 10
lcd.print(now.second());
// Menampilkan tanggal pada baris ketiga
lcd.setCursor(0, 2);
lcd.print("Tanggal: ");
lcd.print(now.day());
lcd.print("/");
lcd.print(now.month());
lcd.print("/");
lcd.print(now.year());
// Menampilkan hari pada baris keempat
lcd.setCursor(0, 3);
lcd.print("Hari: ");
int hari = now.dayOfTheWeek();
switch (hari) {
case 0: lcd.print("Minggu"); break;
case 1: lcd.print("Senin"); break;
case 2: lcd.print("Selasa"); break;
case 3: lcd.print("Rabu"); break;
case 4: lcd.print("Kamis"); break;
case 5: lcd.print("Jumat"); break;
case 6: lcd.print("Sabtu"); break;
}
delay(1000); // Update setiap detik
}