#include <avr/wdt.h> //watchdog library, library bawaan
#include <avr/sleep.h>
#include <LiquidCrystal_I2C.h> //i2c library
#include <stdio.h>
#include <Wire.h>
#include <TimeLib.h> //time library
#include "PrayerTimes.h" //prayer time library, kamu bisa download di github, nanti akan di sertakan linknya
#include "formula.h"
#include "quotes.h"
double times[sizeof(TimeName) / sizeof(char*)];
int GMT = 7 ; // zona waktu WIB=7, WITA=8, WIT=9, inisialisasi gmt
void p(char *fmt, ... ) {
char tmp[128]; // resulting string limited to 128 chars
va_list args;
va_start (args, fmt );
vsnprintf(tmp, 128, fmt, args);
va_end (args);
Serial.print(tmp);
}
const int alarm = 13; //pin untuk alarm, jika mau di integrasikan dengan alarm waktu shalat
LiquidCrystal_I2C lcd(0x27, 20, 4); //karena simulasi ini menggunakan lcd 20x4
ISR(WDT_vect)
{
wdt_disable(); // disable watchdog
}
void myWatchdogEnable(const byte interval)
{
MCUSR = 0; // reset various flags
WDTCSR |= 0b00011000; // see docs, set WDCE, WDE
WDTCSR = 0b01000000 | interval; // set WDIE, and appropriate delay
wdt_reset();
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
sleep_mode(); // now goes to Sleep and waits for the interrupt
}
void setup() {
Serial.begin(9600);
pinMode(alarm, OUTPUT);
//yang barusan experimen saya, :D
setTime(17, 40, 00, 13, 3, 2024); //inisialisasi waktu
set_calc_method(ISNA); //kalkulasi metode, pilihan nya bisa dilihat di library prayertime
set_asr_method(Shafii); //metode
set_high_lats_adjust_method(AngleBased);
set_fajr_angle(18);
set_isha_angle(18);
}
void loop() {
lcd.clear();
displayHijr();
displayTime();
// displayQuote(); //menampilkan quote, bisa random ayat atau apa saja,
}
void displayQuote() {
lcd.clear();
displayHijr();
long randNumber;
randNumber = random(0, 54); //untuk mengambil quote random, karena quote yang saya buat total nya ada 55, maka dibuat random 0 - 54
lcd.setCursor(0, 2); //mengatur cursor
// lcd.print(quotes[randNumber]);
Serial.println(randNumber);
Serial.println(quotes[randNumber]);
delay(500);
}
void displayHijr() {
int bulan = month();
uint16_t tgl = day();
hijri H = toHijri(tgl, bulan, year());//mengkonversi tgl sekarang(masehi) ke hijriah, hijri adalah struct yang dibuat dilibrary
lcd.setCursor(0, 0);
lcd.print(H.year);
lcd.print("/");
lcd.print(hijriMonth[H.month - 1]);
lcd.print("/");
lcd.print(H.date);
Serial.println("Masehi");
Serial.println(String(tgl) + "/" + String(bulan) + "/" + year());
Serial.println("Hijriah");
Serial.print(H.date);
Serial.print("/");
Serial.print(H.year);
Serial.print("/");
Serial.println(hijriMonth[H.month - 1]);
delay(5000);
}
void scroll() { //fungsi untuk scroll karakter di lcd
for (int i = 0; i < 20; i ++) {
lcd.scrollDisplayLeft();
delay(100);
}
delay(500);
}
void displayTime() {
int ihtiyat = round((analogRead(15) - 511) / 8.5);//ihtiyat yang diambil dari nilai potensio,
if (ihtiyat < 0) {
ihtiyat = 0;
}
int gmt = 7;
float latitude = -7.0642465; //laltitude daerah kamu
float longitude = 108.08357829999999; //longitude daerah kamu, isi dengan akurat karena mempengaruhi jadwal waktu shalat yang ditampilkan
get_prayer_times(year(), month(), day(), latitude, longitude, gmt, times);
int hours, minutes;
get_float_time_parts(times[0], hours, minutes);
// imsak
lcd.setCursor(0, 1); lcd.print("Imsak"); lcd.setCursor(15, 1);
lcd.print(hours); lcd.print(":"); lcd.print(minutes - 5);
// subuh
lcd.setCursor(0, 2); lcd.print("Subuh"); lcd.setCursor(15, 2);
lcd.print(hours); lcd.print(":"); lcd.print(minutes);
get_float_time_parts(times[1], hours, minutes);
// dhuha
lcd.setCursor(0, 3); lcd.print("Dhuha"); lcd.setCursor(15, 3);
lcd.print(hours); lcd.print(":"); lcd.print(minutes);
delay(1000);
scroll();
lcd.clear();
// dzuhur
get_float_time_parts(times[2], hours, minutes);
lcd.setCursor(0, 0); lcd.print("Dzuhur"); lcd.setCursor(15, 0);
lcd.print(hours); lcd.print(":"); lcd.print(minutes);
// ashar
get_float_time_parts(times[3], hours, minutes);
lcd.setCursor(0, 1); lcd.print("Ashar"); lcd.setCursor(15, 1);
lcd.print(hours); lcd.print(":"); lcd.print(minutes);
// magrib
get_float_time_parts(times[5], hours, minutes);
lcd.setCursor(0, 2); lcd.print("Maghrib"); lcd.setCursor(15, 2);
lcd.print(hours); lcd.print(":"); lcd.print(minutes);
// isya
get_float_time_parts(times[6], hours, minutes);
lcd.setCursor(0, 3); lcd.print("Isya"); lcd.setCursor(15, 3);
lcd.print(hours); lcd.print(":"); lcd.print(minutes);
delay(1000);
scroll();
}