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
相关产品推荐
相关产品推荐

