#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int buttonPin = 4; // Pin pushbutton
int buttonState = 0; // Variabel untuk menyimpan status tombol
bool lcdOn = true; // Status LCD (hidup atau mati)
RTC_DS1307 RTC;
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
// Inisialisasi Serial, RTC, dan LCD
Serial.begin(9600);
RTC.begin();
lcd.init();
lcd.backlight();
pinMode(buttonPin, INPUT_PULLUP); // Mengatur pin pushbutton sebagai input dengan pull-up resistor
// Cek ketersediaan RTC
if (!RTC.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
// Atur waktu RTC secara manual jika tidak berjalan
if (!RTC.isrunning()) {
Serial.println("RTC is NOT running!");
RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
// Tombol ditekan, ubah status LCD
lcdOn = !lcdOn;
delay(500); // Memberikan waktu debouncing
if (lcdOn) {
lcd.backlight(); // Hidupkan LCD jika status LCD On
} else {
lcd.noBacklight(); // Matikan LCD jika status LCD Off
lcd.clear(); // Bersihkan tampilan LCD
}
}
if (lcdOn) {
// Menampilkan tanggal dan waktu pada Serial Monitor Dan LCD
DateTime now = RTC.now();
// Serial Monitor
Serial.print("Date: ");
Serial.print(now.day());
Serial.print("-");
Serial.print(now.month());
Serial.print("-");
Serial.print(now.year());
Serial.print("\n");
Serial.print("Time: ");
Serial.print(now.hour());
Serial.print(":");
if (now.minute() < 10) { // Mengatur angka tetap 2 digit ketika angka kurang dari 10
Serial.print("0"); }
Serial.print(now.minute());
Serial.print(":");
if (now.second() < 10) { // Mengatur angka tetap 2 digit ketika angka kurang dari 10
Serial.print("0"); }
Serial.print(now.second());
Serial.print("\n");
// LCD
lcd.setCursor(2, 1);
lcd.print("Date: ");
lcd.print(now.day());
lcd.print("-");
lcd.print(now.month());
lcd.print("-");
lcd.print(now.year());
lcd.setCursor(2, 2);
lcd.print("Time: ");
lcd.print(now.hour());
lcd.print(":");
if (now.minute() < 10) { // Mengatur angka tetap 2 digit ketika angka kurang dari 10
lcd.print("0"); }
lcd.print(now.minute());
lcd.print(":");
if (now.second() < 10) { // Mengatur angka tetap 2 digit ketika angka kurang dari 10
lcd.print("0"); }
lcd.print(now.second());
delay(799);
}
}