// =========================================
// Drawing Content Block====================
// =========================================
void drawAzzan(int DrawAdd)
{
// check RunSelector
if(!dwDo(DrawAdd)) return;
uint8_t ct_limit =40; //harus angka genap
static uint8_t ct;
static uint16_t lsRn;
uint16_t Tmr = millis();
if((Tmr-lsRn) > 500 and ct <= ct_limit)
{
lsRn = Tmr;
if((ct%2) == 0)
{ //Disp.drawRect(1,2,62,13);
fType(0);
dwCtr(0,0,"ADZAN");
fType(1);
if(jumat) {dwCtr(0,8,sholatN(8));}
else {dwCtr(0,8,sholatN(SholatNow));}
Buzzer(1);
}
else
{ Buzzer(0);}
DoSwap = true;
ct++;
}
if ((Tmr-lsRn)>2000 and (ct > ct_limit))
{dwDone(DrawAdd);
ct = 0;
Buzzer(0);}
}
void drawIqomah(int DrawAdd) // Countdown Iqomah (9 menit)
{
// check RunSelector
if(!dwDo(DrawAdd)) return;
static uint16_t lsRn;
uint16_t Tmr = millis();
static int ct;
int mnt, scd,cn_l ;
char locBuff[6];
cn_l = (Iqomah[SholatNow]*60);
//Disp.drawRect(1,2,62,13);
if((Tmr-lsRn) > 1000 and ct <=cn_l)
{
lsRn = Tmr;
mnt = floor((cn_l-ct)/60);
scd = (cn_l-ct)%60;
if(mnt>0) {sprintf(locBuff,"%02d:%02d",mnt,scd);}
else {sprintf(locBuff,"%02d",scd);}
if((ct%2) == 0){
fType(0);
dwCtr(0,-1,"IQOMAH");}
fType(0);
dwCtr(0,8,locBuff);
if (ct> (cn_l-10)) Buzzer(1); // Buzzer on 2 seccon before Iqomah
ct++;
DoSwap = true;
}
if (ct > cn_l)
{
dwDone(DrawAdd);
ct = 0;
Buzzer(0);
}
}
void drawSholat_S(int sNum,int c) // Box Sholah Time
{
char BuffTime[10];
char BuffShol[7];
float stime = sholatT[sNum];
uint8_t shour = floor(stime);
uint8_t sminute = floor((stime-(float)shour)*60);
uint8_t ssecond = floor((stime-(float)shour-(float)sminute/60)*3600);
sprintf(BuffTime,"%02d:%02d",shour,sminute);
// Disp.drawRect(c+1,2,62,13);
fType(1); dwCtr(c,0,sholatN(sNum));
fType(0); dwCtr(c,9,BuffTime);
DoSwap = true;
}
void drawSholat(int DrawAdd)
{
// check RunSelector
// int DrawAdd = 0b0000000000000100;
if(!dwDo(DrawAdd)) return;
static uint8_t x;
static uint8_t s; // 0=in, 1=out
static uint8_t sNum;
static uint16_t lsRn;
uint16_t Tmr = millis();
uint8_t c=0;
uint8_t first_sNum = 0;
int DrawWd=DWidth - c;
if((Tmr-lsRn)>10)
{
if(s==0 and x<(DrawWd/2)){x++;lsRn=Tmr;}
if(s==1 and x>0){x--;lsRn=Tmr;}
}
if((Tmr-lsRn)>2000 and x ==(DrawWd/2)) {s=1;}
if (x == 0 and s==1)
{
if (sNum <7 0="" 1="" 2="" 3="" 7="" and="" buff="" buffh="" buffm="" c="" char="" d="" date="" disp.drawfilledrect="" disp.drawtext="" doswap="true;" drawgreg_ds="" drawsholat_s="" drawsmallts="" dwctr="" dwdone="" else="" first_snum="" ftype="" if="" int="" isp.drawline="" lsrn="" mr-lsrn="" now.day="" now.hour="" now.minute="" now.month="" now.year="" or="" raw="" rawadd="" rawwd="" rm.si="=0" rm.st="=0" rm.su="=0" s="=" snum="" sprintf="" static="" tmr="millis();" uff="" uffh="" uffm="" uint16_t="" void="" x-10="" x="" y-2="" y="">1000) lsRn = Tmr;
DoSwap = true;
}
void drawGreg_TS(uint16_t y) // Draw Time
{
char Buff[20];
//sprintf(Buff,"%02d:%02d:%02d",now.hour(),now.minute(),now.second());
sprintf(Buff,"%02d:%02d",now.hour(),now.minute());
dwCtr(0,y,Buff);
DoSwap = true;
}
void drawGreg_cil(uint16_t y) // Draw Time
{
char Buff[20];
sprintf(Buff,"%02d:%02d:%02d",now.hour(),now.minute(),now.second());
dwCtr(0,y,Buff);
DoSwap = true;
}
void Jam_GD(uint16_t y) // Draw Time Depan
{
char BuffJ[6];
char BuffM[6];
char BuffD[6];
sprintf(BuffJ,"%02d",now.hour());
sprintf(BuffM,"%02d",now.minute());
sprintf(BuffD,"%02d",now.second());
fType(5);
Disp.drawText(0,y,BuffJ);
Disp.drawText(0,y+8,BuffM);
fType(3);
Disp.drawText(19,y,BuffD);
Disp.drawRect(15,y+3,16,y+5,1);
Disp.drawRect(15,y+10,16,y+12,1);
DoSwap = true;
}
void anim_DT(int DrawAdd)
{
// check RunSelector
if(!dwDo(DrawAdd)) return;
static uint8_t y;
static uint8_t s; // 0=in, 1=out
static uint16_t lsRn;
uint16_t Tmr = millis();
if((Tmr-lsRn)>100)
{
if(s==0 and y<17 and="" if="" lsrn="Tmr;y++;}" s="=1" y="">0){lsRn=Tmr;y--;}
}
if((Tmr-lsRn)>10000 and y ==17) {s=1;}
if (y==7)
{
// Disp.drawRect(1,2,62,13);
}
if (y == 0 and s==1) {dwDone(DrawAdd); s=0;}
fType(4);
drawGreg_cil(y-16);
// fType(2);
//drawGreg_DS(16-y);
}
void anim_JG(int DrawAdd)
{
// check RunSelector
if(!dwDo(DrawAdd)) return;
static uint8_t y;
static uint8_t s; // 0=in, 1=out
static uint16_t lsRn;
uint16_t Tmr = millis();
if((Tmr-lsRn)>100)
{
if(s==0 and y<17 and="" if="" lsrn="Tmr;y++;}" s="=1" y="">0){lsRn=Tmr;y--;}
}
if((Tmr-lsRn)>10000 and y ==17) {s=1;}
if (y==7)
{
// Disp.drawRect(1,2,62,13);
}
if (y == 0 and s==1) {dwDone(DrawAdd); s=0;}
//fType(1);
//drawGreg_TS(y-8);
Jam_GD(17-y);
}
void dwMrq(const char* msg, int Speed, int dDT, int DrawAdd)
{
// check RunSelector
static uint16_t x;
if(!dwDo(DrawAdd)) return;
if (reset_x !=0) { x=0;reset_x = 0;}
static uint16_t lsRn;
int fullScroll = Disp.textWidth(msg) + DWidth;
uint16_t Tmr = millis();
if((Tmr-lsRn)> Speed)
{ lsRn=Tmr;
if (x < fullScroll) {++x;}
else { dwDone(DrawAdd);
x = 0;return;}
if(dDT==1)
{
fType(1); //Marquee
Disp.drawText(DWidth - x, 0, msg);
fType(0);
if (x<=6) { drawGreg_TS(16-x);}
else if (x>=(fullScroll-6)) { drawGreg_TS(16-(fullScroll-x));}
else { Disp.drawRect(1,8,30,8);
drawGreg_TS(9);}
}
else if(dDT==2)
{
fType(0);
if (x<=6) { drawGreg_TS(x-6);}
else if (x>=(fullScroll-6)) { drawGreg_TS((fullScroll-x)-6);}
else { Disp.drawRect(1,7,30,7);
drawGreg_TS(-1);}
fType(1); //Marquee
Disp.drawText(DWidth - x, 9 , msg);
}
else
{
fType(1);
Disp.drawLine(1,2,62,2);
Disp.drawLine(1,13,62,13);
Disp.drawText(DWidth - x, 4, msg);
}
DoSwap = true;
}
}
void blinkBlock(int DrawAdd)
{
// check RunSelector
if(!dwDo(DrawAdd)) return;
static uint16_t lsRn;
static uint16_t ct, ct_l;
uint16_t Tmr = millis();
int mnt, scd;//
char locBuff[6];//
if(jumat) {ct_l = Prm.JM * 60;}
else {ct_l = Prm.SO * 60;}
jumat =false;
if((Tmr-lsRn)> 1000)
{ lsRn=Tmr;
//Disp.drawChar(1, 1 , ct);
mnt = floor((ct_l-ct)/60);
scd = (ct_l-ct)%60;
sprintf(locBuff,"%d:%02d",mnt,scd);
fType(2);
Disp.drawText(1,7,locBuff); // tampil tunggu sholat
if((ct%2) == 0)
{
Disp.drawFilledRect(DWidth-3, DHeight-3, DWidth-2, DHeight-2);}
DoSwap = true;
ct++;}
if (ct> ct_l)
{ dwDone(DrawAdd);
azzan = false;
ct = 0;
}
// Disp.drawText(1,7,String(ct_l-ct));
}
// =========================================
// Drawing Tools============================
// =========================================
boolean dwDo(int DrawAdd)
{ if (RunSel== DrawAdd) {return true;}
else return false;}
void dwDone(int DrawAdd)
{ RunFinish = DrawAdd;
RunSel = 0;}
void dwCtr(int x, int y,const char* Msg)
{ int tw = Disp.textWidth(Msg);
int th = Disp.textHeight();
int c = int((DWidth-x-tw)/2);
Disp.drawFilledRect(x+c-1,y,x+tw+c,y+th,0);
Disp.drawText(x+c,y,Msg);}
void Buzzer(uint8_t state)
{
if(state ==1 and Prm.BZ == 1)
{tone(BUZZ, 500, 400);}
else
{noTone(BUZZ);}
}
void fType(int x)
{
if(x==0) Disp.setFont(Font0);
else if(x==1) Disp.setFont(Font1);
else if(x==2) Disp.setFont(Font2);
else if(x==3) Disp.setFont(Font3);
else if(x==4) Disp.setFont(Font4);
else Disp.setFont(Font5);
}
// digunakan untuk menghitung hari pasaran
int jumlahhari(){
DateTime now = RTC.now();
int d= now.day();
int m= now.month();
int y= now.year();
int hb[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
int ht = (y - 1970) * 365 - 1;
int hs = hb[m - 1] + d;
int kab = 0;
int i;
if(y % 4 == 0) {
if(m > 2) {
hs++;
}
}
for(i = 1970; i < y; i++) {
if(i % 4 == 0) {
kab++;
}
}
return (ht + hs + kab);
}
17>17>7>
File Parameter :
void serialEvent()
{
int prm_idx = 0;
char bchar;
bchar =Serial.peek();
if ((bchar == 'C') or (bchar == 'N') or (bchar == 'S'))
{
while ((bchar != '\n')and(prm_idx < 150))
{
if(Serial.available())
{
bchar = (char)Serial.read();
CH_Prm[prm_idx]=bchar;
prm_idx ++;
Buzzer(1);
}
}
CH_Prm[prm_idx-1]='\0';
LoadPrm();
}
else
{
while(Serial.available()) {Serial.read();}
}
}
void LoadPrm()
{
String BT_Param;
uint16_t eeAdd = 0;
uint8_t eePut = 0;
uint8_t eeMax = 0;
uint8_t lenprm = strlen(CH_Prm)-3;
// Put Char Data
if (CH_Prm[0]=='C')
{ if(CH_Prm[1]=='M' and CH_Prm[2]=='N') {eeAdd = 58; eeMax=24;}
else if(CH_Prm[1]=='M' and CH_Prm[2]=='A') {eeAdd = 85; eeMax=44;}
else if(CH_Prm[1]=='N' and CH_Prm[2]=='1') {eeAdd = 130; eeMax=149;}
else if(CH_Prm[1]=='N' and CH_Prm[2]=='2') {eeAdd = 280; eeMax=149;}
else if(CH_Prm[1]=='N' and CH_Prm[2]=='3') {eeAdd = 430; eeMax=149;}
else if(CH_Prm[1]=='S' and CH_Prm[2]=='M') {eeAdd = 580; eeMax=149;}
else if(CH_Prm[1]=='J' and CH_Prm[2]=='M') {eeAdd = 730; eeMax=149;}
int eeCount =0;
while((eeCount<= lenprm) and (eeCount < eeMax))
{
EEPROM.update(eeAdd+eeCount,CH_Prm[3+eeCount]);
eeCount++;
}
EEPROM.update(eeAdd+eeCount,'\0');
}
// Put Numeric Data
else if (CH_Prm[0] =='N')
{
BT_Param = String(CH_Prm);
if(BT_Param.substring(1,3).equals("LA")) {eeAdd = 1 ; eePut=1;}
else if(BT_Param.substring(1,3).equals("LO")) {eeAdd = 5 ; eePut=1;}
else if(BT_Param.substring(1,3).equals("AL")) {eeAdd = 9 ; eePut=1;}
else if(BT_Param.substring(1,3).equals("TZ")) {eeAdd = 13; eePut=1;}
else if(BT_Param.substring(1,3).equals("MT")) {eeAdd = 17; eePut=2;}
else if(BT_Param.substring(1,3).equals("BL")) {eeAdd = 18; eePut=2;}
else if(BT_Param.substring(1,3).equals("IH")) {eeAdd = 19; eePut=2;}
else if(BT_Param.substring(1,3).equals("SO")) {eeAdd = 20; eePut=2;}
else if(BT_Param.substring(1,3).equals("JM")) {eeAdd = 21; eePut=2;}
else if(BT_Param.substring(1,3).equals("I1")) {eeAdd = 22; eePut=2;}
else if(BT_Param.substring(1,3).equals("I4")) {eeAdd = 23; eePut=2;}
else if(BT_Param.substring(1,3).equals("I5")) {eeAdd = 24; eePut=2;}
else if(BT_Param.substring(1,3).equals("I6")) {eeAdd = 25; eePut=2;}
else if(BT_Param.substring(1,3).equals("I7")) {eeAdd = 26; eePut=2;}
else if(BT_Param.substring(1,3).equals("BZ")) {eeAdd = 27; eePut=2;}
else if(BT_Param.substring(1,3).equals("SI")) {eeAdd = 28; eePut=2;}
else if(BT_Param.substring(1,3).equals("ST")) {eeAdd = 29; eePut=2;}
else if(BT_Param.substring(1,3).equals("SU")) {eeAdd = 30; eePut=2;}
else if(BT_Param.substring(1,3).equals("CH")) {eeAdd = 31; eePut=3;} //update
if(eePut == 1)
{
EEPROM.put(eeAdd,BT_Param.substring(3,BT_Param.length()).toFloat());
}
if(eePut == 2)
{
EEPROM.put(eeAdd,(uint8_t)BT_Param.substring(3,BT_Param.length()).toInt());
}
if(eePut == 3) // put uint8_t
{
EEPROM.put(eeAdd,(int8_t)BT_Param.substring(3,BT_Param.length()).toInt());
}
}
else
if (CH_Prm[0]=='S' and CH_Prm[1]=='D' and CH_Prm[2]=='T')
{
BT_Param = String(CH_Prm);
Clock.setClockMode(false);
Clock.setDate(byte(BT_Param.substring(3,5).toInt()));
Clock.setMonth(byte(BT_Param.substring(5,7).toInt()));
Clock.setYear(byte(BT_Param.substring(7,9).toInt()));
Clock.setHour(byte(BT_Param.substring(9,11).toInt()));
Clock.setMinute(byte(BT_Param.substring(11,13).toInt()));
Clock.setSecond(byte(BT_Param.substring(13,15).toInt()));
Clock.setDoW(byte(BT_Param.substring(15,16).toInt()));
}
// Get New/updeted parameter*/
GetPrm();
}
void GetPrm()
{
// Serial.println("Get parameter");
// Get Parameter and check
EEPROM.get(0, Prm);
if(Prm.state != 212) //check value of Prm State .. set Default
{
set_default_prm();
}
if (now.year() < 2018)//check date time .. less than 1 jan 2018 set Default
{
set_default_time();
}
Iqomah[1]=Prm.I1;
Iqomah[4]=Prm.I4;
Iqomah[5]=Prm.I5;
Iqomah[6]=Prm.I6;
Iqomah[7]=Prm.I7;
// user New Parameter
setBrightness(int(Prm.BL));
update_All_data();
// SendPrm();
}
void set_default_prm()
{
// Put Parameter start form addr 500
Prm = (struct_param){212,-6.39524,106.80256,45,7,1,20,2,10,30,15,10,10,7,10,1,1,1,1,0};
EEPROM.put(0,Prm);
EEPROM.put(58, "Mujahid 212\0");
EEPROM.put(85, "Sragen\0");
EEPROM.put(130,"Info 1\0");
EEPROM.put(280,"Info 2\0");
EEPROM.put(430,"Info 3\0");
EEPROM.put(580,"Lurus dan rapatkan Shaf sebelum Sholat ...\0");
EEPROM.put(730,"Harap Tenang dan Matikan HP Anda\0");
}
void set_default_time()
{
Clock.setClockMode(false); // set to 24h
Clock.setYear(byte(18));
Clock.setMonth(byte(1));
Clock.setDate(byte(1));
Clock.setDoW(byte(2));
Clock.setHour(byte(12));
Clock.setMinute(byte(0));
Clock.setSecond(byte(0));
Clock.turnOffAlarm(1);
Clock.turnOffAlarm(2);
}
// for debug
void SendPrm()
{
// char Info1[150];
Serial.print(F("NLA : ")); Serial.print(Prm.L_LA,7);Serial.print("\t");
Serial.print(F("NLO : ")); Serial.print(Prm.L_LO,7);Serial.print("\n");
Serial.print(F("NAL : ")); Serial.print(Prm.L_AL,7);Serial.print("\t");
Serial.print(F("NTZ : ")); Serial.print(Prm.L_TZ,0);Serial.print("\n");
Serial.print(F("NMT : ")); Serial.print(Prm.MT);Serial.print("\t");
Serial.print(F("NIH : ")); Serial.print(Prm.IH);Serial.print("\t");
Serial.print(F("NCH : ")); Serial.print(Prm.CH);Serial.print("\n");
Serial.print(F("NSO : ")); Serial.print(Prm.SO);Serial.print("\t");
Serial.print(F("NJM : ")); Serial.print(Prm.JM);Serial.print("\n");
Serial.print(F("NI1 : ")); Serial.print(Prm.I1);Serial.print("\t");
Serial.print(F("NI4 : ")); Serial.print(Prm.I4);Serial.print("\t");
Serial.print(F("NI5 : ")); Serial.print(Prm.I5);Serial.print("\n");
Serial.print(F("NI6 : ")); Serial.print(Prm.I6);Serial.print("\t");
Serial.print(F("NI7 : ")); Serial.print(Prm.I7);Serial.print("\t");
Serial.print(F("NBZ : ")); Serial.print(Prm.BZ);Serial.print("\n");
Serial.print(F("NSI : ")); Serial.print(Prm.SI);Serial.print("\t");
Serial.print(F("NST : ")); Serial.print(Prm.ST);Serial.print("\t");
Serial.print(F("NSU : ")); Serial.print(Prm.SU);Serial.print("\n");
Serial.print(F("NBL : ")); Serial.print(Prm.BL);Serial.print("\n");
for(int i =0; i <=7;i++){
Serial.print("iqomah"); Serial.print(i); Serial.print("\t"); Serial.println(Iqomah[i]);
}
}
File Penamaan ID :
/*=============================================
* PROGMEM DATA
==============================================*/
// sholatN 9 x 8
const char static sholatN_E[] PROGMEM = { "IMSAK\0\0\0"
"SUBUH\0\0\0"
"TERBT\0\0\0"
"DHUHA\0\0\0"
"DUHUR\0\0\0"
"ASHAR\0\0\0"
"MAGRB\0\0\0"
"ISYA\0\0\0\0"
"JUMAT\0\0\0"
};
//h_month 12 x 11
const char static h_month_E[] PROGMEM = { "MUHARRAM\0\0\0"
"SHAFAR\0\0\0\0\0"
"RAB.AWAL\0\0\0"
"RAB.AKHIR\0\0"
"JUM.AWAL\0\0\0"
"JUM.AKHIR\0\0"
"RAJAB\0\0\0\0\0\0"
"SYA'BAN\0\0\0\0"
"RAMADHAN\0\0\0"
"SYAWAL\0\0\0\0\0"
"DZULQA'DAH\0"
"DZULHIJAH\0\0"};
//m_month 12 x 10
const char static m_month_E[] PROGMEM = { "JAN\0"
"FEB\0"
"MAR\0"
"APR\0"
"MEI\0"
"JUN\0"
"JUL\0"
"AGS\0"
"SEP\0"
"OKT\0"
"NOV\0"
"DES\0"};
//DayName 7 x 7
const char static DayName_E[] PROGMEM = { "AHAD\0\0\0"
"SENIN\0\0"
"SELASA\0"
"RABU\0\0\0"
"KAMIS\0\0"
"JUM'AT\0"
"SABTU\0\0"};
//MT_Name 4 x 10
const char static MT_Name_E[] PROGMEM = { "MASJID\0\0\0\0"
"MUSHOLLA\0\0"
"SURAU\0\0\0\0\0"
"LANGGAR\0\0\0"};
const char static HD_Puasa[] PROGMEM = {
"MARI PUASA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"SUDAHKAH KITA PUASA\0\0\0\0\0\0\0"
"MARI KITA PERBANYAK PUASA\0"
"SELAMAT MENJALANKAN PUASA\0"
};
const char static TY_Puasa[] PROGMEM = {
"SYAWAL\0\0\0\0\0\0\0"
"SYA'BAN\0\0\0\0\0\0"
"SENIN\0\0\0\0\0\0\0\0"
"KAMIS\0\0\0\0\0\0\0\0"
"TENGAH BULAN\0"
"AROFAH\0\0\0\0\0\0\0"
"DZULHIJAH\0\0\0\0"
"TASU'A\0\0\0\0\0\0\0"
"ASYURA\0\0\0\0\0\0\0"
"RAMADHAN\0\0\0\0\0"
};
/*=============================================
// List fungsi Call Name off :
// 1. Header Puasa : Header_Puasa(1-4)
// 2. Sholat Name : sholahN(integer 0-6) 0-Subuh 1-Terbit 2-Dhuha 3-Dzuhur 4-Ashar 5-Magrib 3-Isya
// 3. DayName : DayName(1-7) 1-Minggu .... 7-Sabtu
// 4. Hijriah Month Name : drawGregDate(OutPut String)
// 5. Masehi Month Name : drawHijrDate(OutPut String)
// 6. Masjid Name : drawMasjidName(OutPut String) depend on Masjid Tipe 1-Masjid 2-Musholla 3-Surau 4-Langgar
==============================================*/
char* msgPuasa(int hd, int ty) // get sholat name from EEPROM
{
static char output[50];
char hdBuff[26];
int locLen = (hd-1)*26;
memccpy_P(hdBuff,HD_Puasa+locLen ,0,26);
char tyBuff[13];
locLen = (ty-1)*13;
memccpy_P(tyBuff,TY_Puasa+locLen ,0,13);
if(hd ==1)
{sprintf(output,"%s %s esok hari" ,hdBuff,tyBuff);}
else
{sprintf(output,"%s %s" ,hdBuff,tyBuff);}
return output;
}
char* sholatN(int number) // get sholat name from EEPROM
{
static char locBuff[8];
int locLen = number*8;
memccpy_P(locBuff,sholatN_E+locLen ,0,8);
return locBuff;
}
char * DayName(int number) // get Day Name from EEPROM
{
static char locBuff[7];
int locLen = (number-1)*7;
memccpy_P(locBuff,DayName_E+locLen ,0,7);
return locBuff;
}
char * MonthName(int number) // get Month Name from EEPROM
{
static char locBuff[4];
int locLen = (number-1)*4;
memccpy_P(locBuff,m_month_E+locLen,0,4);
return locBuff;
}
char * drawDayDate()
{
char locBuff[20];
static char out[45];
int locLen = (nowH.hM-1)*11;
memccpy_P(locBuff,h_month_E+locLen,0,11);
sprintf(out,"%s %s,%02d-%02d-%04d %02d %s %dH\0",DayName(daynow),pasar[jumlahhari()%5],now.day(),now.month(),now.year(),nowH.hD,locBuff,nowH.hY);
return out;
}
char * drawMasjidName()
{
char bufMN[75];
static char out[85];
char locBuff[10];
int locLen = (Prm.MT-1)*10;
memccpy_P(locBuff,MT_Name_E+locLen ,0,10);
EEPROM.get(55,bufMN);
sprintf(out,"%s %s\0",locBuff,bufMN);
return out;
}
char * drawInfo(int addr)
{
static char out[150];
EEPROM.get(addr,out);
return out;
}
File Tampilan Puasa :