我有一个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,但有些东西其他!)以准备输出。