WeMOS: D1 R1 mini Prayer Time Indonesia
Jump to navigation
Jump to search
/*
* Calculate Prayer Time
*/
int Y = 2023;
int M = 4;
int D = 4;
int H = 16;
int m = 25;
int s = 0;
int Z = 7;
// # define PI = 3.14159265359;
float LAT = -6.16858549901122;
float LONG = 106.865053367193;
float FAJR_ANGLE = 20;
float ISHA_ANGLE = 18;
float SF = 1; // Imam Safii
float DESCEND_CORRECTION = 2/60;
float FAJR;
float SUNRISE;
float ZUHR;
float ASR;
float MAGHRIB;
float ISHA;
void setup() {
Serial.begin(9600);
delay(500);
calcPrayerTime();
Serial.println( "\n" );
PrintFloatToHour( FAJR );
PrintFloatToHour( SUNRISE );
PrintFloatToHour( ZUHR );
PrintFloatToHour( ASR );
PrintFloatToHour( MAGHRIB );
PrintFloatToHour( ISHA );
}
void loop() {
// put your main code here, to run repeatedly:
}
void PrintFloatToHour( float prayertime ) {
int hh;
int mm;
hh = int( prayertime );
mm = int( ( prayertime - hh )*60 );
if( hh<9 ) Serial.print( String( "0" ) );
Serial.print( String(hh) + ":" );
if( mm<9 ) Serial.print( String( "0" ) );
Serial.println( String(mm) );
}
void calcPrayerTime() {
int A = Y/100 ;
int B = 2 + int(A/4) - A;
float JD = 1720994.5 + int(365.25*Y) + int(30.6001*(M + 1)) + B + D + ((H*3600 + m*60 + s) / 86400) - (Z / 24 );
float T = 2 * PI * (JD - 2451545) / 365.25;
float DELTA = 0.37877 + 23.264 * sin( (57.297*T - 79.547) * PI/180 ) + 0.3812 * sin( (2*57.297*T - 82.682) * PI/180 ) + 0.17132 * sin( (3*57.297*T - 59.722) * PI/180 );
float U = (JD - 2451545) / 36525;
float L0 = 280.46607 + 36000.7698*U;
float ET1000 = -(1789 + 237*U) * sin(L0 * PI/180) - (7146 - 62*U) * cos(L0 * PI/180) + (9934 - 14*U) * sin(2*L0 * PI/180) - (29 + 5*U) * cos(2*L0 * PI/180) + (74 + 10*U) * sin(3*L0 * PI/180) + (320 - 4*U) * cos(3*L0 * PI/180) - 212*sin(4*L0 * PI/180);
float ET = ET1000 / 1000;
float TT = 12 + Z - (LONG / 15) - (ET / 60);
float SA_FAJR = -(FAJR_ANGLE);
float SA_MAGHRIB = -0.8333 - (0.0347 * sqrt(H));
float SA_SUNRISE = SA_MAGHRIB;
// acot(A) = atan(1/A)
// float SA_ASR = acot(SF + tan(abs(DELTA-LAT)*PI/180))*180/PI;
float SA_ASR = atan(1/(SF + tan(abs(DELTA-LAT)*PI/180)))*180/PI;
float SA_ISHA = -(ISHA_ANGLE);
float COSHA_FAJR = (sin(SA_FAJR *PI/180) - sin(LAT*PI/180) * sin(DELTA*PI/180)) / (cos(LAT*PI/180) * cos(DELTA*PI/180));
float COSHA_MAGHRIB = (sin(SA_SUNRISE*PI/180) - sin(LAT*PI/180) * sin(DELTA*PI/180)) / (cos(LAT*PI/180) * cos(DELTA*PI/180));
float COSHA_SUNRISE = COSHA_MAGHRIB;
float COSHA_ASR = (sin(SA_ASR*PI/180) - sin(LAT*PI/180) * sin(DELTA*PI/180)) / (cos(LAT*PI/180) * cos(DELTA*PI/180));
float COSHA_ISHA = (sin(SA_ISHA*PI/180) - sin(LAT*PI/180) * sin(DELTA*PI/180)) / (cos(LAT*PI/180) * cos(DELTA*PI/180));
float HA_FAJR = acos(COSHA_FAJR)*180/PI;
float HA_MAGHRIB = acos(COSHA_SUNRISE)*180/PI;
float HA_SUNRISE = HA_MAGHRIB;
float HA_ASR = acos(COSHA_ASR)*180/PI;
float HA_ISHA = acos(COSHA_ISHA)*180/PI;
FAJR = TT - HA_FAJR / 15;
SUNRISE = TT - HA_SUNRISE / 15;
ZUHR = TT + DESCEND_CORRECTION;
ASR = TT + HA_ASR / 15;
MAGHRIB = TT + HA_MAGHRIB / 15;
ISHA = TT + HA_ISHA / 15;
}