我有一个Arduino sketch,需要一个时间,当该时间等于当前时间时,它将新时间设置为时间+ 2。

例如:

 char* convert(char* x, String y)
 {
     int hour;
     int minute;

     sscanf(x, "%d:%d", &hour, &minute);

     char buf[6];

     if (y == "6")
     {
         if (hour > 17)
         {
             hour = (hour+6)%24;
             snprintf(buf, 10, "%d:%d", hour, minute );
         }
         else
             if (hour < 18)
             {
                 //hour = hour + 6;
                 minute = (minute + 2);
                 snprintf(buf, 10, "%d:%d", hour, minute);
             }
     }

     if (y == "12")
     {
         if (hour > 11)
         {
             hour = (hour+12)%24;
             snprintf(buf, 10, "%d:%d", hour, minute );
         }
         else
             if (hour < 12)
             {
                   hour = hour + 12;
                   snprintf(buf, 10, "%d:%d", hour, minute);
             }
     }

     if (y == "24")
     {
         hour = (hour+24)%24;
         snprintf(buf, 10, "%d:%d", hour, minute );
     }
     return buf;
}


草图例如在凌晨1:00开始。 timet设置为1:02,在系统时间1:02 timet等于系统时间。

我的循环看起来像这样:

if (timet == currenttime)
{
    timet = convert(timet)
}


每当我检查timet的值时,它应该等于1:04,但是在执行convert之后的第一次运行中,我会获得正确的值,但是,每次之后,我的timet值都是空白。

我尝试更改代码,而不是使用if循环。仅当我通过串行监视器发送t时,才运行convert函数。这可以正常工作并在执行convert函数后输出正确的timet,所以我认为问题出在if循环中...

有任何想法吗?

最佳答案

if (timet == currenttime){
   timet = convert(timet)
}


这是一个坏主意。要么以类似于当前时间的预转换格式存储内容,要么以转换后的格式存储内容。

由于您正在将timet与currenttime进行比较,因此它们应该具有相同的类型和格式,并且可以被'=='运算符合法地进行比较。

可能您想在内部以数字格式存储timet(或从运行时获取原始时间读数的任何内容),并在将其传递给输出函数时进行转换,或转换为字符串格式变量(不称为timet,但有些东西其他!)以准备输出。

10-08 05:23