#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
RTC_DS1307 rtc;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Konfigurasi pin LCD
const int buttonPin = 6; // Pin untuk tombol
int hours = 12;
int minutes = 0;
bool actionPerformed = false;
void setup() {
Wire.begin();
rtc.begin();
lcd.begin(16, 2); // Inisialisasi LCD 16x2
pinMode(buttonPin, INPUT); // Mengatur pin tombol sebagai input
lcd.print("Jam Digital");
delay(2000);
lcd.clear();
}
void loop() {
DateTime now = rtc.now();
int currentHour = now.hour();
int currentMinute = now.minute();
lcd.setCursor(0, 0);
lcd.print("Jam: ");
if (currentHour < 10) {
lcd.print("0");
}
lcd.print(currentHour);
lcd.print(":");
if (currentMinute < 10) {
lcd.print("0");
}
lcd.print(currentMinute);
if (!actionPerformed && digitalRead(buttonPin) == HIGH) {
adjustTime();
}
if (currentHour == hours && currentMinute == minutes) {
performAction();
actionPerformed = true;
} else {
actionPerformed = false;
}
delay(1000);
}
void adjustTime() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Atur Waktu");
lcd.setCursor(0, 1);
lcd.print("HH:MM");
while (digitalRead(buttonPin) == LOW) {
if (digitalRead(buttonPin) == HIGH) {
while (digitalRead(buttonPin) == HIGH) {
delay(100);
}
hours = (hours + 1) % 24;
}
if (digitalRead(buttonPin) == HIGH) {
while (digitalRead(buttonPin) == HIGH) {
delay(100);
}
minutes = (minutes + 1) % 60;
}
lcd.setCursor(0, 1);
if (hours < 10) {
lcd.print("0");
}
lcd.print(hours);
lcd.print(":");
if (minutes < 10) {
lcd.print("0");
}
lcd.print(minutes);
}
rtc.adjust(DateTime(2023, 1, 1, hours, minutes, 0));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Waktu diatur!");
delay(2000);
lcd.clear();
}
void performAction() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Aksi Dilakukan!");
lcd.setCursor(0, 1);
lcd.print("Waktu: ");
if (hours < 10) {
lcd.print("0");
}
lcd.print(hours);
lcd.print(":");
if (minutes < 10) {
lcd.print("0");
}
lcd.print(minutes);
delay(3000);
lcd.clear();
}