arduino程序基本框架
打开Arduino IDE会显示程序模板,将在这两个函数模块里进行对应程序的编写。程序从上到下依次执行。程序保存后是一个后缀为.ino的文件。arduino的所有程序都是由图中两大块组成,分别是 setup() 函数和 loop() 函数。
引脚
开发板连接外设,主要通过INPUT(输入),OUTPUT(输出)实现与外围设备的之间的互相控制,简称为IO,主要有三类。
IO(输入输出) | INPUT(输入) | 例如 | OUTPUT(输出) | 例如 |
数字IO | digitalRead(); | 开关 | digitalWrite(); | LED |
模拟IO | analogRead(); | 旋钮开关 | analogWrite(); | 马达 |
串口IO | Serial.read(); | 蓝牙从 | Serial.read(); | 蓝牙主 |

注意:板子上的引脚标记为实际芯片引脚,使用arduino编程时引脚要填写arduino官方的数字引脚与模拟端口引脚号

如设置板子的B0引脚为输出模式,则代码为pinMode(2,OUTPUT);
setup() 函数
setup()函数主要负责设置参数,这个区域内的代码只会被执行一次。各个模块与引脚的初始化程序常常被放在这个函数内。
以下是几个常见语句:
语句 | 功能 |
pinMode( 引脚编号 , INPUT ); | 设置引脚为输入模式 |
pinMode( 引脚编号 , OUTPUT ); | 设置引脚为输出模式 |
Serial.begin(); | 设置串口 |
loop() 函数
loop()函数里面的代码是循环执行的。程序从第一行开始执行,setup() 里的程序执行完成后,开始执行loop() 里的程序。由于loop() 是循环执行的,第一次执行结束,程序将返回到loop() 继续执行,循环往复。
setup() 模块里面设置引脚为 OUTPUT 时,为输出信号,loop()函数写法如下
语句 | 功能 |
digitalWrite( x ,HIGH); | x引脚输出高电平 |
digitalWrite( x ,LOW); | x引脚输出低电平 |
analogWrite( x , i ); | x引脚输出一个PWM,PWM的占空比为 i/255 |
Serial.print(); | 输出串口数据 |
delay( x ); | 延迟x毫秒 |
例子,要让数字引脚2,1s开1s关,一直循环


LED的长脚接数字引脚2,短脚接GND

代码
// 测试Arduino 2引脚,引脚1000ms开,1000ms关
void setup() {
// 初始化2号引脚为输出模式
pinMode(2, OUTPUT);
}
void loop() {
// 将2引脚设置为高电平(开)
digitalWrite(2, HIGH);
delay(1000); // 保持打开1000ms
// 将2引脚设置为低电平(关)
digitalWrite(2, LOW);
delay(1000); // 保持关闭1000ms
}
实验现象:可以看到LED在闪烁


setup() 模块里面设置引脚为 INPUT 时,为输入信号,即读取,loop()函数写法如下:
语句 | 功能 |
digitalRead( x ); | 读取x引脚的数据 |
Serial.read(); | 读取串口数据 |
变量
类型 | 定义变量 |
整形 | int+变量名 |
浮点型 | float+变量名 |
双精度浮点型 | double+变量名 |
字符型 | char+变量名 |
给变量赋值
变量名=对应值;
语句 | 功能 |
int a; a =5; | 定义整形变量a;整型变量a赋值为5 |
float b; b =1.1; | 定义浮点型变量b;浮点型变量b赋值为1.1 |
char c; c ='x'; | 定义字符型变量c;字符型变量c赋值为x |
micros () 函数
micros()
函数用于获取 Arduino 板启动当前程序后累计的微秒数(时间换算:1 秒 = 1,000 毫秒 = 1,000,000 微秒),返回值类型为 unsigned long
(无符号长整型),适用于需要高精度计时的场景。
1. 核心特性
特性描述 | 具体说明 |
时间精度 | 远高于 delay() (毫秒级)和 millis() (毫秒级),最小计时单位为微秒 |
数值范围 | 取值范围为 0 ~ 4294967295 微秒(约 71.5 分钟),达到最大值后会溢出归零重新计数 |
程序影响 | 非阻塞式函数,调用时不会暂停程序执行,可用于并行任务的精准计时 |
2. 基本语法与变量定义
语法格式 | 功能说明 | 示例代码 |
unsigned long 变量名 = micros(); | 定义无符号长整型变量,存储当前微秒数 | unsigned long currentMicros = micros(); |
应用场景:非阻塞式定时任务
替代 delay()
实现 “定时执行任务”,同时不影响其他代码运行(如并行检测传感器、刷新显示等)。
步骤 | 代码示例 | 功能说明 |
1. 定义变量 | unsigned long lastTime = 0; const unsigned long interval = 200000; | lastTime :上一次执行任务的时间;interval :定时间隔(200,000 微秒 = 0.2 秒) |
2. 获取当前时间 | unsigned long currentTime = micros(); | 每次循环获取最新微秒数 |
3. 判断定时条件 | if(currentTime - lastTime >= interval) | 若当前时间与上次执行时间的差值≥定时间隔,触发任务 |
4. 执行任务并更新时间 | digitalWrite(2, !digitalRead(2)); lastTime = currentTime; | 翻转 LED 状态,更新上次执行时间 |
完整示例代码:
unsigned long lastTime = 0; // 上一次执行任务的时间
const unsigned long interval = 200000; // 定时间隔(200,000微秒 = 0.2秒)
void setup() {
pinMode(2, OUTPUT); // 设置2号引脚为输出模式
}
void loop() {
unsigned long currentTime = micros(); // 获取当前微秒数
// 满足定时条件时执行任务
if(currentTime - lastTime >= interval){
lastTime = currentTime; // 更新上次执行时间,避免重复触发
digitalWrite(2, !digitalRead(2)); // 翻转LED状态(亮→灭/灭→亮)
}
// 其他并行代码(不会被定时任务阻塞)
// 例如:Serial.print("当前时间:"); Serial.println(currentTime);
}
4. 注意事项
注意点 | 详细说明 |
溢出处理 | 若需超过 71.5 分钟的计时,需在代码中添加 “溢出判断逻辑”,避免计时错误(例如:当 currentTime < lastTime 时,说明已溢出,需重新计算时间差) |
变量类型 | 必须使用 unsigned long 类型存储返回值,若用 int 或 long 会导致数值溢出,出现错误结果 |