Prayer Reminder Clock Using Arduino UNO and Dot Matrix

This project is an automatic digital prayer time reminder clock built using an Arduino UNO microcontroller and a MAX7219 dot matrix display.

BeginnerFull instructions provided175
Prayer Reminder Clock Using Arduino UNO and Dot Matrix

Things used in this project

Story

Read more

Schematics

Clock Schematics

Code

Prayer Time Reminder

Arduino
#include <MD_Parola.h>
#include <MD_MAX72XX.h>
#include <SPI.h>

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define DATA_PIN 11
#define CS_PIN   10
#define CLK_PIN  13

#define BUZZER_PIN 8

MD_Parola display = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

unsigned long previousMillis = 0;
const long interval = 1000;
int hours = 4;
int minutes = 29;
int seconds = 50;

bool adzanPlayed[5] = {false, false, false, false, false};

const char* namaAdzan[5] = {
  "Subuh", "Dzuhur", "Asar", "Maghrib", "Isya"
};

int jadwalAdzan[5][2] = {
  {4, 30},   // Subuh
  {12, 0},   // Dzuhur
  {15, 15},  // Asar
  {18, 0},   // Maghrib
  {19, 15}   // Isya
};

bool isScrolling = false;
char scrollText[50];

void setup() {
  pinMode(BUZZER_PIN, OUTPUT);
  digitalWrite(BUZZER_PIN, LOW);

  display.begin();
  display.setIntensity(5);
  display.displayClear();
  display.displayText(scrollText, PA_CENTER, 50, 2000, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
}

void loop() {
  if (millis() - previousMillis >= interval) {
    previousMillis = millis();
    updateClock();
  }

  if (isScrolling) {
    if (display.displayAnimate()) {
      isScrolling = false;
    }
  } else {
    char buf[6];
    sprintf(buf, "%02d:%02d", hours, minutes);
    display.setTextAlignment(PA_CENTER);
    display.print(buf);
  }

  for (int i = 0; i < 5; i++) {
    if (hours == jadwalAdzan[i][0] && minutes == jadwalAdzan[i][1] && seconds == 0 && !adzanPlayed[i]) {
  
      bunyikanBuzzer(5);
      adzanPlayed[i] = true;

      sprintf(scrollText, "Adzan %s %02d:%02d", namaAdzan[i], jadwalAdzan[i][0], jadwalAdzan[i][1]);
      display.displayClear();
      display.displayText(scrollText, PA_LEFT, 50, 1000, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
      display.displayReset();
      isScrolling = true;
    }

    if (!(hours == jadwalAdzan[i][0] && minutes == jadwalAdzan[i][1])) {
      adzanPlayed[i] = false;
    }
  }
}

void updateClock() {
  seconds++;
  if (seconds >= 60) {
    seconds = 0;
    minutes++;
    if (minutes >= 60) {
      minutes = 0;
      hours++;
      if (hours >= 24) {
        hours = 0;
      }
    }
  }
}

void bunyikanBuzzer(int durasiDetik) {
  for (int i = 0; i < durasiDetik * 10; i++) {
    digitalWrite(BUZZER_PIN, HIGH);
    delay(50);
    digitalWrite(BUZZER_PIN, LOW);
    delay(50);
  }
}

Credits

Lintang Cahya Wahyuningtyas 29745
1 project • 0 followers
Ahmad Saeful amri 77078
1 project • 0 followers
Aqil
1 project • 0 followers
Hendra Kusumah
49 projects • 163 followers
Love hacking and making new things from IoT to robotics
Muhammad Raka Arifa Ilham
1 project • 0 followers

Comments