#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};
int jam, menit, detik;
int tanggal, bulan, tahun;
String hari;
#define BUZZER_PIN 8
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definisi nada
#define Do 262
#define Re 294
#define Mi 330
#define Fa 349
#define So 392
#define La 440
#define Si 494
#define Do2 523
#define Re2 587
#define Mi2 659
#define Fa2 698
#define So2 784
#define La2 880
#define Si2 988
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("PKL: 00:00");
lcd.setCursor(0, 1);
lcd.print("Tanggal...");
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
while (1) delay(10);
}
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
DateTime now = rtc.now();
jam = now.hour();
menit = now.minute();
detik = now.second();
tanggal = now.day();
bulan = now.month();
tahun = now.year();
hari = daysOfTheWeek[now.dayOfTheWeek()];
// Update jam di LCD
lcd.setCursor(5, 0);
lcd.print(String(jam) + ":" + String(menit) + ":" + String(detik));
// Format dan tampilkan tanggal
char tanggalLengkap[16];
sprintf(tanggalLengkap, "%02d-%02d-%04d", tanggal, bulan, tahun);
lcd.setCursor(0, 1);
lcd.print(hari + " ");
lcd.print(tanggalLengkap);
// Bunyikan buzzer setiap 15 detik
if (detik % 15 == 0) {
alarm();
}
delay(1000);
}
void alarm() {
int lagu[] = {
Do2, Do2, Do2, Do2, Do2, Si, La, Do2, Si, La, So,
So, Re2, Re2, Re2, Re2, Re2, Do2, Re2, Mi2, Fa2, Mi2, Re2, Do2,
Do2, Do2, Do2, Do2, Do2, Si, La, Do2, Si, La, So,
So, Re2, Re2, Re2, Re2, Re2, Do2, Re2, Mi2, Fa2, Mi2, Re2, Do2,
Fa2, Fa2, Fa2, Fa2, Fa2, La2, La2, Mi2, Mi2, Mi2, Mi2, Mi2, So2, So2,
Re2, Re2, Re2, Re2, Re2, Do2, Re2, Mi2, Fa2, Mi2, Re2, Do2,
Fa2, Fa2, Fa2, Fa2, Fa2, La2, La2, Mi2, Mi2, Mi2, Mi2, Mi2, So2, So2,
Re2, Re2, Re2, Re2, Re2, Do2, Re2, Mi2, Fa2, Mi2, Re2, Do2
}; // Lagu "Anak Kambing Saya"
int tempo[] = {
100,100,100,100,150,100,100,100,100,100,150,
100,100,100,100,100,150,100,100,100,100,100,
100,200,
100,100,100,100,150,100,100,100,100,100,150,
100,100,100,100,100,150,100,100,100,100,100,
100,200,
100,100,100,100,100,100,150,
100,100,100,100,100,100,150,
100,100,100,100,150,100,100,100,100,100,100,150,
100,100,100,100,100,100,150,
100,100,100,100,100,100,150,
100,100,100,100,150,100,100,100,100,100,100,150
};
int j = sizeof(lagu) / sizeof(lagu[0]);
for (int i = 0; i < j; i++) {
tone(BUZZER_PIN, lagu[i]); // Mainkan nada
delay(tempo[i]); // Tunggu sesuai tempo
noTone(BUZZER_PIN); // Matikan nada
delay(100); // Jeda antar nada
}
}