time - 来自 blynk 应用程序的 Timewidget 输入
问题描述
我正在使用 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
解决方案
如果您比较自午夜以来的秒数,它会变得更容易。如果您知道日期,您甚至可以使用unix epoch,即自 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
}
推荐阅读
- delphi - 如何使用 Delphi 将特定的 32 x 32 图标从 EXE 提取到 TIcon
- python - 如何将文本文档中的字符串转换为列表,并将列表分隔为python中的部分
- database-restore - Azure Database for PostgreSQL:从 Azure Backup Vault 还原 LTR 备份时出现“InvalidInputs”错误
- python - 分配DataFrame.dropna的结果时误导SettingWithCopyWarning?
- angular - Angular + Firebase firestore - 对文档的内部订阅在初始订阅时返回两个值
- java - 如何模拟新的 SimpleJdbcCall
- r - 如何通过 Sys.getenv() 和 GitHub Actions 使用秘密获取 R 环境?
- html - CSS:我可以将容器放入长/溢出的图像吗?
- javascript - javascript中的过滤和对象
- webrtc - 什么时候端点包感知,什么时候不感知?