- 机器人等级考试
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 ,开始你的循环之旅吧,有问题评论区留言,咱们一起解决!