Arduino 编程语言终极教程
本教程将分为以下几个部分:

-
第一部分:Arduino 简介
- 什么是 Arduino?
- Arduino 编程语言是什么?
- 你需要准备什么?
-
第二部分:第一个程序 - "Hello, World!"
- 安装 Arduino IDE
- 连接 Arduino 板
- 编写并上传你的第一个程序(Blink)
-
第三部分:Arduino 编程语言核心
- 结构:
setup()和loop() - 数据类型
- 变量与常量
- 运算符
- 控制结构
- 函数
- 结构:
-
第四部分:核心库函数详解
(图片来源网络,侵删)pinMode(),digitalWrite(),digitalRead()analogWrite(),analogRead()delay(),millis()Serial通信
-
第五部分:实战项目
- 项目1:呼吸灯
- 项目2:读取并显示传感器数据
- 项目3:控制舵机
-
第六部分:进阶学习资源
第一部分:Arduino 简介
1 什么是 Arduino?
Arduino 是一个开源的电子原型平台,包括一个简单易用的硬件(各种型号的 Arduino 板)和一款软件(Arduino IDE),它的目标是让艺术家、设计师、爱好者和任何对创造互动对象感兴趣的人,都能轻松地使用电子和编程。
2 Arduino 编程语言是什么?
Arduino 编程语言本质上是在 C++ 的基础上构建的一套简化版,它保留了 C++ 的核心结构,但省略了许多复杂的部分,并添加了大量专门用于控制硬件的预定义函数和库,即使你不懂 C++,也可以快速上手。
3 你需要准备什么?
- 硬件:
- 一块 Arduino 板(最推荐 Arduino UNO R3,因为它是最经典、资料最多的型号)。
- 一根 USB 数据线(用于供电和上传程序)。
- 一些基础元件:
- LED 灯
- 220Ω 电阻(用于保护 LED)
- 面包板 和跳线
- (可选)一个电位器 或光敏电阻
- 软件:
- Arduino IDE(集成开发环境),你可以在 Arduino 官网 (https://www.arduino.cc/en/software) 免费下载。
第二部分:第一个程序 - "Hello, World!"
在电子世界里,点亮一个 LED 灯就相当于编程世界里的 "Hello, World!"。
1 安装 Arduino IDE
- 访问 Arduino 官网,下载适合你操作系统的 IDE 版本。
- 运行安装程序,按照提示完成安装。
- 首次打开 IDE,可能需要选择“开发板”和“端口”(稍后讲)。
2 连接 Arduino 板
用 USB 数据线将你的 Arduino UNO 连接到电脑,电脑应该会识别它,并安装相应的驱动程序。
3 编写并上传程序(Blink)
-
选择开发板和端口:
- 点击菜单栏的 工具 -> 开发板 -> Arduino Uno。
- 点击 工具 -> 端口,选择你的 Arduino 所在的 COM 端口(在 Windows 上通常是
COM3或更高,在 macOS 上是/dev/cu.usbmodem...)。
-
编写代码:
- 打开 Arduino IDE,你会看到一个默认的模板,将里面的所有代码删除,然后复制并粘贴下面的代码:
/* Blink Turns an LED on for one second, then off for one second, repeatedly. */ // 定义 LED 引脚,我们将使用 Arduino 板上内置的 LED // 大多数 Arduino 板上,板载 LED 连接在数字引脚 13 const int ledPin = 13; // setup() 函数在每次上电或复位时只运行一次 void setup() { // 初始化数字引脚 ledPin 作为输出 pinMode(ledPin, OUTPUT); } // loop() 函数在 setup() 执行完毕后,会无限循环地执行 void loop() { // 点亮 LED (将电压设为高电平) digitalWrite(ledPin, HIGH); // 等待一秒钟 (1000 毫秒) delay(1000); // 熄灭 LED (将电压设为低电平) digitalWrite(ledPin, LOW); // 再等待一秒钟 delay(1000); } -
上传代码:
- 点击工具栏上的 “上传” 按钮(一个向右的箭头)。
- IDE 会先“编译”你的代码,然后将其上传到 Arduino 板上。
- 如果一切顺利,你会看到 IDE 底部显示“上传成功”,并且你 Arduino 板上的 L 标签灯会开始以 1 秒的间隔闪烁!
恭喜!你已经成功运行了第一个 Arduino 程序!
第三部分:Arduino 编程语言核心
1 结构:setup() 和 loop()
每个 Arduino 程序都包含两个核心函数:
void setup(): 这个函数在程序开始时只运行一次,通常用于初始化设置,比如设置引脚模式(输入/输出)、启动串口通信等。void loop(): 这个函数在setup()运行完毕后,会无限循环地执行,这是你的程序主要逻辑所在的地方。
2 数据类型
数据类型定义了变量可以存储哪种类型的数据。
| 数据类型 | 大小 (字节) | 描述 | 范围 |
|---|---|---|---|
void |
0 | 表示“无类型”或“无值” | - |
bool |
1 | 布尔值 | true 或 false |
char |
1 | 字符 | -128 到 127 |
unsigned char |
1 | 无符号字符 | 0 到 255 |
int |
2 | 整数 | -32,768 到 32,767 |
unsigned int |
2 | 无符号整数 | 0 到 65,535 |
long |
4 | 长整数 | -2,147,483,648 到 2,147,483,647 |
float |
4 | 单精度浮点数 | -3.4028235E+38 到 3.4028235E+38 |
String |
- | 字符串对象 | - |
3 变量与常量
-
变量: 用于存储数据,其值可以在程序中改变。
- 语法:
数据类型 变量名; - 示例:
int sensorValue;
- 语法:
-
常量: 用于存储固定不变的值,一旦定义就不能修改。
- 语法:
const 数据类型 常量名 = 值; - 示例:
const int ledPin = 13;(我们之前就用过)
- 语法:
4 运算符
- 算术运算符: (加), (减), (乘), (除), (取模)
- 比较运算符: (等于), (不等于),
>(大于),<(小于),>=(大于等于),<=(小于等于) - 逻辑运算符:
&&(与), (或), (非)
5 控制结构
控制结构用于控制代码的执行流程。
-
if...else: 条件判断if (x > 100) { // x 大于 100,执行这里的代码 } else { // 否则,执行这里的代码 } -
for: 循环执行固定次数// 初始化 i=0; 当 i < 10 时循环; 每次循环后 i+1 for (int i = 0; i < 10; i++) { // 这段代码会执行 10 次 } -
while: 当条件为真时,循环执行while (x > 0) { // 只要 x 大于 0,就会一直执行 x--; }
6 函数
函数是一段可以重复使用的代码块,除了 setup() 和 loop(),Arduino 还提供了大量内置函数来操作硬件,我们将在下一部分详细讲解,你也可以自己定义函数。
第四部分:核心库函数详解
这些是 Arduino 编程中最常用、最重要的函数。
1 数字 I/O (Digital I/O)
用于控制只有“开/关”两种状态的引脚。
-
pinMode(pin, mode)- 作用: 设置引脚的工作模式。
- 参数:
pin: 你要设置的引脚号(如 2, 3, 13)。mode: 模式,可以是INPUT(输入)或OUTPUT(输出)。
- 示例:
pinMode(13, OUTPUT);
-
digitalWrite(pin, value)- 作用: 向一个设置为输出的引脚写入高电平或低电平。
- 参数:
pin: 引脚号。value: 值,可以是HIGH(高电平,约 5V)或LOW(低电平, 0V)。
- 示例:
digitalWrite(13, HIGH);
-
digitalRead(pin)- 作用: 读取一个设置为输入的引脚的状态。
- 参数:
pin: 引脚号。
- 返回值:
HIGH或LOW。 - 示例:
int buttonState = digitalRead(2);
2 模拟 I/O (Analog I/O)
用于处理连续变化的信号,如亮度、温度、声音等。
-
analogWrite(pin, value)- 作用: 向一个设置为输出的引脚写入一个模拟值(PWM 信号)。
- 注意: 只有标记了 的引脚(如 UNO 上的
~3,~5,~6,~9,~10,~11)才能使用此函数。 - 参数:
pin: 引脚号。value: 一个 0 到 255 之间的整数,0 对应 0V,255 对应 5V。
- 示例:
analogWrite(9, 128);// 在引脚 9 上输出 2.5V
-
analogRead(pin)- 作用: 从一个模拟输入引脚读取一个模拟值。
- 注意: Arduino UNO 有 6 个模拟输入引脚(A0 到 A5)。
- 参数:
pin: 引脚号(A0 到 A5)。
- 返回值: 一个 0 到 1023 之间的整数,0 对应 0V,1023 对应 5V。
- 示例:
int sensorValue = analogRead(A0);
3 时间函数
-
delay(ms)- 作用: 暂停程序的执行指定的毫秒数。
- 参数:
ms(毫秒)。 - 示例:
delay(1000);// 暂停 1 秒 - 注意: 在
delay期间,Arduino 什么都做不了,程序被“阻塞”了。
-
millis()-
作用: 返回 Arduino 板开始运行当前程序以来的毫秒数。
-
返回值:
unsigned long类型的毫秒数。 -
用途: 这是一个非常重要的非阻塞式计时方法,你可以用它来创建不使用
delay的定时器。 -
示例:
unsigned long previousMillis = 0; const long interval = 1000; // 间隔 1 秒 void loop() { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; // 执行需要每隔一秒执行一次的操作 digitalWrite(13, !digitalRead(13)); // 切换 LED 状态 } // 在这里可以添加其他不会阻塞的代码 }
-
4 Serial 通信
用于在 Arduino 和电脑之间发送和接收数据,是调试程序的神器。
-
Serial.begin(speed)- 作用: 启动串口通信。
- 参数:
speed(波特率),常用的有9600,115200。必须保证电脑端和 Arduino 端的波特率一致! - 示例:
Serial.begin(9600);// 通常放在 setup() 里
-
Serial.print(data)- 作用: 向电脑发送数据,数据发送后不换行。
- 示例:
Serial.print("Hello, ");
-
Serial.println(data)- 作用: 向电脑发送数据,并在末尾添加一个换行符(
\n),这会让数据显示在不同的行上,非常方便。 - 示例:
Serial.println("World!");
- 作用: 向电脑发送数据,并在末尾添加一个换行符(
-
Serial.available()- 作用: 检查串口缓冲区中是否有可读取的数据,如果有,返回大于 0 的数;否则返回 0。
- 用途: 通常在
loop()中使用,判断是否收到了电脑发来的指令。
-
Serial.read()- 作用: 读取串口缓冲区中的一个字节(一个字符)。
- 返回值: 读取到的字符,如果缓冲区为空则返回 -1。
第五部分:实战项目
项目1:呼吸灯
目标: 让 LED 的亮度像呼吸一样平滑地渐亮再渐暗。
硬件:
- Arduino UNO
- LED
- 220Ω 电阻
- 面包板和跳线
接线:
- LED 长脚(阳极) -> 电阻 -> Arduino 数字引脚 9
- LED 短脚(阴极) -> Arduino GND
代码:
// 定义 LED 引脚
const int ledPin = 9; // 必须是支持 PWM 的引脚
void setup() {
// 设置 ledPin 为输出
pinMode(ledPin, OUTPUT);
}
void loop() {
// 渐亮
for (int brightness = 0; brightness <= 255; brightness++) {
analogWrite(ledPin, brightness);
delay(10); // 控制渐变速度
}
// 渐暗
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(ledPin, brightness);
delay(10); // 控制渐变速度
}
}
项目2:读取并显示光敏电阻数据
目标: 读取光敏电阻的值,并通过串口监视器显示出来。
硬件:
- Arduino UNO
- 光敏电阻
- 10kΩ 电阻
- 面包板和跳线
接线:
- 5V -> 光敏电阻一端
- 光敏电阻另一端 -> Arduino 模拟引脚 A0
- A0 -> 10kΩ 电阻 -> GND
- (这种接线方式称为“分压电路”)
代码:
// 定义模拟输入引脚
const int sensorPin = A0;
void setup() {
// 初始化串口通信,波特率设为 9600
Serial.begin(9600);
}
void loop() {
// 读取传感器的值 (0-1023)
int sensorValue = analogRead(sensorPin);
// 通过串口输出读取到的值
Serial.print("Sensor Value: ");
Serial.println(sensorValue);
// 等待一会儿,避免串口监视器刷新太快
delay(500);
}
操作: 上传代码后,点击 Arduino IDE 右上角的 “放大镜” 图标打开串口监视器,你就能看到实时变化的光照数据了,用手遮挡光敏电阻,观察数值的变化。
第六部分:进阶学习资源
当你掌握了基础后,可以探索以下资源来继续学习:
-
Arduino 官方网站: (https://www.arduino.cc/)
- 官方文档: 最权威的参考手册。
- 教程: 官方提供的各种项目教程。
- 社区: 可以向全球的爱好者提问。
-
GitHub - Arduino Library: (https://github.com/arduino)
所有官方库的源代码都在这里,你可以学习它们是如何实现的。
-
社区和论坛:
- Arduino 中文论坛: 国内非常活跃的 Arduino 社区。
- Reddit (r/arduino): 国际知名的 Arduino 社区。
-
YouTube 频道:
- Paul McWhorter: 非常适合初学者的英文教程,讲解清晰。
- GreatScott!: 项目导向,教你如何用 Arduino 创造有趣的东西。
- 国内各大创客/电子 UP主: 搜索“Arduino 教程”,有大量优秀的中文视频资源。
-
购买更多传感器和模块:
- 购买一个 传感器套件,里面包含了各种常见的传感器(温湿度、超声波、红外等),这是实践和提升最快的方式。
也是最重要的建议:
动手!动手!再动手! 编程和电子是实践性极强的学科,不要只看不练,哪怕只是修改一下 delay 的时间,或者换个引脚,都是一次宝贵的学习,祝你玩得开心!
