Jadwal Waktu Shalat (JWS) adalah media informasi di rumah ibadah Masjid/Mushalla/Surau yang menampilkan informasi waktu-waktu Shalat.
Dalam perkembangannya Jam Waktu Shalat berfungsi sebagai :
- Menampilkan Jadwal / Waktu Shalat wajib dan sunat
- Menampilkan informasi tanggal Masehi, Hijriah, Pasaran Jawa, dan penanggalan khusus seperti penanggalan Minang
- Menampilkan Ayat Al-Quran, Doa
- Informasi Tartil, Tarhim, Azan, Iqamah
- Pengingat / alarm waktu masuk Shalat dan selesai Iqamah
- Memutar Suara/Musik Tartil, Tarhim disertai kontrol hidup/mati amplifier
- Perhitungan jadwal berdasarkan posisi matahari, masukan manual, data jadwal online harian.
Diagram alir Jawdal waktu-waktu Shalat :

Skema Jam waktu shalat universal:

Tampilan aplikasi (apk) JWS Semesin Universal:


contoh tampilan jadwal shalat 3 panel :
Koding / sketch JWS semesin:
/*
JWS Semesin 1 - 8 panel
Fitur yang tidak aktif
1. Tampilan tanggal Hijriah
2. Tampilan tanggal Jawa
3. Tampilan tanggal Minang
4. Pesan selama tartil
5. Pesan selama tarhim
6. Pesan selama Iqamah
*/
#define serialDebug false
#define modeDemo false
#define namaMesjid "JWS"
//defenisi pin
#define pinMP3Busy 2
#define pinRelayAmpli 3
#define pinBuzzer 4
#define RTCDetikIRQ A3
#define relayOn LOW
#define I2CEEPROM_ADDRESS 0x57
//setting
#define periodaAlarmWaktuShalatMasuk 100//milidetik
#define periodaAlarmWaktuAkhirIqamah 300//milidetik
#define pixelLebarPanel 32
#define pixelTinggiPanel 16
//variabel Setting
#define kecepatanMinimal 10
#define skalaKecepatan 10
#define tokenSetting 32
#define lamaAksesApk 10L * 60 * 1000
#define jumlahNyalaPadam 5
#define jumlahTextInformasi 10
#define fontNamaMesjid Arial14
#define fontJamDanMenitUtama angka6x14
#define fontSimbolGambar simbolGambar
#include <Wire.h>
#include <EEPROM.h>
#include <DMD_Semesin.h>
#include <RTC_Semesin.h>
#include <DFPlayer_Mini_Mp3.h>
#include <BluetoothApk.h>
#include <fonts/angka6x14.h>
#include <fonts/SystemFont5x7Ramping.h>
#include <fonts/Arial14.h>
#include <fonts/simbolGambar.h>
#include "fungsi.h"
#include "definisi.h"
#include "konstanta.h"
#include "setting.h"
#include "WaktuShalat.h"
const uint8_t *alamatFont[] = {
Arial14,
SystemFont5x7Ramping,
};
SPIDMD dmd(8, 1);//max jumlah panel = 8
RTC_DS3231 rtc;
DateTime now;
//Status
bool RTCValid = true;
byte modeOperasi = modeInformasi;
bool statusAlarm;
bool tampilJamMenitDetik = false;
long millisRunningText;
uint8_t kecepatanRunningText;
uint8_t kecepatanRunningEfek;
uint16_t hitungMundurTartil;
uint16_t hitungMundurTarhim;
uint16_t hitungMundurAzan;//terhitung sejak waktu masuk
uint16_t hitungMundurIqamah;//terhitung sejak selesai azan
bool pesanSetelahAzan;
bool pesanSebelumShalat;
uint16_t hitungMundurPeringatanSimbol;
uint16_t hitungMundurShalat;
bool initHitungMundurTartil;
bool initHitungMundurTarhim;
bool initHitungMundurAzan;
bool initHitungMundurIqamah;
bool initHitungMundurPeringatanSimbol;
bool initHitungMundurShalat;
uint8_t hitungMundurAlarmIqamah;//kali
int8_t indexWaktuIbadah;
int8_t indekInformasi;
//efek
uint16_t lamaTampilText;
bool initTampil;
bool tampilanInformasiSambung;
byte indekTampilan = jumlahInformasi;
EfekMarque efekMarque;
uint16_t lebarText;
uint8_t tinggiText;
byte detikSebelumnya = 60;
byte menitSebelumnya = 60;
byte tanggalSebelumnya = 0;
long millisAlarm;
bool status;
BluetoothApk bluetoothApk(&Serial, "JWS2 SEMESIN.COM");
long millisAksesApk;
bool aksesApk;
uint16_t counterAlamat = 0;
uint16_t counterAlamatSebelumnya = 0;
uint16_t parameterSebelumnya = 0;
byte lebarJamUtama = 32;
byte lebarJadwalShalat = 32;
byte modeTampilanJadwal;
char buffer[72];
uint16_t offsetJadwalEEPROM;
bool runningTextAktif;
JamDanMenitJadwal jadwalBerikutnya;
JamDanMenitAlarm alarmBerikutnya;
int8_t hitungMundurAlarm;
bool initHitungMundurAlarm;
bool statusRelayAmpli;
void setup() {
pinMode(pinBuzzer, OUTPUT);
digitalWrite(pinRelayAmpli, !relayOn);
pinMode(pinRelayAmpli, OUTPUT);
pinMode(pinMP3Busy, INPUT_PULLUP);
Serial.begin(9600);
Serial.println(F("JWS Semesin 1-8 panel"));
Serial.println(F("https://www.project.semesin.com"));
mp3_set_serial (Serial);
mp3_set_volume (15);
#if serialDebug
Serial.println(F("Inisialisasi"));
#endif
rtc.begin();
if (rtc.lostPower())
{
#if serialDebug
Serial.println(F("RTC tidak jalan"));
#endif
write_i2c_register(DS3231_ADDRESS, DS3231_STATUSREG, 0x00);
}
write_i2c_register(DS3231_ADDRESS, DS3231_CONTROL, DS3231_SquareWave1Hz);
if (EEPROM.read(offsetof(Setting, token)) != tokenSetting)
{
pengaturanAwal();
}
updateUkuranTampilan();
dmd.waitInterruptOver = false;
dmd.begin();
dmd.clearScreen();
dmd.setBrightness(25.5 * EEPROM.read(offsetof(Setting, kecerahanStandar)));
kecepatanRunningEfek = skala2kecepatanRunning(EEPROM.read(offsetof(Setting, kecepatanEfek)));
#if serialDebug
Serial.println(F("Sistem mulai"));
#endif
dmd.selectFont(fontNamaMesjid);
dmd.drawString(1, 1, namaMesjid);
delay(3000);
dmd.clearScreen();
statusRelayAmpli = digitalRead(pinMP3Busy);
}
void loop() {
....... file lengkap bisa didownload melalui link dibawah
file JWS universal:
JWS Semesin v2.1
- Perlindungan password opsional
- Informasi tetap
- weeker/alarm pengingat
- JWS_semesin 2.1.zip
catatan:
* untuk RTC DS3231, pin-SQW harus terpasang pada pin-A3 (arduino)
* jika menggunakan pcb jws (versi manapun) ada kemungkinan tidak cocok dan perlu modifikasi
















