#include <Wire.h>
#include <RTClib.h>
#include <SPI.h>
#include <SD.h>
// Inisialisasi RTC dan SD card
RTC_DS3231 rtc;
const int chipSelect = 53;
// Daftar waktu alarm (format 24 jam)
// hari biasa
// adzan = 04:15 ; 11:45 ; 15:01 ; 17:41 ; 18:45 ------------- 1
// iqamah = 04:25 ; 11:48 ; 15:05 ; 17:47 ; 18:50 ------------ 2
// istirahat = 03:00 ; 11:10 ; 17:40 ------------------------- 3
// do'a makan = 11:11 ---------------------------------------- 4
// kembali kerja = 04:00 ; 12:09 ; 19:09 --------------------- 5
// int alarmHours[] = {3, 4, 4, 4, 11, 11, 11, 11, 12, 15, 15, 17, 17, 17, 18, 18, 19};
// int alarmMinutes[] = {0, 0, 15, 25, 10, 11, 45, 48, 9, 1, 5, 40, 41, 47, 45, 50, 9};
// int alarmTypes[] = {3, 5, 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 1, 2, 1, 2, 5};
// int totalAlarms = 17;
// hari jumat
// adzan = 04:15 ; 15:01 ; 17:41 ; 18:45 --------------------- 1
// iqamah = 04:25 ; 12:25 ; 15:05 ; 17:47 ; 18:50 ------------ 2
// istirahat = 03:00 ; 11:45 ; 17:40 ------------------------- 3
// do'a makan = 11:46 ---------------------------------------- 4
// kembali kerja = 04:00 ; 12:44 ; 19:09 --------------------- 5
// int fridayAlarmHours[] = {3, 4, 4, 4, 11, 11, 12, 12, 15, 15, 17, 17, 17, 18, 18, 19};
// int fridayAlarmMinutes[] = {0, 0, 15, 25, 45, 46, 25, 44, 1, 5, 40, 41, 47, 45, 50, 9};
// int fridayAlarmTypes[] = {3, 5, 1, 2, 3, 4, 2, 5, 1, 2, 3, 1, 2, 1, 2, 5};
// int totalFridayAlarms = 16;
//urutan alarm
// istirahat -> kembali -> adzan subuh -> iqamah -> istirahat -> do'a makan -> adzan dhuhur -> iqamah -> kembali kerja -> adzan ashar -> iqamah ->
// istirahat -> adzan maghrib -> iqamah -> adzan isya' -> iqamah -> kembali kerja
int alarmHours[] = {6, 12, 15, 18, 19}; // Waktu alarm di hari biasa (Senin-Kamis, Sabtu)
int alarmMinutes[] = {0, 0, 5, 0, 0}; // Waktu alarm menit
// Daftar waktu alarm khusus untuk hari Jumat
int fridayAlarmHours[] = {7, 7, 17}; // Waktu alarm Jumat
int fridayAlarmMinutes[] = {40, 48, 45}; // Menit alarm Jumat
// Alarm tipe: 1 untuk alarm1.wav, 2 untuk alarm2.wav
int alarmTypes[] = {1, 2, 3, 4, 5}; // Alarm biasa
int fridayAlarmTypes[] = {5, 1, 2}; // Alarm Jumat
// Jumlah alarm
int totalAlarms = 5;
int totalFridayAlarms = 3; // Jumlah alarm khusus Jumat
// Pin output audio
const int audioPin = 7;
const int ledPin = 6;
File audioFile;
// char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup() {
// Inisialisasi komunikasi serial
Serial.begin(9600);
// Inisialisasi RTC
if (!rtc.begin()) {
Serial.println("RTC tidak terdeteksi!");
while (1);
}
// Cek apakah RTC berjalan
if (rtc.lostPower()) {
Serial.println("RTC kehilangan daya, set waktu!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Set waktu ke waktu kompilasi
}
// Inisialisasi SD Card
if (!SD.begin(chipSelect)) {
Serial.println("SD Card gagal diinisialisasi!");
while (1);
}
// Inisialisasi pin audio
pinMode(audioPin, OUTPUT);
digitalWrite(6, HIGH);
delay(2000);
digitalWrite(6, LOW);
}
void loop() {
// Ambil waktu sekarang dari RTC
DateTime now = rtc.now();
int dayOfWeek = now.dayOfTheWeek(); // Dapatkan hari dalam seminggu (0 = Minggu, 5 = Jumat)
// Serial.print(now.year(), DEC);
// Serial.print('/');
// Serial.print(now.month(), DEC);
// Serial.print('/');
// Serial.print(now.day(), DEC);
// Serial.print("- Hari ke-");
// Serial.print(dayOfWeek);
// Serial.print('-');
// Serial.print(now.hour(), DEC);
// Serial.print(':');
// Serial.print(now.minute(), DEC);
// Serial.print(':');
// Serial.print(now.second(), DEC);
// Serial.println();
// delay(5000);
// Cek apakah hari ini adalah Jumat
if (dayOfWeek == 5) { // Jika hari Jumat
// Alarm khusus hari Jumat
for (int i = 0; i < totalFridayAlarms; i++) {
if (now.hour() == fridayAlarmHours[i] && now.minute() == fridayAlarmMinutes[i] && now.second() == 0) {
if (fridayAlarmTypes[i] == 1) {
// playAlarmSound("alarm1.wav"); // Mainkan alarm1
Serial.print("Hari Jumat, Memutar suara: 1");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
digitalWrite(6, HIGH);
delay(10000);
digitalWrite(6, LOW);
} else if (fridayAlarmTypes[i] == 2) {
// playAlarmSound("alarm2.wav"); // Mainkan alarm2
Serial.print("Hari Jumat, Memutar suara: 2");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
digitalWrite(6, HIGH);
delay(10000);
digitalWrite(6, LOW);
} else if (fridayAlarmTypes[i] == 3) {
// playAlarmSound("alarm2.wav"); // Mainkan alarm2
Serial.print("Hari Jumat, Memutar suara: 3");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
digitalWrite(6, HIGH);
delay(10000);
digitalWrite(6, LOW);
} else if (fridayAlarmTypes[i] == 4) {
// playAlarmSound("alarm2.wav"); // Mainkan alarm2
Serial.print("Hari Jumat, Memutar suara: 4");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
digitalWrite(6, HIGH);
delay(10000);
digitalWrite(6, LOW);
} else if (fridayAlarmTypes[i] == 5) {
// playAlarmSound("alarm2.wav"); // Mainkan alarm2
Serial.print("Hari Jumat, Memutar suara: 5");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
digitalWrite(6, HIGH);
delay(10000);
digitalWrite(6, LOW);
}
delay(60000); // Cegah alarm berbunyi terus-menerus dalam menit yang sama
}
}
} else {
// Alarm hari biasa (Senin-Kamis, Sabtu)
for (int i = 0; i < totalAlarms; i++) {
if (now.hour() == alarmHours[i] && now.minute() == alarmMinutes[i] && now.second() == 0) {
if (alarmTypes[i] == 1) {
// playAlarmSound("alarm1.wav"); // Mainkan alarm1
Serial.print("Memutar suara: 1");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
digitalWrite(6, HIGH);
delay(10000);
digitalWrite(6, LOW);
} else if (alarmTypes[i] == 2) {
// playAlarmSound("alarm2.wav"); // Mainkan alarm2
Serial.print("Memutar suara: 2");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
digitalWrite(6, HIGH);
delay(10000);
digitalWrite(6, LOW);
} else if (alarmTypes[i] == 3) {
// playAlarmSound("alarm2.wav"); // Mainkan alarm2
Serial.print("Memutar suara: 3");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
digitalWrite(6, HIGH);
delay(10000);
digitalWrite(6, LOW);
} else if (alarmTypes[i] == 4) {
// playAlarmSound("alarm2.wav"); // Mainkan alarm2
Serial.print("Memutar suara: 4");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
digitalWrite(6, HIGH);
delay(10000);
digitalWrite(6, LOW);
} else if (alarmTypes[i] == 5) {
// playAlarmSound("alarm2.wav"); // Mainkan alarm2
Serial.print("Memutar suara: 5");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
digitalWrite(6, HIGH);
delay(10000);
digitalWrite(6, LOW);
}
delay(60000); // Cegah alarm berbunyi terus-menerus dalam menit yang sama
}
}
}
}
// Fungsi untuk memutar suara alarm dari SD Card
void playAlarmSound(const char *filename) {
Serial.print("Memutar suara: ");
Serial.println(filename);
// Buka file suara alarm
audioFile = SD.open(filename);
if (audioFile) {
Serial.println("Memutar suara alarm...");
// Baca file dan kirim ke pin audio
while (audioFile.available()) {
analogWrite(audioPin, audioFile.read());
}
audioFile.close();
} else {
Serial.println("Gagal membuka file alarm!");
}
}