Arduino计时器计数重置为65,但应重置为70



我试图显示一个计时器,它的计数最多为70秒,但一旦达到65秒,它就会重新启动(循环(。这是在我添加了basetime=millis();currtime = millis()-basetime;之后发生的。(当我删除这两个时,它是有效的,但我添加了它,因为我希望millis()在达到70秒时重置为零(。有人能帮我吗?如果需要我的完整代码,请告诉我。谢谢

void loop() {
basetime = millis();
seconds = 0;
seconds2 = 0;
minutes = 0;

for (seconds == 0; seconds <= 70; seconds++) {
time();
}
}
void time() {
currtime = millis() - basetime;
tft.textSetCursor(100, 100);
tft.textColor(RA8875_WHITE, RA8875_RED);
sprintf(timeline, "%02d hours %02d mins %02d secs", hours, minutes, seconds2);
tft.print(timeline);
delay(1000);
tft.textSetCursor(200, 300);
tft.textColor(RA8875_WHITE, RA8875_RED);
tft.print("Deg C = ");
tft.print(ktc.readCelsius());
delay(1000);
seconds = currtime / 1000;
minutes = (currtime / 1000) / 60;
seconds2 = seconds - (minutes * 60);
minutes = minutes - (hours * 60);
hours = ((millis() / 1000) / 60) / 60;
}

检查以下内容:

基本时间和当前时间应该在设置例程之前很久定义
Arduino风格的

unsigned long currtime, basetime;

或初始化c型

uint32_t currtime = 0;
uint32_t basetime = 0;

并消除代码中的延迟-这将在此时停止处理
闪烁无延迟的更多信息(内置示例Arduino IDE->文件->示例->02,数字->闪烁无延迟(

65秒的问题是一个int(可能被编译器设置为uint16_t,它可以保持2^16-1(65.535(的最大值(的翻转,然后翻转(bethoven(

最新更新