mongol
August 21, 2021, 2:14pm
1
Hello,
I got this time code for ESP32 and I want to make a LED turn on if the time is between 21:00 and 6:00.
The serial prints the correct time, but I don't know how to write the "if" function.
I need something like this but I don't know how to write it:
if ((time > 21:00) && (time < 6:00 ))
{
digitalWrite (LED, HIGH);
}
My code for time is:
void setup() {
configTime(0, 0, "pool.ntp.org", "time.nist.gov");
setenv("TZ", "EET-2EEST,M3.5.0/3,M10.5.0/4", 1);
}
String get_time() {
time_t now;
time(&now);
char time_output[30];
// See http://www.cplusplus.com/reference/ctime/strftime/ for strftime functions
strftime(time_output, 30, "%a %d-%m-%y %T", localtime(&now));
return String(time_output); // returns Sat 20-Apr-19 12:31:45
}
void loop()
{
delay(1000);
Serial.println(get_time());
}
Juraj
August 21, 2021, 2:19pm
2
I have this
time_t t = time(nullptr);
struct tm *tm = localtime(&t);
byte minute = tm->tm_min;
byte hour = tm->tm_hour;
mongol
August 21, 2021, 2:20pm
3
Thank you. And how can I write the "if" function with this?
Juraj
August 21, 2021, 2:23pm
4
simplest is to use minutes of the day
minuteNow = hour * 60 + minute;
if (minuteNow >= (21 * 60 + 30)) ...
Or if you are really only on the hour, use the byte hour value @Juraj picks out of the tm struct.
Then you need an "or" test on the 24 hour value, if the hour is greater than or equal to 21 gets you to midnight OR if the hour is less than 6 gets you to dawn.
or
you could also say if the hour is less than 21 AND greater than or equal to 6.
It is never too soon to discover and look into
De Morgan's Theorem
I leave the googling to you.
a7
system
Closed
December 19, 2021, 2:55pm
6
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.