Sunday, September 18, 2022

Membuat Counter mundur menuju Azan dengan Arduino Wemos

Membuat Counter Mundur Menuju Azan dengan Arduino Wemos


 #include <Wire.h>

#include "RTClib.h"

#include "SPI.h"

#include <DMD2.h>

#include "PrayerTimes.h"

#include <fonts/SystemFont5x7.h>

#include <fonts/Droid_Sans_12.h>

#include <fonts/angka_2.h>



/*

 *  Koneksi Pin RTC3231 ke PIN Arduiono UNO

 *    GND -> GND

 *    VCC -> +5V

 *    SCL -> A5

 *    SDA -> A4

 *    

 *    Wemos SCL -> D1

 *          SDA -> D2

 *    

 *    Pin P10 ke Arduino Wemos


  Pin 1(Enable)      ----> D4

  Pin 2 (A)          ----> D0

  Pin 4 (B)          ----> D6

  Pin8 ( CLK)        ----> D5

  Pin 10 (SCLK)      ----> D3

  Pin 12 (DATA)      ----> D7

 *    

 *    

 *    SPIDMD dmd(2, 1, D4,D0,D6,D3);

*/  



void Running(String s);

String Konversi(int sInput);

int tulisan_menuju_azan(int jam,int menit,String* waktu_sholat);


//Init RTC

RTC_DS3231 rtc;


//Konstanta

boolean issetting=false;


// Set Width to the number of displays wide you have

const int WIDTH = 2;


// You can change to a smaller font (two lines) by commenting this line,

// and uncommenting the line after it:

const uint8_t *FONT = Droid_Sans_12;

const uint8_t *FONT2 = Droid_Sans_12;

//const uint8_t *FONT3 =Droid_Sans_16;

const uint8_t *FONT4 = SystemFont5x7;


//SPIDMD dmd(WIDTH,1);  // aktifkan ini jika menggunakan ESP8266, disable baris atasnya

SPIDMD dmd(2, 1, D4,D0,D6,D3);


    int AKecerahan=1;

  int speaker=D8;  //buat beep  


 int jam_sholat;int menit_sholat;

  


//// marquee values

int marX = 1;   // awal kotak running text minimal diawali 1.

int marY = 1;

int marWidth = 63;  // dimensi running text  32 dikurangi marX. 

int marHeight = 16;

int marCur = marX + marWidth;  // kursor

//marCur = marX + marWidth;

int messageCount;  // karakter yang aktif

//int widthCount;    // sisa lebar satu huruf terakhir

int messageLength;  // jumlah karakter pada pesan

boolean blinking=true;

int i=0;

boolean jalan=true;


 int hours, minutes;     //jam sholat dan  menit sholat

  

  String jam1;

  String jam2;

  String waktu_subuh;int jam_subuh;int menit_subuh;

  String waktu_terbit;

  String waktu_duhur;int jam_duhur;int menit_duhur;

  String waktu_azar;int jam_azar;int menit_azar;

  String waktu_magrib;int jam_magrib;int menit_magrib;

  String waktu_isya;int jam_isya;int menit_isya;

  String waktu_imsyak;

  boolean setting=false;


  String lintange;

  String bujure;

  String Ze="7";


 double times[sizeof(TimeName) / sizeof(char*)];


 String get_imsyak(int jam_subuh,int menit_subuh);

 //uint32_t jumlahHariDariTanggal(byte tanggal, byte bulan, uint16_t tahun);

 //void masehiKeHijriah(uint32_t HariMasehi, byte *tanggal, byte *bulan, uint16_t *tahun);




int jeda_menuju_azan=30;

// the setup routine runs once when you press reset:

void setup() {


 pinMode(speaker, OUTPUT);


 Serial.begin(9600);

 Wire.begin(D1,D2);

 rtc.begin();

 dmd.setBrightness(10);

 dmd.begin();

 dmd.selectFont(SystemFont5x7);

 dmd.clearScreen();  

//inisialisasi awal jika sudah running live harus di remark

rtc.adjust(DateTime(2022, 9, 18, 11, 46, 0));


} //end of setup





void loop()

{

  dmd.setBrightness(100);

  DateTime now = rtc.now();

  

  uint32_t jumlahHari;

  double jumlahHariMatahari;

   


  byte tanggalMasehi = now.day();

  byte bulanMasehi =now.month();

  uint16_t tahunMasehi =now.year();



   int jam= now.hour();

   int menit=now.minute();

   int detik=now.second();



///================pengaturan koordinat-gunakan gps android untuk menentukan posisi anda=================

 //sby

  //  double lintang = -7.4726;  //Latitude

 //   double bujur = 112.6675;   //Longitude


//tangsel

    double lintang = -6.3088649;  //Latitude

    double bujur = 106.682188;   //Longitude

    

    int Z = 7 ;                   //Zona Waktu GMT WIB biasanya 7

    int interval=0;


    long mulai = millis();


    set_calc_method(ISNA);        //Methode perhitungan mengikuti ISNA

    set_asr_method(Shafii);       //Pendapat Imam Syafi'i

    set_high_lats_adjust_method(AngleBased);

    set_fajr_angle(20);           //Sudut Waktu Subuh

    set_isha_angle(18);           ////Sudut Waktu Isya

    get_prayer_times(tahunMasehi,bulanMasehi, tanggalMasehi, lintang, bujur, Z, times);



    //Subuh

    get_float_time_parts(times[0], hours, minutes);

    jam_subuh=hours;menit_subuh=minutes;

   // jam_subuh=jam_sholat;menit_subuh=menit_sholat;

    waktu_subuh=Konversi(jam_subuh)+ ":"+Konversi(menit_subuh);

    

    //Imsyak

    waktu_imsyak=get_imsyak(jam_subuh,menit_subuh);


    //waktu terbit

    get_float_time_parts(times[1], hours, minutes);

    waktu_terbit=Konversi(hours)+ ":"+Konversi(minutes);

    


   //Waktu duhur

   get_float_time_parts(times[2], hours, minutes);

    jam_sholat=hours;menit_sholat=minutes;

    jam_duhur=jam_sholat;menit_duhur=menit_sholat;

    waktu_duhur=Konversi(jam_duhur)+ ":"+Konversi(menit_duhur);  

   

    //waktu ashar

    get_float_time_parts(times[3], hours, minutes);

    jam_sholat=hours;menit_sholat=minutes;

    jam_azar=jam_sholat;menit_azar=menit_sholat;    

    waktu_azar=Konversi(jam_azar)+ ":"+Konversi(menit_azar);  


    //waktu_magrib

    get_float_time_parts(times[4], hours, minutes);

    jam_sholat=hours;menit_sholat=minutes;

    jam_magrib=jam_sholat;menit_magrib=menit_sholat;

    waktu_magrib=Konversi(jam_magrib)+ ":"+Konversi(menit_magrib);


   //waktu Isya

    get_float_time_parts(times[6], hours, minutes);

    jam_sholat=hours;menit_sholat=minutes;

    jam_isya=jam_sholat;menit_isya=menit_sholat;

    waktu_isya=Konversi(jam_isya)+ ":"+Konversi(menit_isya);  





/******* MAIN RUNNING TEXT ****/

///String running_jadwal_sholat=Konversi(tanggalMasehi)+"-"+ Konversi(bulanMasehi) + "-"+ Konversi(tahunMasehi) + " IMSAK "+waktu_imsyak+" SUBUH " + waktu_subuh + " TERBIT "+waktu_terbit + " DHUHUR " + waktu_duhur + " ASHAR " + waktu_azar + " MAGRIB " + waktu_magrib + " ISYA' "+ waktu_isya ;

//jam_besar(30);

//Running(running_jadwal_sholat);



/*--- Menampilan menuju jadwal sholat kurang berapa menit  --*/


String waktu_sholat;

int kurang=tulisan_menuju_azan(jam,menit,&waktu_sholat);

String jam_sho=""; 

if (kurang!=-1)

{

// dmd.clearScreen();

 if(waktu_sholat=="ISYA'") { jam_sho=waktu_isya;}

 else if(waktu_sholat=="SUBUH") { jam_sho=waktu_subuh;}

 else if(waktu_sholat=="DZUHUR") { jam_sho=waktu_duhur;}

 else if(waktu_sholat=="ASHAR") { jam_sho=waktu_azar;}

 else if(waktu_sholat=="MAGRIB") { jam_sho=waktu_magrib;}


String tulisan_kurang="ADZAN " + waktu_sholat + " "+ jam_sho + " -"+ String(kurang) + " Menit " ;

Running(tulisan_kurang);

//digitalWrite(D4,LOW);


if (kurang==0)

  {

   dmd.clearScreen();

   int lama=9;  //3 menit

   for(i=0;i<5*lama;i++)

    {

  //hhuruf adzan berkedip2

      dmd.selectFont(SystemFont5x7);

      dmd.drawString(33,0,"ADZAN");

      dmd.drawString(33,9,waktu_sholat);

      delay(1000);

      dmd.selectFont(SystemFont5x7);

      dmd.drawString(33,0,"            ");

      dmd.drawString(33,9,"            ");

      delay(1000);

   

    }

  }

}

}




void Running(String s)

{

  DateTime now = rtc.now();

  int jam= now.hour();

  int menit=now.minute();

  int detik=now.second();

  String waktu1=Konversi(jam)+":"+Konversi(menit);//+":"+Konversi(detik)+"  ";

  dmd.selectFont(angka_2);  

  dmd.drawString(33,0,waktu1);


  

marX=1;

marY=9;

jalan=true;

while(jalan)

{

messageLength = s.length()+65;

//Geser 1 pixel dulu. 

dmd.movePixels(marX, marY, marX-1, marY, marWidth, marHeight);

marCur = marCur-1; 

if (marCur == marX + marWidth - dmd.charWidth(s[messageCount],FONT)-1) {

  marCur = marX + marWidth;

  messageCount = messageCount+1;

  if (messageCount == messageLength){

    messageCount = 0;

    jalan=false;

  }

}



dmd.selectFont(SystemFont5x7);

dmd.drawChar(marCur, marY , s[messageCount]);  // tulis karakter baru setelah digeser

delay(50);

i++;

if(i*50 >600)

{

  DateTime now = rtc.now();

  int jam= now.hour();

  int menit=now.minute();

  int detik=now.second();

 // String waktu1=Konversi(jam)+":"+Konversi(menit)+"  ";

  String waktu1=Konversi(jam)+":"+Konversi(menit);//+":"+Konversi(detik)+"  ";

  String waktu2=Konversi(jam)+" "+Konversi(menit);//+" "+Konversi(detik)+"  ";


   

if (blinking)

{

dmd.selectFont(angka_2);

dmd.drawString(33,0,waktu1);

//beep(300);

blinking=false;

}

 else

 {

  dmd.selectFont(angka_2);

  dmd.drawString(33,0,waktu2);

  blinking=true;

 }


i=0;

}


}

}


///Konversi angka agar ada nol didepannya jika diawah 10

String Konversi(int sInput) {

  if (sInput < 10)

  {

    return"0" + String(sInput);

  }

  else

  {

    return String(sInput);

  }

}


String get_imsyak(int jam_subuh,int menit_subuh)

{

if (menit_subuh-10 <0)

{

int menit=60+(menit_subuh-10);

int jam=jam_subuh-1;

return Konversi(jam)+":"+Konversi(menit);

}

else

{

  return Konversi(jam_subuh)+":"+Konversi(menit_subuh-10);

}


}



int tulisan_menuju_azan(int jam,int menit,String* waktu_sholat)

{

  int selisih;

  String waktu;

  int selisih_waktu_isya=(jam_isya*60+menit_isya) -(jam*60+menit);

  int selisih_waktu_subuh=(jam_subuh*60+menit_subuh) -(jam*60+menit);

  int selisih_waktu_duhur=(jam_duhur*60+menit_duhur) -(jam*60+menit);

  int selisih_waktu_azar=(jam_azar*60+menit_azar) -(jam*60+menit);

  int selisih_waktu_magrib=(jam_magrib*60+menit_magrib) -(jam*60+menit);

  


 if(selisih_waktu_isya>=0 && selisih_waktu_isya<=jeda_menuju_azan ){  selisih=selisih_waktu_isya; waktu="ISYA'";}

 else if(selisih_waktu_subuh>=0 && selisih_waktu_subuh<=jeda_menuju_azan ){  selisih=selisih_waktu_subuh; waktu="SUBUH";}

 else if(selisih_waktu_duhur>=0 && selisih_waktu_duhur<=jeda_menuju_azan ){  selisih=selisih_waktu_duhur; waktu="DZUHUR";}

 else if(selisih_waktu_azar>=0 && selisih_waktu_azar<=jeda_menuju_azan ){  selisih=selisih_waktu_azar;  waktu="ASHAR";}

 else if(selisih_waktu_magrib>=0 && selisih_waktu_magrib<=jeda_menuju_azan ){  selisih=selisih_waktu_magrib;  waktu="MAGRIB";} 

 else { selisih=-1; waktu="-----";}   

  

  

  int s=selisih;

 *waktu_sholat=waktu;

  return s;

  

}


Membuat Counter mundur menuju Azan dengan Arduino Wemos

Membuat Counter Mundur Menuju Azan dengan Arduino Wemos  #include <Wire.h> #include "RTClib.h" #include "SPI.h" #i...