- 机器人等级考试
Arduino 中 `for` 循环超详细教程
- 2025-8-10 21:01:53 @
Arduino 中 for
循环超详细教程(基于代码示例)
一、写在前面
如果你刚开始接触 Arduino 编程,for
循环可是个超好用的工具!它能帮你重复执行一段代码,让程序更聪明、更高效。今天咱们就结合实际代码,把 for
循环彻底搞明白 ,学会用它来玩转 Arduino !
二、先看代码长啥样
先瞧瞧这段会用到 for
循环的 Arduino 代码:
void setup() {
// 初始化串口通信,设置波特率 9600,这样就能在串口监视器看输出啦
Serial.begin(9600);
// for 循环来啦!下面详细讲每部分啥意思
for (int i = 1; i < 5; i++) {
// 把变量 i 的值打印到串口监视器,每次循环都打印
Serial.println(i);
}
// 打印分隔线,方便区分循环的输出
Serial.println("-----------------------");
}
void loop() {
// 这里暂时空着,循环主要在 setup 里演示
}
上传代码到 Arduino 后,打开串口监视器(Arduino IDE 里点“工具”→“串口监视器”),你会看到输出:
1
2
3
4
-----------------------
是不是很神奇?这就是 for
循环的功劳,接下来一步步拆解它!
三、for
循环的“骨架”解析
for
循环长这样:
for (初始化; 条件判断; 更新操作) {
// 循环体:要重复执行的代码
}
对应咱们代码里的 for (int i = 1; i < 5; i++)
,挨个看:
1. 初始化(int i = 1
)
- 作用:创建一个循环专用的变量(这里叫
i
),并给它一个初始值。 - 咱们例子里:创建了整数变量
i
,让它从1
开始。可以把i
想成“计数器”,记录循环执行到第几次啦。
2. 条件判断(i < 5
)
- 作用:每次执行循环体前,先检查这个条件。条件成立(结果为
true
),就执行循环体;不成立(结果为false
),就跳出循环,不再执行啦。 - 咱们例子里:判断
i
是否小于5
。第一次循环时i=1
,1<5
成立,执行循环体;当i
变成5
时,5<5
不成立,循环就结束咯。
3. 更新操作(i++
)
- 作用:每次循环体执行完,会自动执行这里的操作,通常用来改变计数器
i
的值。 - 咱们例子里:
i++
是“自增”的意思,就是每次循环后,i
的值加1
(比如第一次循环后i
从1
变2
,第二次后变3
,依此类推 )。
4. 循环体(Serial.println(i);
)
- 作用:放在
{}
里的代码,会被重复执行。 - 咱们例子里:每次循环都执行
Serial.println(i);
,把当前i
的值打印到串口监视器,所以能看到1
、2
、3
、4
依次输出。
四、for
循环的执行流程(超关键!)
结合咱们的代码,走一遍流程:
- 第一步:初始化
执行int i = 1
,创建变量i
,赋值为1
。 - 第二步:条件判断
检查i < 5
,1 < 5
成立,进入循环体。 - 第三步:执行循环体
执行Serial.println(i);
,串口打印1
。 - 第四步:更新操作
执行i++
,i
变成2
。 - 回到第二步,重复判断→执行→更新
- 第二次:
i=2
,2 < 5
成立 → 打印2
→i
变3
- 第三次:
i=3
,3 < 5
成立 → 打印3
→i
变4
- 第四次:
i=4
,4 < 5
成立 → 打印4
→i
变5
- 第五次:
i=5
,检查5 < 5
?不成立!跳出循环,执行后面的Serial.println("-----------------------");
。
- 第二次:
这样就清楚为啥串口会依次输出 1
、2
、3
、4
啦,就是按照“初始化→判断→执行→更新”的流程,重复跑了 4 次循环体!
五、灵活改代码,玩转 for
循环
明白原理后,咱们可以改改代码,试试不同效果,彻底掌握它!
1. 改变循环的“起点”(初始化值)
把 int i = 1
改成 int i = 0
,代码变成:
void setup() {
Serial.begin(9600);
for (int i = 0; i < 5; i++) {
Serial.println(i);
}
Serial.println("-----------------------");
}
void loop() {
}
串口输出会变成:
0
1
2
3
4
-----------------------
因为初始化 i
从 0
开始,条件 i < 5
,所以循环会执行 i=0
、1
、2
、3
、4
,共 5 次!
2. 改变循环的“终点”(条件判断)
把 i < 5
改成 i <= 5
,代码:
void setup() {
Serial.begin(9600);
for (int i = 1; i <= 5; i++) {
Serial.println(i);
}
Serial.println("-----------------------");
}
void loop() {
}
串口输出:
1
2
3
4
5
-----------------------
因为条件变成 i
小于等于 5
,所以 i=5
时条件还成立,会多执行一次循环体,打印出 5
!
3. 改变“更新操作”(不只是 i++
)
把 i++
改成 i += 2
(每次加 2 ),代码:
void setup() {
Serial.begin(9600);
for (int i = 1; i < 10; i += 2) {
Serial.println(i);
}
Serial.println("-----------------------");
}
void loop() {
}
串口输出:
1
3
5
7
9
-----------------------
因为每次循环 i
增加 2
,所以会打印 1
、3
、5
、7
、9
,直到 i=11
时(下次更新后),11 < 10
不成立,循环结束。这说明更新操作可以灵活改,不一定是 i++
,只要能改变计数器的值就行!
4. 在循环体里做更多事
循环体里不止能打印,还能控制硬件(比如让 LED 闪烁、控制电机转 )。比如结合 LED ,让 LED 随着循环次数闪烁(假设 LED 接在引脚 13 ):
void setup() {
Serial.begin(9600);
// 设置引脚 13 为输出模式,控制 LED
pinMode(13, OUTPUT);
for (int i = 1; i <= 3; i++) {
// 点亮 LED
digitalWrite(13, HIGH);
Serial.println("LED 亮");
// 延迟 500 毫秒
delay(500);
// 熄灭 LED
digitalWrite(13, LOW);
Serial.println("LED 灭");
delay(500);
}
Serial.println("-----------------------");
}
void loop() {
}
上传代码后,你会看到 LED 闪烁 3 次,同时串口打印:
LED 亮
LED 灭
LED 亮
LED 灭
LED 亮
LED 灭
-----------------------
这就是把硬件控制放进循环体,让代码重复执行“点亮→熄灭”的操作,超有趣!
六、常见问题 & 避坑指南
1. 忘记更新变量,导致“死循环”!
如果把 for (int i = 1; i < 5; i++)
里的 i++
去掉,变成:
for (int i = 1; i < 5; ) {
Serial.println(i);
}
这会发生啥?
变量 i
一直是 1
,条件 i < 5
永远成立,循环体就会一直执行,串口疯狂打印 1
,Arduino 也会“卡死”(因为程序一直在循环里出不来 )。所以一定要记得写更新操作,让条件能变成不成立,跳出循环!
2. 变量作用域:for
里的 i
,外面能用吗?
看代码:
void setup() {
Serial.begin(9600);
for (int i = 1; i < 5; i++) {
Serial.println(i);
}
// 这里想打印 i 的值,能成功吗?
Serial.println(i);
Serial.println("-----------------------");
}
编译会报错!因为 int i = 1
是在 for
循环里定义的,它的“作用域”只在循环体内部。出了循环,变量 i
就不存在啦。如果想在循环外用到类似的计数器,可以在循环外面定义变量:
void setup() {
Serial.begin(9600);
// 把 i 定义在循环外面
int i;
for (i = 1; i < 5; i++) {
Serial.println(i);
}
// 现在能打印啦,输出 5(因为循环结束后 i 变成 5 了 )
Serial.println(i);
Serial.println("-----------------------");
}
这样就能在循环外访问 i
的值啦,不过要注意循环结束后 i
的值是多少哦(例子里循环结束后 i
是 5
,因为最后一次更新后 i
变成 5
,条件 i < 5
不成立 )。
3. 搞混 i++
和 ++i
?
在咱们的例子里,i++
和 ++i
效果差不多(因为是单独的更新操作 )。但严格来说:
i++
:先使用i
的当前值,再自增。++i
:先自增i
,再使用新值。
不过在 for
循环的更新操作里,i++
和 ++i
通常结果一样(因为更新操作是单独执行的,不影响循环体里对 i
的使用 )。但如果在循环体里同时用 i
的值,就有区别啦,比如:
void setup() {
Serial.begin(9600);
int i = 1;
// 先打印 i=1,再自增 i 变成 2
Serial.println(i++);
// 先自增 i 变成 3,再打印 3
Serial.println(++i);
}
串口输出:
1
3
不过在 for
循环的更新部分,用 i++
就够啦,简单又常用~
七、总结一下
for
循环的核心就是“初始化→判断→执行→更新”的流程,能帮你重复执行代码,让程序更简洁高效。记住这几点:
- 三个部分(初始化、条件、更新)要写全,别漏更新操作,不然会“死循环”。
- 循环体里可以放各种代码,控制硬件、打印数据都行。
- 多改改参数(起点、终点、更新方式),试试不同效果,很快就能熟练掌握!
现在你可以自己动手,用 for
循环做更多好玩的事啦——比如让舵机转不同角度、让传感器数据采集重复执行、做个流水灯效果 。快打开 Arduino IDE ,开始你的循环之旅吧,有问题评论区留言,咱们一起解决!