#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 4
#define CS_PIN 5
MD_Parola Display = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
char text[] = "";
int text_pause = 0;
int speed = 50;
// Define variables for prayer schedule
char* prayer_names[] = {"Fajr", "Dhuhr", "Asr", "Maghrib", "Isha"};
int prayer_hours[] = {5, 12, 15, 18, 20};
int prayer_minutes[] = {30, 0, 30, 0, 0};
// Variables for dummy time
unsigned long startMillis;
const unsigned long oneHour = 3600000; // 1 hour in milliseconds
const unsigned long oneMinute = 60000; // 1 minute in milliseconds
void setup() {
Display.begin();
Display.setTextAlignment(PA_CENTER);
Display.setPause(text_pause);
Display.setSpeed(speed);
Display.displayClear();
startMillis = millis(); // Catat waktu mulai
}
void getDummyTime(int &hours, int &minutes) {
unsigned long currentMillis = millis();
unsigned long elapsedMillis = currentMillis - startMillis;
hours = (elapsedMillis / oneHour) % 24;
minutes = (elapsedMillis % oneHour) / oneMinute;
}
void loop() {
// Get current dummy time
int current_hour, current_minute;
getDummyTime(current_hour, current_minute);
// Check if it's time for prayer
for (int i = 0; i < 5; i++) {
if (current_hour == prayer_hours[i] && current_minute == prayer_minutes[i] - 2) {
// Display "Persiapan Adzan" for 10 seconds
Display.displayText("Persiapan Adzan", PA_CENTER, speed, 10, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
delay(10000);
// Display countdown for 1 minute 50 seconds
for (int j = 110; j > 0; j--) {
char countdown_text[10];
sprintf(countdown_text, "%02d:%02d", j / 60, j % 60);
Display.displayText(countdown_text, PA_CENTER, speed, 1, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
delay(1000);
}
// Display prayer time for 10 seconds
Display.displayText(prayer_names[i], PA_CENTER, speed, 10, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
delay(10000);
// Display countdown for 3 minutes
for (int j = 180; j > 0; j--) {
char countdown_text[10];
sprintf(countdown_text, "%02d:%02d", j / 60, j % 60);
Display.displayText(countdown_text, PA_CENTER, speed, 1, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
delay(1000);
}
// Display blinking dot for 5 minutes
for (int j = 0; j < 300; j++) {
Display.displayText(".", PA_CENTER, speed, 1, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
delay(500);
Display.displayClear();
delay(500);
}
}
}
}