我有一个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循环中......
有什么想法吗?
答案 0 :(得分:1)
看起来很狡猾......
传递指针?
确定你的意思不是* x = * x + 2
答案 1 :(得分:0)
嗯,什么循环?没有“if循环”之类的东西。这将只运行一次。而不是使用if循环
答案 2 :(得分:0)
if (timet == currenttime){
timet = convert(timet)
}
这是一个坏主意。 timet以预转换的格式存储与当前时间相当的内容,或者以后转换格式存储它。
由于您将timet与当前时间进行比较,因此它们应该具有相同的类型和格式,并且可以通过'=='运算符进行合法比较。
您可能希望在内部以数字格式存储timet(或者从运行时获取原始时间读数),并在将其传递给输出函数时进行转换,或者转换为字符串格式变量(不称为timet) ,但其他东西!)准备输出。