#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
}
GND5VSDASCLSQWRTCDS1307+