void loop() 这个函数名并不是 C 语言标准库的一部分,也不是 C 语言语法的关键字,它是一个特定于 Arduino 平台的函数。

(图片来源网络,侵删)
void loop() 是 Arduino 程序的心脏,当一个 Arduino 程序上传并运行后,setup() 函数只执行一次,然后程序会不断地、重复地执行 loop() 函数,直到断电或复位。
void loop() 的详细解释
void 的含义
void是一个返回类型关键字,它表示这个函数不返回任何值,你不能在loop()函数内部写return some_value;这样的代码。
loop 的含义
loop是函数的名称,它被命名为 "loop"(循环)就是为了明确地告诉程序员,这个函数的核心作用是“循环执行”。
的含义
- 这表示
loop是一个函数,括号内可以包含参数,但loop()函数不接受任何参数,所以括号是空的。
loop() 函数的工作原理
一个标准的 Arduino 程序结构如下:
// 1. 包含 Arduino 核心库
#include <Arduino.h>
// 2. setup() 函数:只运行一次
void setup() {
// 初始化代码放在这里
// 设置引脚模式、串口通信等
pinMode(LED_BUILTIN, OUTPUT); // 将板载LED引脚设置为输出模式
Serial.begin(9600); // 初始化串口通信,波特率为9600
}
// 3. loop() 函数:无限循环运行
void loop() {
// 主要功能代码放在这里
// 这段代码会一遍又一遍地执行
digitalWrite(LED_BUILTIN, HIGH); // 点亮LED
delay(1000); // 等待1秒
digitalWrite(LED_BUILTIN, LOW); // 熄灭LED
delay(1000); // 等待1秒
}
执行流程:
- Arduino 上电或复位后,首先执行
setup()函数,在这个例子中,它会设置 LED 为输出模式,并启动串口。 setup()执行完毕后,程序立即进入loop()函数。loop()执行完其内部的所有代码(点亮LED -> 等待1秒 -> 熄灭LED -> 等待1秒)后,并不会退出程序。- 程序会自动跳回
loop()函数的开头,开始下一次循环。 - 这个过程会无限重复,直到你断开 Arduino 的电源或按下复位按钮。
loop() 函数的用途和重要性
loop() 是实现所有动态、交互式 Arduino 项目的核心,几乎所有需要持续执行的任务都在这里完成。

(图片来源网络,侵删)
常见用途:
- 读取传感器数据:不断读取温度、湿度、光照等传感器的值。
- 控制执行器:让电机转动、控制继电器开关、驱动舵机等。
- 处理用户输入:检测按键是否被按下、读取串口接收到的数据。
- 状态机:管理设备的不同工作状态(一个自动售货机有“待机”、“选择商品”、“出货”等状态)。
- 游戏逻辑:在简单的游戏中更新玩家位置、检测碰撞等。
loop() 与其他编程语言/平台的对比
理解 loop() 的最好方法就是把它和你熟悉的编程概念进行对比。
| 概念 | Arduino loop() |
标准 C/C++ while(1) 循环 |
操作系统任务/线程 |
|---|---|---|---|
| 本质 | 一个由 Arduino 框架(基于 Wiring)定义的特殊函数。 | 一个通用的、无限循环的编程结构。 | 操作系统调度的执行单元。 |
| 执行方式 | setup() 执行完毕后,自动进入并无限循环。 |
程序员手动在 main 函数中编写。 |
由操作系统内核创建、调度和运行。 |
| 阻塞与非阻塞 | 默认是阻塞的。loop() 内部有一个 delay(1000),整个程序都会暂停1秒。 |
默认是阻塞的,如果循环内有耗时操作,程序会卡住。 | 可以是非阻塞的,操作系统通过时间片轮转,让多个线程“运行,一个线程阻塞(如等待网络数据)时,CPU 可以执行其他线程。 |
| 典型应用 | 嵌入式微控制器、快速原型开发。 | 单片机编程、后台服务、游戏主循环。 | 桌面应用程序、服务器、复杂系统。 |
loop() 就像你写在一个 while(1) 循环里的 main 函数,但它是 Arduino 为你“自动”写好的,让你只需要专注于 setup() 和 loop() 的内容即可。
一个实际的例子:闪烁的LED
让我们通过一个最经典的 "Blink" 示例来加深理解。

(图片来源网络,侵删)
目标:让 Arduino 板上的 LED 每秒钟闪烁一次。
// 定义一个常量,让代码更易读
// LED_BUILTIN 是 Arduino 宏,代表板载LED的引脚号
#define LED_BUILTIN 13
void setup() {
// 在 setup 中,我们只做一次性的初始化工作
// 将 LED_BUILTIN 引脚设置为输出模式
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
// --- 循环开始 ---
// 1. 点亮LED
// digitalWrite() 函数向指定引脚写入 HIGH (5V) 电压
digitalWrite(LED_BUILTIN, HIGH);
// 2. 等待1000毫秒(即1秒)
// delay() 函数会暂停程序的执行,是阻塞函数
delay(1000);
// 3. 熄灭LED
// digitalWrite() 函数向指定引脚写入 LOW (0V) 电压
digitalWrite(LED_BUILTIN, LOW);
// 4. 再次等待1秒
delay(1000);
// --- 循环结束,程序会自动跳回 loop() 的开头 ---
}
执行过程:
setup()执行,设置引脚13为输出。- 进入
loop()。 - LED 亮 -> 等待1秒 -> LED 灭 -> 等待1秒。
loop()结束,立即返回开头。- 重复第3、4步,LED 就会持续闪烁。
void loop()是 Arduino 平台的特有函数,不是标准 C 的一部分。- 它在
setup()函数执行完毕后,被无限次地重复执行。 - 它是实现 Arduino 设备动态行为的核心,是程序的“主循环”。
- 在
loop()中,你可以放置需要持续运行的代码,如读取传感器、控制电机、处理输入等。 - 理解
loop()的工作原理是学习 Arduino 编程的第一步,也是最关键的一步。
