跳到主要内容

Arduino 循环

在Arduino编程中,循环是一种重要的控制结构,它允许我们重复执行一段代码,直到满足特定条件。循环可以帮助我们简化代码,避免重复编写相同的代码块。Arduino支持三种主要的循环结构:for循环、while循环和do-while循环。本文将详细介绍这些循环的用法,并通过实际案例展示它们的应用场景。

1. for循环

for循环是最常用的循环结构之一,它允许我们在已知循环次数的情况下重复执行一段代码。for循环的语法如下:

cpp
for (初始化; 条件; 增量) {
// 循环体
}
  • 初始化:在循环开始前执行一次,通常用于初始化计数器变量。
  • 条件:每次循环开始前检查的条件,如果为true,则继续执行循环体;如果为false,则退出循环。
  • 增量:每次循环结束后执行,通常用于更新计数器变量。

示例:使用for循环点亮LED

假设我们有一个连接到Arduino的LED灯,我们希望它闪烁5次。可以使用for循环来实现:

cpp
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // 设置LED引脚为输出模式
}

void loop() {
for (int i = 0; i < 5; i++) {
digitalWrite(LED_BUILTIN, HIGH); // 点亮LED
delay(500); // 等待500毫秒
digitalWrite(LED_BUILTIN, LOW); // 关闭LED
delay(500); // 等待500毫秒
}
delay(2000); // 等待2秒后重新开始
}

在这个例子中,for循环会执行5次,每次循环都会点亮LED并等待500毫秒,然后关闭LED并再次等待500毫秒。

2. while循环

while循环在条件为true时重复执行一段代码。与for循环不同,while循环不需要初始化或增量表达式,它只依赖于条件表达式。while循环的语法如下:

cpp
while (条件) {
// 循环体
}

示例:使用while循环检测按钮状态

假设我们有一个按钮连接到Arduino,我们希望当按钮按下时,LED灯持续点亮。可以使用while循环来实现:

cpp
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // 设置LED引脚为输出模式
pinMode(2, INPUT); // 设置按钮引脚为输入模式
}

void loop() {
while (digitalRead(2) == HIGH) { // 当按钮按下时
digitalWrite(LED_BUILTIN, HIGH); // 点亮LED
}
digitalWrite(LED_BUILTIN, LOW); // 关闭LED
}

在这个例子中,while循环会持续检查按钮的状态。如果按钮被按下(即引脚2为高电平),LED灯将持续点亮;否则,LED灯将关闭。

3. do-while循环

do-while循环与while循环类似,但它会先执行一次循环体,然后再检查条件。这意味着无论条件是否为true,循环体至少会执行一次。do-while循环的语法如下:

cpp
do {
// 循环体
} while (条件);

示例:使用do-while循环读取传感器数据

假设我们有一个传感器连接到Arduino,我们希望至少读取一次传感器数据,并在数据超过某个阈值时停止读取。可以使用do-while循环来实现:

cpp
int sensorValue = 0;

void setup() {
Serial.begin(9600); // 初始化串口通信
}

void loop() {
do {
sensorValue = analogRead(A0); // 读取传感器数据
Serial.println(sensorValue); // 打印传感器数据到串口监视器
delay(100); // 等待100毫秒
} while (sensorValue < 500); // 当传感器数据小于500时继续读取
}

在这个例子中,do-while循环会先读取一次传感器数据并打印到串口监视器,然后检查传感器数据是否小于500。如果数据小于500,循环将继续执行;否则,循环将退出。

4. 实际应用案例

案例1:交通信号灯控制

假设我们需要模拟一个简单的交通信号灯系统,使用for循环来控制红、黄、绿灯的切换:

cpp
void setup() {
pinMode(8, OUTPUT); // 红灯
pinMode(9, OUTPUT); // 黄灯
pinMode(10, OUTPUT); // 绿灯
}

void loop() {
for (int i = 0; i < 3; i++) {
digitalWrite(8, HIGH); // 红灯亮
delay(5000); // 等待5秒
digitalWrite(8, LOW); // 红灯灭
digitalWrite(10, HIGH); // 绿灯亮
delay(5000); // 等待5秒
digitalWrite(10, LOW); // 绿灯灭
digitalWrite(9, HIGH); // 黄灯亮
delay(2000); // 等待2秒
digitalWrite(9, LOW); // 黄灯灭
}
}

在这个案例中,for循环会重复3次,每次循环都会依次点亮红灯、绿灯和黄灯,并保持一定的时间。

案例2:温度监控系统

假设我们需要监控环境温度,并在温度超过某个阈值时触发警报。可以使用while循环来实现:

cpp
float temperature = 0;

void setup() {
Serial.begin(9600); // 初始化串口通信
}

void loop() {
temperature = readTemperature(); // 读取温度
while (temperature > 30) { // 当温度超过30度时
Serial.println("温度过高!"); // 打印警告信息
delay(1000); // 等待1秒
temperature = readTemperature(); // 重新读取温度
}
}

float readTemperature() {
// 模拟读取温度传感器数据
return analogRead(A0) * 0.488; // 假设模拟值转换为摄氏度
}

在这个案例中,while循环会持续检查温度是否超过30度。如果温度超过30度,系统会持续打印警告信息,直到温度恢复正常。

5. 总结

Arduino中的循环结构是控制程序执行流程的重要工具。通过forwhiledo-while循环,我们可以轻松地重复执行代码块,从而实现各种复杂的控制逻辑。在实际应用中,循环结构可以用于控制LED灯、读取传感器数据、监控环境条件等场景。

提示

小提示:在使用循环时,务必确保循环条件能够最终变为false,否则程序可能会陷入无限循环,导致Arduino无法响应其他任务。

6. 附加资源与练习

  • 练习1:尝试修改for循环示例,使LED灯闪烁10次而不是5次。
  • 练习2:使用while循环实现一个简单的计数器,当按下按钮时,计数器加1,并在串口监视器中显示计数器的值。
  • 练习3:结合do-while循环和if语句,编写一个程序,当传感器数据超过某个阈值时,触发警报并停止读取数据。

通过以上练习,您将更深入地理解Arduino循环结构的应用。祝您编程愉快!