kita semua tahu bahwa RTC DS1302 merupakan RTC dengan harga termurah. namun ternyata tidak banyak yang menggunakan. Disini akan saya berikan contoh sketch arduino untuk membuat jadwal sholat menggunakan panel running text satu buah. nanti hasilnya akan seperti video ini.
VIDEO
library yang kita butuhkan(untuk didownload)
1. library DMD
2. library RTC DS1302
3. library PrayerTimes
pin arduino yang dipakai :
RTC --> A5,A4,A3 (CE,IO,SCLK) CE= reset , IO=data
tombol SETTING --> 2
tombol UP --> 3
tombol DOWN --> 4
alarm --> 5
pin tombol bisa langsung ke arah ground, tidak perlu pakai pull up,
Skettchnya: (
download disini, sudah termasuk library). link diupdate 2 agustus 2018
DS1302 bisa beli disini
https://tokopedia.link/mTYCxNdh1L
jam sholat yang sudah jadi bisa beli disini :
https://store.yufid.com/jual/jam-pengingat-waktu-sholat/
//perubahan: rutin adzan dan iqomah menjadi satu fungsi saja dengan input integer dari waktu sholat
// fix tahun kabisat untuk 100 dan 400 tahun
// tambahan seting jam kedip kedip
#include < EEPROM . h >
#include < EepromUtil . h >
#include < DMD . h >
#include < TimerOne . h >
#include "DS1302.h" // library RTC
//#include <Time.h>
#include "PrayerTimes.h"
double times [ sizeof ( TimeName ) / sizeof ( char * ) ] ;
DS1302 rtc ( A5 , A4 , A3 ) ; // (CE,IO,SCLK) pin terhubung ke RTC CE=reset IO=data
Time t ; // library RTC
#include < SystemFont5x7 . h >
#include < angka6x13 . h >
#include < font4x7 . h >
#include < SPI . h >
char separator [ ] = { ':' , ' ' } ;
const char * waktusholat [ ] = { "SUBUH" , "DZUHUR" , "'ASHAR" , "MAGHRIB" , "ISYA'" } ;
const char * szona [ ] = { "" , "" , "" , "" , "" , "" , "" , "WIB " , "WITA" , "WIT " , } ;
char * hari [ ] = { "SENIN" , "SELASA" , "RABU" , "KAMIS" , "JUM'AT" , "SABTU" , "AHAD" } ;
int maxday [ ] = { 0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 } ;
double lintang ;
double bujur ;
int zonawaktu ;
int jedaiqomah ;
unsigned long previousMillis = 0 ;
unsigned long currentMillis ;
const int interval = 1000 ;
#define SETTING 2
#define UP 3
#define DOWN 4
#define ALARM 5
int mode = 0 ;
byte tjam ;
byte tmenit ;
byte tdetik ;
byte ttanggal ;
byte tbulan ;
int ttahun ;
int tdow ;
int pos ;
int subuhH ;
int subuhM ;
int terbitH ;
int terbitM ;
int dzuhurH ;
int dzuhurM ;
int asarH ;
int asarM ;
int magribH ;
int magribM ;
int isyaH ;
int isyaM ;
int imsakH ;
int imsakM ;
char textbuffer [ 10 ] ;
DMD dmd ( 1 , 1 ) ; //untuk mengatur jumlah panel yang kamu pakai
void ScanDMD ( )
{
dmd . scanDisplayBySPI ( ) ;
}
//////////////////////SEEEEEEETTTTTTTUUUUUUUUP//////////////////////////////////////////////////////////////
void setup ( ) {
// put your setup code here, to run once:
pinMode ( SETTING , INPUT_PULLUP ) ;
pinMode ( UP , INPUT_PULLUP ) ;
pinMode ( DOWN , INPUT_PULLUP ) ;
pinMode ( ALARM , OUTPUT ) ;
digitalWrite ( ALARM , LOW ) ; // alarm of dulu kan
delay ( 100 ) ;
digitalWrite ( ALARM , HIGH ) ; // alarm of dulu kan
delay ( 1000 ) ;
digitalWrite ( ALARM , LOW ) ; // alarm of dulu kan
rtc . halt ( false ) ;
rtc . writeProtect ( false ) ;
// Setup Serial connection
Serial . begin ( 9600 ) ;
//setting JAM
// rtc.setDate(28, 9, 2017);
// rtc.setTime(11, 35, 30);
// rtc.setDOW(4);
//READ EEPROM DATA
zonawaktu = EEPROM . read ( 1 ) ;
jedaiqomah = EEPROM . read ( 2 ) ;
//EepromUtil::eeprom_write_string(5,"-7.78");
//EepromUtil::eeprom_write_string(15,"110.36");
EepromUtil : : eeprom_read_string ( 5 , textbuffer , 10 ) ;
lintang = atof ( textbuffer ) ;
EepromUtil : : eeprom_read_string ( 15 , textbuffer , 10 ) ;
bujur = atof ( textbuffer ) ;
Serial . print ( "lintang = " ) ;
Serial . println ( lintang ) ;
Serial . print ( "bujur = " ) ;
Serial . println ( bujur ) ;
// fire UP DMD
Timer1 . initialize ( 3000 ) ;
Timer1 . attachInterrupt ( ScanDMD ) ;
dmd . clearScreen ( true ) ;
dmd . setBrightness ( 255 ) ;
//attachInterrupt(digitalPinToInterrupt(SETTING), interruptpress, FALLING);
}
////// LOOOOOOOOP ///////////////////////////////////////////////////////////////////////
void loop ( ) {
// put your main code here, to run repeatedly:
int t1 = digitalRead ( SETTING ) ; //tombol setting
int t2 = digitalRead ( UP ) ; // tombol Up
int t3 = digitalRead ( DOWN ) ; // tombol down
if ( t1 == LOW ) {
mode = mode + 1 ;
Serial . print ( "mode = " ) ;
Serial . println ( mode ) ;
dmd . clearScreen ( true ) ;
delay ( 250 ) ;
if ( mode > 9 ) {
mode = 0 ;
dmd . clearScreen ( true ) ;
}
}
getjadwal ( ) ;
if ( mode == 1 ) {
//setting jam
// dmd.clearScreen(true);
dmd . selectFont ( font4x7 ) ;
dmd . drawString ( 8 , 0 , "JAM" , 3 , GRAPHICS_NORMAL ) ;
int jam = tjam ;
int menit = tmenit ;
if ( t2 == LOW ) {
jam = jam + 1 ;
delay ( 100 ) ;
if ( jam > 23 ) {
jam = 0 ;
}
}
if ( t3 == LOW ) {
jam = jam - 1 ;
delay ( 100 ) ;
if ( jam < 0 ) {
jam = 23 ;
}
}
String xjam = Konversi ( jam ) ;
int pjg = xjam . length ( ) + 1 ;
char sjam [ pjg ] ;
xjam . toCharArray ( sjam , pjg ) ;
String xmenit = Konversi ( menit ) ;
char smenit [ pjg ] ;
xmenit . toCharArray ( smenit , pjg ) ;
dmd . selectFont ( SystemFont5x7 ) ;
//dmd.drawString(0, 8, sjam, pjg, GRAPHICS_NORMAL);
//dmd.drawChar(12, 8, separator[currentMillis / 1000 % 2], GRAPHICS_NORMAL);
dmd . drawChar ( 12 , 8 , ':' , GRAPHICS_NORMAL ) ;
dmd . drawString ( 18 , 8 , smenit , pjg , GRAPHICS_NORMAL ) ;
if ( separator [ currentMillis / 250 % 2 ] == ' ' ) {
dmd . drawString ( 0 , 8 , sjam , pjg , GRAPHICS_NORMAL ) ;
}
else dmd . drawString ( 0 , 8 , " " , pjg , GRAPHICS_NORMAL ) ;
rtc . setTime ( jam , tmenit , tdetik ) ;
}
if ( mode == 2 ) {
//setting menit
// dmd.clearScreen(true);
dmd . selectFont ( font4x7 ) ;
dmd . drawString ( 5 , 0 , "MENIT" , 5 , GRAPHICS_NORMAL ) ;
int jam = tjam ;
int menit = tmenit ;
if ( t2 == LOW ) {
menit = menit + 1 ;
delay ( 100 ) ;
if ( menit > 59 ) {
menit = 0 ;
}
}
if ( t3 == LOW ) {
menit = menit - 1 ;
delay ( 100 ) ;
if ( menit < 0 ) {
menit = 59 ;
}
}
String xjam = Konversi ( jam ) ;
int pjg = xjam . length ( ) + 1 ;
char sjam [ pjg ] ;
xjam . toCharArray ( sjam , pjg ) ;
String xmenit = Konversi ( menit ) ;
//int pjg = xmenit.length() + 1;
char smenit [ pjg ] ;
xmenit . toCharArray ( smenit , pjg ) ;
dmd . selectFont ( SystemFont5x7 ) ;
dmd . drawString ( 0 , 8 , sjam , pjg , GRAPHICS_NORMAL ) ;
//dmd.drawChar(12, 8, separator[currentMillis / 1000 % 2], GRAPHICS_NORMAL);
dmd . drawChar ( 12 , 8 , ':' , GRAPHICS_NORMAL ) ;
//dmd.drawString(18, 8, smenit, pjg, GRAPHICS_NORMAL);
if ( separator [ currentMillis / 250 % 2 ] == ' ' ) {
dmd . drawString ( 18 , 8 , smenit , pjg , GRAPHICS_NORMAL ) ;
}
else dmd . drawString ( 18 , 8 , " " , pjg , GRAPHICS_NORMAL ) ;
rtc . setTime ( tjam , menit , tdetik ) ;
}
if ( mode == 3 ) {
//setting tahun
// dmd.clearScreen(true);
dmd . selectFont ( font4x7 ) ;
dmd . drawString ( 3 , 0 , "TAHUN" , 5 , GRAPHICS_NORMAL ) ;
int tahun = ttahun ;
int bulan = tbulan ;
if ( bulan > 12 ) {
bulan = 12 ;
}
int tanggal = ttanggal ;
if ( tanggal > 31 ) {
tanggal = 31 ;
}
if ( t2 == LOW ) {
tahun = tahun + 1 ;
delay ( 100 ) ;
if ( tahun > 2200 ) {
tahun = 2200 ;
}
}
if ( t3 == LOW ) {
tahun = tahun - 1 ;
delay ( 100 ) ;
if ( tahun < 2017 ) {
tahun = 2017 ;
}
}
String xtahun = Konversi ( tahun ) ;
int pjg = xtahun . length ( ) + 1 ;
char stahun [ pjg ] ;
xtahun . toCharArray ( stahun , pjg ) ;
dmd . selectFont ( SystemFont5x7 ) ;
if ( separator [ currentMillis / 250 % 2 ] == ' ' ) {
dmd . drawString ( 0 , 8 , stahun , pjg , GRAPHICS_NORMAL ) ;
}
else dmd . drawString ( 0 , 8 , " " , pjg , GRAPHICS_NORMAL ) ;
rtc . setDate ( tanggal , bulan , tahun ) ;
}
if ( mode == 4 ) {
//setting bulan
// dmd.clearScreen(true);
dmd . selectFont ( font4x7 ) ;
dmd . drawString ( 3 , 0 , "BULAN" , 5 , GRAPHICS_NORMAL ) ;
int bulan = tbulan ;
int tanggal = ttanggal ;
if ( t2 == LOW ) {
bulan = bulan + 1 ;
delay ( 100 ) ;
if ( bulan > 12 ) {
bulan = 1 ;
}
}
if ( t3 == LOW ) {
bulan = bulan - 1 ;
delay ( 100 ) ;
if ( bulan < 1 ) {
bulan = 12 ;
}
}
String xbulan = Konversi ( bulan ) ;
int pjg = xbulan . length ( ) + 1 ;
char sbulan [ pjg ] ;
xbulan . toCharArray ( sbulan , pjg ) ;
String xtanggal = Konversi ( tanggal ) ;
char stanggal [ pjg ] ;
xtanggal . toCharArray ( stanggal , pjg ) ;
dmd . selectFont ( SystemFont5x7 ) ;
dmd . drawString ( 18 , 8 , stanggal , pjg , GRAPHICS_NORMAL ) ;
dmd . drawChar ( 12 , 8 , '/' , GRAPHICS_NORMAL ) ;
if ( separator [ currentMillis / 250 % 2 ] == ' ' ) {
dmd . drawString ( 0 , 8 , sbulan , pjg , GRAPHICS_NORMAL ) ;
}
else dmd . drawString ( 0 , 8 , " " , pjg , GRAPHICS_NORMAL ) ;
rtc . setDate ( ttanggal , bulan , ttahun ) ;
}
if ( mode == 5 ) {
//setting tanggal
// dmd.clearScreen(true);
dmd . selectFont ( font4x7 ) ;
dmd . drawString ( 8 , 0 , "TGL" , 3 , GRAPHICS_NORMAL ) ;
int bulan = tbulan ;
int tanggal = ttanggal ;
if ( t2 == LOW ) {
tanggal = tanggal + 1 ;
delay ( 100 ) ;
if ( ( ( ( ttahun % 4 == 0 ) && ( ttahun % 100 ! = 0 ) ) || ( ttahun % 400 == 0 ) ) && ( tbulan == 2 ) ) {
if ( tanggal > maxday [ tbulan ] + 1 ) {
tanggal = 1 ;
}
}
else if ( tanggal > maxday [ tbulan ] ) {
tanggal = 1 ;
}
}
if ( t3 == LOW ) {
tanggal = tanggal - 1 ;
delay ( 100 ) ;
if ( tanggal < 1 ) {
if ( ( ( ( ttahun % 4 == 0 ) && ( ttahun % 100 ! = 0 ) ) || ( ttahun % 400 == 0 ) ) && ( tbulan == 2 ) ) {
tanggal = maxday [ tbulan ] + 1 ;
}
else tanggal = maxday [ tbulan ] ;
}
}
String xtanggal = Konversi ( tanggal ) ;
int pjg = xtanggal . length ( ) + 1 ;
char stanggal [ pjg ] ;
xtanggal . toCharArray ( stanggal , pjg ) ;
String xbulan = Konversi ( bulan ) ;
char sbulan [ pjg ] ;
xbulan . toCharArray ( sbulan , pjg ) ;
dmd . selectFont ( SystemFont5x7 ) ;
//dmd.drawString(0, 8, stanggal, pjg, GRAPHICS_NORMAL);
dmd . drawString ( 0 , 8 , sbulan , pjg , GRAPHICS_NORMAL ) ;
dmd . drawChar ( 12 , 8 , '/' , GRAPHICS_NORMAL ) ;
if ( separator [ currentMillis / 250 % 2 ] == ' ' ) {
dmd . drawString ( 18 , 8 , stanggal , pjg , GRAPHICS_NORMAL ) ;
}
else dmd . drawString ( 18 , 8 , " " , pjg , GRAPHICS_NORMAL ) ;
rtc . setDate ( tanggal , tbulan , ttahun ) ;
Serial . println ( jumlahhari ( ) ) ;
Serial . println ( ( ( jumlahhari ( ) - 4 ) % 7 ) + 1 ) ;
rtc . setDOW ( ( ( jumlahhari ( ) - 4 ) % 7 ) + 1 ) ;
}
if ( mode == 6 ) {
//setting jeda iqomah
// dmd.clearScreen(true);
dmd . selectFont ( font4x7 ) ;
dmd . drawString ( 7 , 0 , "JEDA" , 5 , GRAPHICS_NORMAL ) ;
int jeda = EEPROM . read ( 2 ) ;
if ( t2 == LOW ) {
jeda = jeda + 1 ;
delay ( 100 ) ;
if ( jeda > 30 ) {
jeda = 30 ;
}
}
if ( t3 == LOW ) {
jeda = jeda - 1 ;
delay ( 100 ) ;
if ( jeda < 5 ) {
jeda = 5 ;
}
}
String xjeda = Konversi ( jeda ) ;
int pjg = xjeda . length ( ) + 1 ;
char sjeda [ pjg ] ;
xjeda . toCharArray ( sjeda , pjg ) ;
dmd . selectFont ( SystemFont5x7 ) ;
if ( separator [ currentMillis / 250 % 2 ] == ' ' ) {
dmd . drawString ( 0 , 8 , sjeda , pjg , GRAPHICS_NORMAL ) ;
}
else dmd . drawString ( 0 , 8 , " " , pjg , GRAPHICS_NORMAL ) ;
dmd . drawString ( 14 , 8 , "mnt" , pjg , GRAPHICS_NORMAL ) ;
jedaiqomah = jeda ;
EEPROM . write ( 2 , jeda ) ;
}
if ( mode == 7 ) {
//setting zona waktu
// dmd.clearScreen(true);
dmd . selectFont ( SystemFont5x7 ) ;
dmd . drawString ( 1 , 0 , "ZONA:" , 5 , GRAPHICS_NORMAL ) ;
//dmd.selectFont(font4x7);
int zona = EEPROM . read ( 1 ) ;
if ( t2 == LOW ) {
zona = zona + 1 ;
delay ( 100 ) ;
if ( zona > 9 ) {
zona = 7 ;
}
}
if ( t3 == LOW ) {
zona = zona - 1 ;
delay ( 100 ) ;
if ( zona < 7 ) {
zona = 9 ;
}
}
if ( separator [ currentMillis / 500 % 2 ] == ' ' ) {
dmd . drawString ( 1 , 8 , szona [ zona ] , 4 , GRAPHICS_NORMAL ) ;
}
else dmd . drawString ( 1 , 8 , " " , 4 , GRAPHICS_NORMAL ) ;
zonawaktu = zona ;
EEPROM . write ( 1 , zona ) ;
}
if ( mode == 8 ) {
//setting LINTANG
// dmd.clearScreen(true);
dmd . selectFont ( font4x7 ) ;
dmd . drawString ( 0 , 0 , "LINTANG" , 7 , GRAPHICS_NORMAL ) ;
if ( t2 == LOW ) {
lintang = lintang + 0.01 ;
delay ( 5 ) ;
if ( lintang > 15 ) {
lintang = 15 ;
}
if ( lintang == 0 ) { //pergantian minus biar tidak nyisa
dmd . clearScreen ( true ) ;
}
}
if ( t3 == LOW ) {
lintang = lintang - 0.01 ;
delay ( 5 ) ;
if ( lintang < - 15 ) {
lintang = - 15 ;
}
}
String xlintang = String ( lintang ) ;
int pjg = xlintang . length ( ) + 1 ;
char slintang [ pjg ] ;
xlintang . toCharArray ( slintang , pjg ) ;
dmd . selectFont ( font4x7 ) ;
if ( separator [ currentMillis / 500 % 2 ] == ' ' ) {
dmd . drawString ( 0 , 8 , slintang , pjg , GRAPHICS_NORMAL ) ;
}
else dmd . drawString ( 0 , 8 , " " , pjg , GRAPHICS_NORMAL ) ;
EepromUtil : : eeprom_write_string ( 5 , slintang ) ;
}
if ( mode == 9 ) {
//setting BUJUR
// dmd.clearScreen(true);
dmd . selectFont ( font4x7 ) ;
dmd . drawString ( 1 , 0 , "BUJUR" , 5 , GRAPHICS_NORMAL ) ;
if ( t2 == LOW ) {
bujur = bujur + 0.01 ;
delay ( 10 ) ;
if ( bujur > 145 ) {
bujur = 145 ;
}
}
if ( t3 == LOW ) {
bujur = bujur - 0.01 ;
delay ( 10 ) ;
if ( bujur < 90 ) {
bujur = 90 ;
}
}
String xbujur = String ( bujur ) ;
int pjg = xbujur . length ( ) + 1 ;
char sbujur [ pjg ] ;
xbujur . toCharArray ( sbujur , pjg ) ;
dmd . selectFont ( font4x7 ) ;
if ( separator [ currentMillis / 500 % 2 ] == ' ' ) {
dmd . drawString ( 0 , 8 , sbujur , pjg , GRAPHICS_NORMAL ) ;
}
else dmd . drawString ( 0 , 8 , " " , pjg , GRAPHICS_NORMAL ) ;
EepromUtil : : eeprom_write_string ( 15 , sbujur ) ;
}
if ( mode == 0 ) {
if ( currentMillis - previousMillis < 15000 ) {
normalMode ( ) ;
}
else if ( tjam == subuhH && tmenit == subuhM ) {
adzan ( 0 ) ;
}
else if ( tdow == 5 && tjam == dzuhurH && tmenit == dzuhurM ) {
jumat ( ) ;
}
else if ( tjam == dzuhurH && tmenit == dzuhurM ) {
adzan ( 1 ) ;
}
else if ( tjam == asarH && tmenit == asarM ) {
adzan ( 2 ) ;
}
else if ( tjam == magribH && tmenit == magribM ) {
adzan ( 3 ) ;
}
else if ( tjam == isyaH && tmenit == isyaM ) {
adzan ( 4 ) ;
}
else {
runningtext ( ) ;
}
}
}
///// END LOOOOOP///////////////////////////////////////////////////////////////////
unsigned long jumlahhari ( ) {
unsigned long d = ttanggal ;
unsigned long m = tbulan ;
unsigned long y = ttahun ;
unsigned long hb [ ] = { 0 , 31 , 59 , 90 , 120 , 151 , 181 , 212 , 243 , 273 , 304 , 334 , 365 } ;
unsigned long ht = ( y - 1970 ) * 365 - 1 ;
unsigned long hs = hb [ m - 1 ] + d ;
unsigned long kab = 0 ;
unsigned long i ;
if ( y % 4 == 0 ) {
if ( m > 2 ) {
hs ++ ;
}
}
for ( i = 1970 ; i < y ; i ++ ) {
if ( ( ( i % 4 == 0 ) && ( i % 100 ! = 0 ) ) || ( i % 400 == 0 ) ) {
kab ++ ;
}
}
return ( ht + hs + kab ) ;
}
/////////////////////untuk nambahi 0 di depan jika angka <10 //////////////////
String Konversi ( int sInput ) {
if ( sInput < 10 )
{
return "0" + String ( sInput ) ;
}
else
{
return String ( sInput ) ;
}
}
void normalMode ( ) {
dmd . selectFont ( angka6x13 ) ;
// Tampilan jam
String xjam = Konversi ( tjam ) ;
int pjg = xjam . length ( ) + 1 ;
char sjam [ pjg ] ;
xjam . toCharArray ( sjam , pjg ) ;
dmd . drawString ( 0 , 0 , sjam , pjg , GRAPHICS_NORMAL ) ;
//tampilan detikan
dmd . selectFont ( SystemFont5x7 ) ;
dmd . drawChar ( 14 , 5 , separator [ currentMillis / 500 % 2 ] , GRAPHICS_NORMAL ) ;
// tampilan menit
dmd . selectFont ( angka6x13 ) ;
String xmenit = Konversi ( tmenit ) ;
int pjgmenit = xmenit . length ( ) + 1 ;
char smenit [ pjgmenit ] ;
xmenit . toCharArray ( smenit , pjgmenit ) ;
dmd . drawString ( 19 , 0 , smenit , pjgmenit , GRAPHICS_NORMAL ) ;
if ( ( ( ttahun % 100 == 0 ) && ( ttahun % 400 ! = 0 ) ) && ( tbulan == 2 ) && ( ttanggal == 29 ) ) { //penyesuaian tahun kabisat
rtc . setDate ( 1 , 3 , ttahun ) ;
}
}
void runningtext ( ) {
//dmd.clearScreen(true);
dmd . selectFont ( SystemFont5x7 ) ;
// Tampilan jam
String xjam = Konversi ( tjam ) ;
int pjg = xjam . length ( ) + 1 ;
char sjam [ pjg ] ;
xjam . toCharArray ( sjam , pjg ) ;
dmd . drawString ( 1 , 0 , sjam , pjg , GRAPHICS_NORMAL ) ;
//tampilan detikan
dmd . drawChar ( 14 , 0 , separator [ currentMillis / 500 % 2 ] , GRAPHICS_NORMAL ) ;
// tampilan menit
String xmenit = Konversi ( tmenit ) ;
int pjgmenit = xmenit . length ( ) + 1 ;
char smenit [ pjgmenit ] ;
xmenit . toCharArray ( smenit , pjgmenit ) ;
dmd . drawString ( 20 , 0 , smenit , pjgmenit , GRAPHICS_NORMAL ) ;
dmd . selectFont ( font4x7 ) ;
String teks ;
teks = String ( hari [ tdow - 1 ] ) +
" " + Konversi ( ttanggal ) + "-" + Konversi ( tbulan ) + "-" + String ( ttahun ) +
" SUBUH " + Konversi ( subuhH ) + ":" + Konversi ( subuhM ) +
" TERBIT " + Konversi ( terbitH ) + ":" + Konversi ( terbitM ) +
" DZUHUR " + Konversi ( dzuhurH ) + ":" + Konversi ( dzuhurM ) +
" 'ASHAR " + Konversi ( asarH ) + ":" + Konversi ( asarM ) +
" MAGHRIB " + Konversi ( magribH ) + ":" + Konversi ( magribM ) +
" ISYA' " + Konversi ( isyaH ) + ":" + Konversi ( isyaM ) +
" IMSAK " + Konversi ( imsakH ) + ":" + Konversi ( imsakM ) ;
int pjgteks = teks . length ( ) + 1 ;
char cteks [ pjgteks ] ;
pos = pos - 1 ;
delay ( 15 ) ;
teks . toCharArray ( cteks , pjgteks ) ;
dmd . drawString ( 15 + pos , 8 , cteks , pjgteks , GRAPHICS_NORMAL ) ;
if ( currentMillis - previousMillis > 49000 ) {
currentMillis = millis ( ) ;
previousMillis = currentMillis ;
dmd . clearScreen ( true ) ;
pos = 0 ;
}
}
void getjadwal ( ) {
currentMillis = millis ( ) ;
t = rtc . getTime ( ) ;
ttanggal = t . date ;
tbulan = t . mon ;
ttahun = t . year ;
tjam = t . hour ;
tmenit = t . min ;
tdetik = t . sec ;
tdow = t . dow ;
set_calc_method ( ISNA ) ;
set_asr_method ( Shafii ) ;
set_high_lats_adjust_method ( AngleBased ) ;
set_fajr_angle ( 20 ) ;
set_isha_angle ( 18 ) ;
get_prayer_times ( ttahun , tbulan , ttanggal , lintang , bujur , zonawaktu , times ) ; // jadwal sholat di masukkan ke variabel times
get_float_time_parts ( times [ 0 ] + 0.05 , subuhH , subuhM ) ;
get_float_time_parts ( times [ 1 ] , terbitH , terbitM ) ;
get_float_time_parts ( times [ 2 ] + 0.05 , dzuhurH , dzuhurM ) ;
get_float_time_parts ( times [ 3 ] + 0.05 , asarH , asarM ) ;
get_float_time_parts ( times [ 4 ] + 0.05 , magribH , magribM ) ;
get_float_time_parts ( times [ 6 ] + 0.05 , isyaH , isyaM ) ;
get_float_time_parts ( times [ 0 ] - 0.117 , imsakH , imsakM ) ;
}
void persiapan ( int number , String teks ) {
}
void adzan ( int number ) {
dmd . clearScreen ( true ) ;
dmd . selectFont ( SystemFont5x7 ) ;
dmd . drawString ( 2 , 0 , "ADZAN " , 5 , 0 ) ; //koordinat tampilan
dmd . selectFont ( font4x7 ) ;
dmd . drawString ( 0 , 8 , waktusholat [ number ] , strlen ( waktusholat [ number ] ) , 0 ) ; //koordinat tampilan
digitalWrite ( ALARM , HIGH ) ; //alarm sholat
delay ( 1000 ) ;
digitalWrite ( ALARM , LOW ) ; //alarm sholat
delay ( 1000 ) ;
digitalWrite ( ALARM , HIGH ) ; //alarm sholat
delay ( 1000 ) ;
digitalWrite ( ALARM , LOW ) ; //alarm sholat
delay ( 1000 ) ;
digitalWrite ( ALARM , HIGH ) ; //alarm sholat
delay ( 1000 ) ;
digitalWrite ( ALARM , LOW ) ; //alarm sholat
delay ( 1000 ) ;
digitalWrite ( ALARM , HIGH ) ; //alarm sholat
delay ( 1000 ) ;
digitalWrite ( ALARM , LOW ) ; //alarm sholat
delay ( 1000 ) ;
delay ( 150000 ) ; //waktu adzan 150000 = 2,5 menit
// IQOMAH
dmd . clearScreen ( true ) ;
dmd . drawString ( 2 , 0 , "IQOMAH" , 6 , 0 ) ;
int tampil ;
int detik = 60 , menit = jedaiqomah - 1 ; // waktu jeda iqomah 9 menit 60 detik
for ( detik = 60 ; detik > = 0 ; detik -- ) {
delay ( 1000 ) ;
String iqomah = Konversi ( menit ) + ":" + Konversi ( detik ) ;
int panjang_iqomah = iqomah . length ( ) + 1 ;
char waktu_iqomah [ panjang_iqomah ] ;
iqomah . toCharArray ( waktu_iqomah , panjang_iqomah ) ;
dmd . selectFont ( SystemFont5x7 ) ;
dmd . drawString ( 1 , 9 , waktu_iqomah , panjang_iqomah , 0 ) ;
if ( detik < = 0 ) {
detik = 60 ;
menit = menit - 1 ;
}
if ( menit < = 0 && detik < = 1 ) {
digitalWrite ( ALARM , HIGH ) ; //alarm sholat
delay ( 1000 ) ;
digitalWrite ( ALARM , LOW ) ; //alarm sholat
delay ( 1000 ) ;
digitalWrite ( ALARM , HIGH ) ; //alarm sholat
delay ( 500 ) ;
digitalWrite ( ALARM , LOW ) ; //alarm sholat
delay ( 1000 ) ;
for ( tampil = 0 ; tampil < 600 ; tampil ++ ) { // waktu sholat 600 = 5 menit
menit = 0 ;
detik = 0 ;
dmd . clearScreen ( true ) ;
dmd . selectFont ( font4x7 ) ;
dmd . drawString ( 1 , 0 , "SHOLAT" , 6 , 0 ) ; //koordinat tampilan
///////////////////////
//now = rtc.now();
t = rtc . getTime ( ) ;
String xjam = Konversi ( t . hour ) + String ( separator [ millis ( ) / 500 % 2 ] ) + Konversi ( t . min ) ; //tampilan jam
int pjg = xjam . length ( ) + 1 ;
char sjam [ pjg ] ;
xjam . toCharArray ( sjam , pjg ) ;
dmd . selectFont ( SystemFont5x7 ) ;
dmd . drawString ( 2 , 9 , sjam , pjg , 0 ) ;
/////////////////////
delay ( 500 ) ;
}
}
}
}
void jumat ( ) {
digitalWrite ( ALARM , HIGH ) ; //alarm sholat
delay ( 1000 ) ;
digitalWrite ( ALARM , LOW ) ; //alarm sholat
delay ( 1000 ) ;
digitalWrite ( ALARM , HIGH ) ; //alarm sholat
delay ( 1000 ) ;
digitalWrite ( ALARM , LOW ) ; //alarm sholat
delay ( 1000 ) ;
int tampil ;
for ( tampil = 0 ; tampil < 30100 ; tampil ++ ) { // waktu sholat jumat 1550 = 25 menit
dmd . clearScreen ( true ) ;
dmd . selectFont ( font4x7 ) ;
dmd . drawString ( 1 , 0 , "JUM'AT" , 6 , 0 ) ; //koordinat tampilan
///////////////////////
//now = rtc.now();
t = rtc . getTime ( ) ;
String xjam = Konversi ( t . hour ) + String ( separator [ millis ( ) / 500 % 2 ] ) + Konversi ( t . min ) ; //tampilan jam
int pjg = xjam . length ( ) + 1 ;
char sjam [ pjg ] ;
xjam . toCharArray ( sjam , pjg ) ;
dmd . selectFont ( SystemFont5x7 ) ;
dmd . drawString ( 2 , 9 , sjam , pjg , 0 ) ;
/////////////////////
delay ( 500 ) ;
}
}