#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <RTClib.h> // Pustaka untuk RTC DS3231

RTC_DS1307 rtc; // Objek RTC DS3231

const int Ledpin = 2;
const int Ledpin1 = 3;
const int Buttonpin = 4;
const int Buzzerpin = 8;
LiquidCrystal_I2C lcd(0x27,20,4);

void setup() {
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  pinMode(Ledpin, OUTPUT);
  pinMode(Ledpin1, OUTPUT);
  pinMode(Buttonpin, INPUT_PULLUP);
  pinMode(Buzzerpin, OUTPUT);

  // Inisialisasi RTC DS3231
  if (!rtc.begin()) {
    Serial.println("Modul RTC tidak ditemukan!");
    while (1);
  }
}

void loop() {
  DateTime now = rtc.now(); // Baca waktu dari RTC
  
  // Menampilkan waktu pada LCD
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Waktu:");
  lcd.setCursor(0, 1);
  lcd.print(now.hour());
  lcd.print(":");
  if (now.minute() < 10) {
    lcd.print("0"); // Menambahkan nol di depan menit jika kurang dari 10
  }
  lcd.print(now.minute());
  lcd.print(":");
  if (now.second() < 10) {
    lcd.print("0"); // Menambahkan nol di depan detik jika kurang dari 10
  }
  lcd.print(now.second());

  int tombol = digitalRead(Buttonpin);
  if(tombol == LOW){
    digitalWrite(Ledpin, HIGH);
    int melody[]={266,388,298};
    int durasi = 200;
    for (int i = 0; i < 3; i++) {
      tone(Buzzerpin, melody[i]);
      delay(durasi);
      noTone(Buzzerpin);
    }
  }

  // Memeriksa apakah waktu sekarang adalah 08:00
  if (now.hour() == 8 && now.minute() == 0) {
    digitalWrite(Ledpin, HIGH); // Menyalakan LED
  }
  
  // Memeriksa apakah waktu sekarang adalah 12:00
  if (now.hour() == 12 && now.minute() == 0) {
    // Memainkan nada
    int melody[] = {266, 388, 298};
    int durasi = 200;
    for (int i = 0; i < 3; i++) {
      tone(Buzzerpin, melody[i]);
      delay(durasi);
      noTone(Buzzerpin);
    }
  }

  delay(1000);
  digitalWrite(Ledpin1, HIGH);
  delay(1000);
  digitalWrite(Ledpin1, LOW);  
  digitalWrite(Ledpin, LOW);
}
$abcdeabcde151015202530fghijfghij
GND5VSDASCLSQWRTCDS1307+