Timewidget Ввод из приложения blynk
Я разрабатываю приложение, основанное на времени, используя приложение blynk. если мое время находится между установленным ограничением времени, реле должно быть включено, иначе реле должно быть выключено.
Я вставляю часть своего кода. Здесь в коде ниже, если мое время установлено в пределах 1 часа, оно будет работать. если время> 2 часа, оно не будет работать. Основная проблема - сравнение часов и минут.
void TimeZone1_Function()
{
if (TimeZone1 == 1)
{
// call with timer every 30 seconds or so
// Get RTC time
sprintf(currentTime, "%02d:%02d:%02d", hour(), minute(), second());
Serial.print("Current Time: ");
Serial.println(currentTime);
// Get Time Input Widget time
sprintf(startTime, "%02d:%02d:%02d", SThour, STmin, STsec);
Serial.print("Start Time: ");
Serial.println(startTime);
sprintf(stopTime, "%02d:%02d:%02d", SPhour, SPmin, SPsec);
Serial.print("Stop Time: ");
Serial.println(stopTime);
if (hour() >= SThour && hour() <= SPhour)
{
if (minute() >= STmin && minute() <= SPmin)
{
Serial.println("RELAY IS ON");
Serial.println("..........................");
digitalWrite(D5, HIGH); // Turn ON built-in LED
led22.on();
}
else
{
Serial.println("RELAY IS OFF"); Serial.println("..........................");
digitalWrite(D5, LOW); // Turn ON built-in LED
led22.off();
}
}
else
{
led22.off(); digitalWrite(D5, LOW);
Blynk.virtualWrite(V51, 0);
}
}
}
Последовательный выход
Time Zone1 is selected
Current Time: 09:02:55
Start Time: 08:40:00
Stop Time: 10:40:00
RELAY IS OFF
…
AUTO mode is selected
Current Time: 09:03:06
Current Time: 09:03:07
Start Time: 09:03:00
Stop Time: 09:59:00
RELAY IS ON
1 ответ
Решение
Становится легче, если сравнивать секунды с полуночи. Если вы знаете дату, вы можете даже использовать эпоху Unix, которая составляет секунды с 1970-01-01 00:00.
int current_seconds = hour()*60*60 + minute()*60 + second();
int start_seconds = SThour*60*60 + STmin*60 + STsec;
int stop_seconds = SPhour*60*60 + SPmin*60 + SPsec;
// Is current time between set time limits?
if(current_seconds >= start_seconds && current_seconds <= stop_seconds)
{
// Your relay code
}
Если время может иногда быть на ночь, вы можете вставить что-то вроде ниже, чтобы изменить время остановки. Пример: с 23:00 до 01:00 - с 23:00 до 25:00
// if requested on-time is overnight, e.g. 23:00 to 01:00
if (stop_seconds < start_seconds)
{
stop_seconds += 24*60*60; // add a day
}