#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
RTC_DS1307 rtc; // Inisialisasi objek RTC
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD 16x2 biasanya 0x3F
const int buzzerPin = 8; // Pin untuk buzzer
const int joystickXPin = A0; // Pin untuk joystick sumbu X
const int joystickYPin = A1; // Pin untuk joystick sumbu Y
void setup() {
Wire.begin();
rtc.begin();
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight LCD
pinMode(buzzerPin, OUTPUT);
}
void loop() {
DateTime now = rtc.now(); // Dapatkan waktu sekarang dari RTC
// Membaca nilai dari joystick sumbu X dan Y
int joystickXValue = analogRead(joystickXPin);
int joystickYValue = analogRead(joystickYPin);
// Tampilkan waktu pada LCD
lcd.setCursor(0, 0);
lcd.print("Jam: ");
lcd.print(now.hour());
lcd.print(":");
if (now.minute() < 10) {
lcd.print("0");
}
lcd.print(now.minute());
lcd.print(":");
if (now.second() < 10) {
lcd.print("0");
}
lcd.print(now.second());
// Tampilkan tanggal pada LCD
lcd.setCursor(0, 1);
lcd.print("Tanggal: ");
lcd.print(now.day());
lcd.print("/");
lcd.print(now.month());
lcd.print("/");
lcd.print(now.year());
// Tambahkan kode di bawah ini untuk menangani timer dan alarm berdasarkan nilai joystickXValue dan joystickYValue
// Timer
int timerDuration = map(joystickXValue, 0, 1023, 0, 3600); // Maksimum 1 jam
// Alarm
int alarmThreshold = map(joystickYValue, 0, 1023, 0, 60); // Maksimum 60 detik
// Memeriksa jika timer telah habis
if (timerDuration > 0) {
delay(timerDuration * 1000); // Menunggu hingga timer habis
digitalWrite(buzzerPin, HIGH); // Bunyikan buzzer
delay(1000); // Bunyi buzzer selama 1 detik
digitalWrite(buzzerPin, LOW); // Matikan buzzer
}
// Memeriksa jika waktu saat ini sama dengan alarm yang diatur
if (now.second() == alarmThreshold) {
digitalWrite(buzzerPin, HIGH); // Bunyikan buzzer
delay(1000); // Bunyi buzzer selama 1 detik
digitalWrite(buzzerPin, LOW); // Matikan buzzer
}
delay(1000); // Tunggu 1 detik sebelum menampilkan waktu berikutnya
}