首页 > 解决方案 > Arduino计时器工作异常

问题描述

我正在制作一个 Arduino 时/分/秒计时器,但有一个问题

void loop() {

    lcd.setCursor(0,1);

    delay(1000);
    sec++;

    if (sec == 60){
        sec = 0;
        minute ++;
    }

    if(minute==60){
        minute=0;
        hour++;
    }

    lcd.print(hour);
    lcd.print(" : ");
    lcd.print(minute);
    lcd.print(" : ");
    lcd.print(sec);
    lcd.print("");  
}

错误视频: https ://youtu.be/2cMLli3gHRQ

直到 60 秒它才能正常工作,但 60 秒后它变成 19、29、39 ......我该如何解决?

标签: carduino

解决方案


您必须在显示屏上打印一个额外的空格或前导零。

发生的情况是您拥有59然后 print1替换了5但留下了9

58
59
..
19
29
..

要解决此问题,请将 1_(其中 _ 是空格)或 01(或 _1)写入显示器。


编辑:这是您新发布的代码的快速修复:

if (hour < 10) {
    lcd.print(" ");
}
lcd.print(hour);
lcd.print(" : ");
if (minute < 10) {
    lcd.print(" ");
}
lcd.print(minute);
lcd.print(" : ");
if (sec < 10) {
    lcd.print(" ");
}
lcd.print(sec);
lcd.print(""); 

或者,您可以先使用 格式化缓冲区sprintf(),然后将该缓冲区发送到 LCD。


推荐阅读