You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino Timer循环代码无法重启计数、b值持续递增问题问询

Arduino代码问题修复方案

问题根因

  • 变量存储类型错误:你把计数变量a、b定义在了loop()函数内部,属于局部自动变量,每次loop循环执行完毕后变量就会被销毁,下次进入loop时会被重新初始化为0,无法保留上一次循环的计数值。如果你的实际运行效果确实能计数到100,说明你实际代码中的变量可能定义在了全局区域,不过不管哪种情况都需要修正取值保留逻辑。
  • 缺少计数重置逻辑:当a计数到100进入else分支后,你没有将a重置为0,只要a的取值能够跨循环保留,就会永远判定a == 100,始终走else分支,自然无法重新启动计数循环。
  • 显示格式不匹配:你的预期显示文本是Interrupts: b,现有代码缺少前缀和冒号的打印逻辑。

修正后代码

方案1:使用全局变量保留计数

// 全局变量定义在loop函数外,跨循环保留取值
int a = 0;
int b = 0;

void loop() {
    if(a != 100){
        lcd.setCursor(0,0);
        lcd.print("Timer");
        a++;
        lcd.print(a); 
        delay(10);
        lcd.clear();
    }
    else{
        b++;
        lcd.print("Interrupts: ");
        lcd.print(b);
        delay(1000);
        lcd.clear();
        // 重置a为0,下次循环重新开始计数
        a = 0;
    }
}

方案2:使用静态局部变量保留计数

如果不想使用全局变量,也可以用static修饰局部变量实现跨循环取值保留:

void loop() {
    static int a = 0;
    static int b = 0;
    if(a != 100){
        lcd.setCursor(0,0);
        lcd.print("Timer");
        a++;
        lcd.print(a); 
        delay(10);
        lcd.clear();
    }
    else{
        b++;
        lcd.print("Interrupts: ");
        lcd.print(b);
        delay(1000);
        lcd.clear();
        a = 0;
    }
}

内容的提问来源于stack exchange,提问作者anonymousEROS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:54:09