#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
#define buzzer 7
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Tone for buzzer
int song[] = {500, 1000, 250, 750, 700, 600, 400, 550, 220, 800};
// Duration of the buzzer
int durasi[] = {100, 200, 100, 200, 100, 200, 100, 200, 100, 200};
char seminggu[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup() {
lcd.begin(16, 2);
lcd.backlight();
if (!rtc.begin()) {
lcd.print("Tidak dapat menemukan RTC");
while (1);
}
if (rtc.lostPower()) {
lcd.print("RTC kehilangan daya, Atur waktu!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
pinMode(buzzer, OUTPUT);
while (!Serial);
Serial.begin(57600);
}
void alarm(int tgl_alarm, int jam_alarm, int mnt_alarm) {
DateTime now = rtc.now();
int day = now.day();
int jam = now.hour();
int menit = now.minute();
if (tgl_alarm == day) {
if (jam_alarm == jam) {
if (mnt_alarm == menit) {
for (int note = 0; note < 10; note++) {
tone(buzzer, song[note], durasi[note]);
delay(durasi[note]);
Serial.println("ALARM BUNYI!!");
}
}
}
}
delay(1000);
}
void loop() {
DateTime now = rtc.now();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Time: ");
lcd.print(formatDigits(now.hour()));
lcd.print(":");
lcd.print(formatDigits(now.minute()));
lcd.print(":");
lcd.print(formatDigits(now.second()));
lcd.setCursor(0, 1);
lcd.print("Date: ");
lcd.print(formatDigits(now.day()));
lcd.print("/");
lcd.print(formatDigits(now.month()));
lcd.print("/");
lcd.print(now.year());
delay(1000);
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(seminggu[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.println(now.second(), DEC);
delay(1000);
// Set alarm (Tanggal, Jam, Menit)
alarm(29, 9, 19);
}
String formatDigits(int digits) {
if (digits < 10) {
return "0" + String(digits);
} else {
return String(digits);
}
}