Rabu, 29 April 2020

Program Menentukan Waktu Shalat Berdasarkan lokasi lintang dan bujur.

#include "PrayerTimes.h"
 
  /*
   * Program Menentukan Waktu Shalat
   * Berdasarkan lokasi lintang dan bujur.
   *
   * Explored by https://ifanbutsio.blogspot.com/
   *
   */
 
  double waktu[sizeof(TimeName)/sizeof(char*)];
 
  static const char* NamaWaktu[] ={
      "Imsak",
      "Subuh",
      "Syuruq",
      "Dzuhur",
      "Ashar",
      "Terbenam",
      "Maghrib",
      "Isya'",
      "Count"
    };
 
  const byte JUMLAH_WAKTU_DEFAULT = sizeof(waktu)/sizeof(double);
  const byte JUMLAH_WAKTU = sizeof(NamaWaktu)/sizeof(char*);
  const byte DATA_WAKTU = 2; // jam dan menit
  byte WaktuPenting[JUMLAH_WAKTU][DATA_WAKTU];
 
  // pengaturan jam dan tanggal
  int _tahun = 2020;
  int _bulan = 04;
  int _hari = 30; // tanggal
 
  // pengaturan bujur lintang (Malang)
  float _lat = -7.9786395;    // lintang
  float _lng = 112.5617424;   // bujur
 
  // timezone
  int _timezone = 7; // zona waktu WIB=7, WITA=8, WIT=9
 
  // sudut subuh dan maghrib Indonesia
  int _sudut_subuh = 20;
  int _sudut_isyak = 18;
 
 
  void setup() {
   
      Serial.begin(19200);
 
      set_calc_method(ISNA);  // metode perhitungan
      set_asr_method(Shafii); // madzhab?
      set_high_lats_adjust_method(AngleBased);
      set_fajr_angle(_sudut_subuh);     // sudut waktu subuh
      set_isha_angle(_sudut_isyak);     // sudut waktu isyak
     
  }
 
  void loop() {
     
      WaktuShalat(WaktuPenting);
      CetakWaktuShalat();
     
      delay(60000L);
     
  }
 
 
  void CetakWaktuShalat(){
     
      Serial.println("  ===========================");
      Serial.print("   Imsakiyah Tgl. ");
      Serial.print(_hari);
      Serial.print("/");
      Serial.print(_bulan);
      Serial.print("/");
      Serial.print(_tahun);
      Serial.println();
      Serial.println("  ===========================");
     
      for(byte i=0; i<JUMLAH_WAKTU-1; i++){
         
          if( i == 5 ) continue;
          Serial.print("\t");
          Serial.print( NamaWaktu[i] );
          Serial.print("\t");
          Serial.print( DuaDigit(WaktuPenting[i][0]) );
          Serial.print(":");
          Serial.println( DuaDigit(WaktuPenting[i][1]) );
         
      }
     
      Serial.println();
  }
 
  void WaktuShalat(byte WaktuShalat[JUMLAH_WAKTU][DATA_WAKTU]){
      get_prayer_times(_tahun, _bulan, _hari, _lat, _lng, _timezone, waktu);
      byte waktu_custom = 0;
      for(byte i=0; i<JUMLAH_WAKTU_DEFAULT-1; i++){
          int jam, menit;
          get_float_time_parts(waktu[i], jam, menit);
          if( i == 0 ){
              WaktuPenting[waktu_custom][0] = jam;
              WaktuPenting[waktu_custom][1] = menit-10;
              waktu_custom++;
              WaktuPenting[waktu_custom][0] = jam;
              WaktuPenting[waktu_custom][1] = menit;
          } else {
              WaktuPenting[waktu_custom][0] = jam;
              WaktuPenting[waktu_custom][1] = menit;
          }
          waktu_custom++;
      }
  }
 
  String DuaDigit(byte angka){
      if( angka > 9 ){
          return String(angka);
      } else {
          String tmp = "0";
          tmp.concat(angka);
          return tmp;
      }
  }

Tidak ada komentar:

Posting Komentar

Penjadwalan dan durasi aktif relay dengan setting melalui tombol berbasis arduino

Untuk mengatur jadwalnya, pada contoh ini menggunakan 3 tombol yaitu set, up dan down. adapun komponen yang digunakan adalah : Arduino un...