深色模式
第 5 章:循环结构
本章能学到什么
for循环的 C++ 写法(和 Python 差别较大)while循环do-while(一句话带过)break和continue
for 循环:三段式
Python 的 for i in range(5) 在 C++ 里长这样:
cpp
for (int i = 0; i < 5; i++) {
Serial.println(i);
}三段含义:
| 部分 | 作用 | 对应 Python |
|---|---|---|
int i = 0 | 循环变量初始化 | range 的起点 0 |
i < 5 | 继续循环的条件 | range 的终点(不含 5) |
i++ | 每轮结束后做的事 | range 的步长 1 |
再举几例对照:
cpp
for (int i = 1; i <= 5; i++) // 1,2,3,4,5 ~ range(1, 6)
for (int i = 0; i < 10; i += 2) // 0,2,4,6,8 ~ range(0, 10, 2)
for (int i = 10; i > 0; i--) // 10,9,...,1 ~ range(10, 0, -1)while 循环:和 Python 几乎一样
cpp
int count = 0;
while (count < 3) {
Serial.println("测量一次距离");
count++; // 千万别忘!否则死循环
}do-while 一句话带过:先执行一次循环体再判断条件(do { ... } while (条件);),用得很少,知道有它就行。
break 和 continue
和 Python 完全一样:
cpp
for (int i = 0; i < 10; i++) {
if (i == 3) continue; // 跳过本轮
if (i == 7) break; // 结束循环
Serial.println(i);
}
// 输出:0 1 2 4 5 6Arduino 特有的"循环":loop()
别忘了:loop() 函数本身就是个无限循环。所以"让 LED 一直闪"有两种写法:
cpp
// 写法 A:靠 loop() 自己循环(推荐)
void loop() {
digitalWrite(25, HIGH);
delay(500);
digitalWrite(25, LOW);
delay(500);
}
// 写法 B:在 loop 里再套 while(true)(不常用)
void loop() {
while (true) {
// ...
}
}常见坑
for的三段之间是分号不是逗号:for (int i = 0; i < 5; i++)while忘更新条件变量 → 死循环,板子看起来"卡死"- 循环变量
i只在{}内有效(作用域),出了花括号就不能用了
想一想
loop() 和 while(true) 功能上都让代码反复执行,为什么 Arduino 还要专门设计一个 loop()?(提示:想想 setup() 的存在价值)
💡 查看答案
为了把程序分成清晰的两半:setup() 只执行一次(初始化),loop() 反复执行(干活)。如果没有这个分工,初始化代码就得自己想办法"只跑一次",程序结构会乱。另外,框架在每次 loop() 之间还能顺便处理一些后台事务(比如串口通信),全都写在 while(true) 里就没这个机会了。
