- 机器人等级考试
Arduino 之 for 循环学习笔记教程
- 2025-8-1 15:30:47 @
Arduino 之 for 循环学习笔记教程
一、前言
在 Arduino 编程里,for
循环是让程序实现重复操作的得力工具,就像工厂里不断重复加工零件的机器,能帮我们高效完成有规律的任务,比如让 LED 渐变、按顺序输出数字等。接下来咱们一步步搞懂它!
二、for 循环基本结构
(一)语法格式
for (表达式1; 表达式2; 表达式3) {
循环体; // 要重复执行的代码
}
- 表达式 1:一般用来创建循环变量,还会给它设置初始值 ,而且在整个循环里只执行一次,就像给跑步比赛的选手确定起始位置。比如
for (int i = 1; ...
里,int i = 1
就是创建了一个整型变量i
,并把它初始化为 1 。 - 表达式 2:是循环的条件判断 ,每次执行循环体之前都会检查这个条件。要是条件成立(结果为真 ),就执行循环体;要是不成立(结果为假 ),就跳出循环。好比跑步比赛里的终点线,到了就不跑啦,像
i <= 5
就是判断i
是不是小于等于 5 。 - 表达式 3:在每次循环体执行完后运行 ,通常用来改变循环变量的值,比如让变量增加或者减少,像
i++
就是让i
的值每次加 1 ,把它想象成跑步时每跑一步就前进一段距离。 - 循环体:大括号
{}
里的代码,会跟着循环条件的判断结果重复执行,这就是咱们要让电脑重复做的事儿,比如串口打印数字、控制 LED 亮度变化。
(二)执行流程
- 先执行 表达式 1,完成循环变量的初始化。
- 接着判断 表达式 2:
- 要是条件成立(为真 ),就执行 循环体 里的代码,然后执行 表达式 3 改变循环变量,之后回到步骤 2 再次判断 表达式 2 。
- 要是条件不成立(为假 ),直接跳出
for
循环,接着执行循环后面的代码。
举个简单例子感受下:
void setup() {
Serial.begin(9600);
// 表达式1:创建变量i并初始化为1;表达式2:i <= 5时继续循环;表达式3:i每次加1
for (int i = 1; i <= 5; i++) {
Serial.println(i); // 循环体:串口输出i的值,会输出1、2、3、4、5
}
}
void loop() {
// 这里暂时没内容
}
执行流程:
- 第一步,
int i = 1
初始化变量i
为 1 。 - 第二步,判断
i <= 5
,1 小于 5 ,条件成立,执行Serial.println(i)
,串口输出 1 ;然后执行i++
,i
变成 2 。 - 第三步,又判断
i <= 5
,2 小于 5 ,执行Serial.println(i)
输出 2 ,再i++
变成 3 。 - 就这样一直重复,直到
i
变成 6 ,判断i <= 5
不成立,循环结束。
三、for 循环在 Arduino 里的常用场景
(一)控制 LED 渐变(结合 analogWrite )
想让 LED 从暗慢慢变亮,再从亮慢慢变暗,用 for
循环就很方便,代码如下:
const int ledPin = 3; // 定义LED连接的引脚
void setup() {
pinMode(ledPin, OUTPUT); // 设置引脚为输出模式
}
void loop() {
// 让LED慢慢变亮的循环
// i从0开始,到255结束,每次加1,因为analogWrite的范围是0-255
for (int i = 0; i <= 255; i++) {
analogWrite(ledPin, i); // 控制LED亮度,i越大越亮
delay(20); // 延时20毫秒,让变化能看清
}
// 让LED慢慢变暗的循环
// i从255开始,到0结束,每次减1
for (int i = 255; i >= 0; i--) {
analogWrite(ledPin, i); // 控制LED亮度,i越小越暗
delay(20); // 延时20毫秒
}
}
这里有两个 for
循环:
- 第一个循环,
i
从 0 增加到 255 ,analogWrite
输出的数值越来越大,LED 就慢慢变亮;delay(20)
是为了让我们能看清亮度变化的过程,不然变化太快肉眼看不清。 - 第二个循环,
i
从 255 减少到 0 ,analogWrite
输出的数值越来越小,LED 就慢慢变暗,同样靠delay(20)
控制节奏。然后loop
函数会不断重复这两个循环,LED 就一直渐变啦。
(二)串口输出有规律的数字
1. 递增输出(从 3 到 8 ,空格分隔 )
void setup() {
Serial.begin(9600);
// i从3开始,到8结束,每次加1
for (int i = 3; i <= 8; i++) {
Serial.print(i); // 串口输出i的值,不换行
Serial.print(" "); // 输出空格,让数字之间有间隔
}
}
void loop() {
// 无内容
}
在这个 for
循环里:
表达式1
是int i = 3
,初始化变量i
为 3 。表达式2
是i <= 8
,只要i
小于等于 8 就继续循环。表达式3
是i++
,每次循环后i
加 1 。- 循环体里用
Serial.print
输出i
的值,因为Serial.print
不会自动换行,所以数字会在同一行显示,再用Serial.print(" ")
输出空格分隔开,最后串口会显示3 4 5 6 7 8
。
2. 递减输出(从 10 到 1 )
void setup() {
Serial.begin(9600);
// i从10开始,到1结束,每次减1
for (int i = 10; i >= 1; i--) {
Serial.println(i); // 串口输出i的值,每次换行,会输出10、9、…、1
}
}
void loop() {
// 无内容
}
这里:
表达式1
初始化i
为 10 。表达式2
是i >= 1
,判断i
是不是大于等于 1 。表达式3
是i--
,每次循环后i
减 1 。- 循环体用
Serial.println
输出i
的值,每次输出会自动换行,所以串口会依次显示 10 、9 、8 一直到 1 。
(三)配合传感器数据处理(以光照传感器为例 )
当我们用光照传感器获取数据,并且想多次读取或者做一些有规律的处理时,for
循环也能派上用场,不过下面这个例子是结合之前的知识,持续读取并处理数据,其实也可以在循环里做多次读取(比如为了取平均值减少误差 ),简单示例:
const int guangPin = A0; // 光照传感器引脚
const int ledPin = 3; // LED引脚
int val;
void setup() {
Serial.begin(9600);
pinMode(guangPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
// 这里可以加for循环,比如多次读取传感器数据取平均
int sum = 0;
// 循环5次读取传感器数据
for (int i = 0; i < 5; i++) {
val = analogRead(guangPin); // 读取光照传感器值(0-1023)
sum += val; // 把每次读取的值累加
delay(10); // 稍作延时
}
val = sum / 5; // 计算平均值
val = map(val, 0, 1023, 0, 255); // 映射到0-255
Serial.println(val);
analogWrite(ledPin, val); // 控制LED亮度
delay(100);
}
在这个例子里,for
循环用来多次读取光照传感器的数据,把 5 次的结果累加后求平均值,这样能让获取的数据更稳定,减少偶然因素的影响,然后再把处理后的数据用来控制 LED 亮度,让控制更精准。这就是 for
循环在传感器数据处理里的一个小应用,当然实际项目里还能有更多花样。
四、总结
for
循环的结构是for (表达式1; 表达式2; 表达式3) { 循环体; }
,按照“初始化 - 判断条件 - 执行循环体 - 更新变量”的流程重复执行。- 在 Arduino 里,它能帮我们做很多事,像控制 LED 渐变实现炫酷效果,有规律地输出数字方便调试,还能配合传感器多次读取数据优化结果。
- 关键是要理解三个表达式和循环体的作用,然后根据实际需求去调整,比如改变循环变量的初始值、条件判断规则、变量更新方式,还有循环体里执行的具体操作。多动手写代码试试不同的循环逻辑,就能越来越熟练啦,比如自己改改循环的次数、变量的变化步长,看看程序运行结果有啥不一样,这样学习效果会更好!
0 条评论
目前还没有评论...