首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自blynk应用程序的Timewidget输入

来自blynk应用程序的Timewidget输入
EN

Stack Overflow用户
提问于 2018-08-04 15:37:55
回答 1查看 1.1K关注 0票数 2

我正在开发基于时间的应用程序使用blynk应用程序。如果我的时间在设置的时间限制之间,则必须打开中继,否则必须关闭中继。

我正在粘贴我的部分代码。在下面的代码中,如果我的时间设置在1小时范围内,它将工作。如果时间范围大于2小时,它将不起作用。主要问题是比较时间、小时和分钟。

代码语言:javascript
复制
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);
    }

  }

}

串行输出

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-04 17:25:42

如果比较午夜以来的秒数,就会变得更容易。如果您知道日期,您甚至可以使用unix epoch,它是1970-01-01 00:00以来的秒数。

代码语言:javascript
复制
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

代码语言:javascript
复制
// 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
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51683528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档