Arduino中for循环变量设为全局后串口仅输出一次的原因
问题根因
核心原因是全局变量的生命周期特性:全局变量只会在程序上电时初始化一次,运行过程中对它的修改会一直保留,不会随函数反复调用自动重置。
具体执行流程:
- 上电启动时,全局变量
i被赋值为'A'(对应ASCII值65)。 - 第一次进入
loop(),for循环判定i <= 'Z'('Z'对应ASCII值90)成立,逐次打印字母同时i持续自增;等A到Z全部打印完,i已经自增到91,超过'Z'的判定阈值,循环跳出,执行500ms延时。 - 第一次
loop()执行完后,Arduino会自动反复调用loop(),但此时i的值一直停在91,从来没有被重置回'A',后续每次进loop()时for循环的条件从一开始就不成立,根本不会进入循环执行打印,自然只会输出一次A-Z序列。
修复方法
把循环变量i挪到for循环内部或者loop()函数里定义就行,这样每次跑loop()的时候i都会重新初始化为'A',就能每隔500ms重复打印A-Z了,修正后的代码:
void setup() { Serial.begin(9600); } void loop() { for (char i = 'A'; i <= 'Z'; i++) { Serial.print(i); } delay(500); }
内容的提问来源于stack exchange,提问作者Berat Durmus
相关产品推荐
相关产品推荐

