Arduino变量在第一次传递后变为空白

时间:2010-12-27 05:34:10

标签: c arduino

我有一个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点开始。 timet设置为1:02,系统时间1:02 timet等于系统时间。

我的循环看起来像这样:

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

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

我尝试更改代码而不是使用if循环。我通过串行监视器发送例如t时只运行转换功能。这很好,并在执行转换函数后输出正确的时间,所以我认为问题出在if循环中......

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

看起来很狡猾......

传递指针?

确定你的意思不是* x = * x + 2

答案 1 :(得分:0)

  

而不是使用if循环

嗯,什么循环?没有“if循环”之类的东西。这将只运行一次。

答案 2 :(得分:0)

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

这是一个坏主意。 timet以预转换的格式存储与当前时间相当的内容,或者以后转换格式存储它。

由于您将timet与当前时间进行比较,因此它们应该具有相同的类型和格式,并且可以通过'=='运算符进行合法比较。

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