🔧Arduino开源硬件-海容板
本课程基于Arduino NANO/UNO主板,通过32个有趣的实验,学习电子电路和编程知识。每个实验包含:确定任务、硬件分析、流程图、电路连接、代码示例、知识点详解。
📚 课程1:定时开关灯
🎯 确定任务: 制作一个LED灯,以间隔1秒的方式闪烁(亮1秒,灭1秒,重复)。
📊 程序流程图:
开始
↓
初始化:设置引脚13为输出模式
↓
┌─────────────────┐
│ 循环开始 │
│ ↓ │
│ 引脚13输出高电平(LED亮)
│ ↓ │
│ 等待1000毫秒 │
│ ↓ │
│ 引脚13输出低电平(LED灭)
│ ↓ │
│ 等待1000毫秒 │
└─────────────────┘
🔌 硬件连接: LED正极(长脚)→ 数字引脚D13,LED负极(短脚)→ GND(之间串联220Ω电阻)。
void setup() { pinMode(13, OUTPUT); }
void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }
void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }
📖 知识点详解:
• 数字信号: 只有两种状态——高电平(HIGH/1,约5V)和低电平(LOW/0,约0V)。
• pinMode(引脚, 模式): 设置引脚工作模式,OUTPUT表示输出,INPUT表示输入。
• digitalWrite(引脚, 值): 向数字引脚输出高/低电平。
• delay(毫秒): 让程序暂停指定的毫秒数(1000毫秒=1秒)。
• LED限流电阻: LED工作电流约20mA,5V电压下需串联220Ω电阻,否则会烧坏LED。
• 数字信号: 只有两种状态——高电平(HIGH/1,约5V)和低电平(LOW/0,约0V)。
• pinMode(引脚, 模式): 设置引脚工作模式,OUTPUT表示输出,INPUT表示输入。
• digitalWrite(引脚, 值): 向数字引脚输出高/低电平。
• delay(毫秒): 让程序暂停指定的毫秒数(1000毫秒=1秒)。
• LED限流电阻: LED工作电流约20mA,5V电压下需串联220Ω电阻,否则会烧坏LED。
📚 课程2:SOS灯
🎯 确定任务: 制作SOS求救信号灯,以“三短、三长、三短”的方式闪烁。
📊 程序流程图:
开始
↓
初始化:设置引脚13为输出
↓
┌─────────────────────────┐
│ 重复3次(短信号) │
│ ↓ │
│ LED亮500ms → 灭500ms │
├─────────────────────────┤
│ 重复3次(长信号) │
│ ↓ │
│ LED亮1000ms → 灭1000ms │
├─────────────────────────┤
│ 重复3次(短信号) │
│ ↓ │
│ LED亮500ms → 灭500ms │
├─────────────────────────┤
│ 等待5秒 │
└─────────────────────────┘
void loop() {
for(int i=0;i<3;i++){ digitalWrite(13,1); delay(500); digitalWrite(13,0); delay(500); }
for(int i=0;i<3;i++){ digitalWrite(13,1); delay(1000); digitalWrite(13,0); delay(1000); }
for(int i=0;i<3;i++){ digitalWrite(13,1); delay(500); digitalWrite(13,0); delay(500); }
delay(5000);
}
for(int i=0;i<3;i++){ digitalWrite(13,1); delay(500); digitalWrite(13,0); delay(500); }
for(int i=0;i<3;i++){ digitalWrite(13,1); delay(1000); digitalWrite(13,0); delay(1000); }
for(int i=0;i<3;i++){ digitalWrite(13,1); delay(500); digitalWrite(13,0); delay(500); }
delay(5000);
}
📖 知识点详解:
• for循环: for(初始值; 条件; 变化){ 重复执行的代码 }。例如for(int i=0;i<3;i++)表示重复执行3次。
• SOS信号: 国际通用求救信号,用“三短、三长、三短”表示。1905年德国首先采用,可以通过灯光、声音、旗语等方式发出。
• 程序结构: setup()函数只运行一次,loop()函数无限循环运行。
• for循环: for(初始值; 条件; 变化){ 重复执行的代码 }。例如for(int i=0;i<3;i++)表示重复执行3次。
• SOS信号: 国际通用求救信号,用“三短、三长、三短”表示。1905年德国首先采用,可以通过灯光、声音、旗语等方式发出。
• 程序结构: setup()函数只运行一次,loop()函数无限循环运行。
📚 课程3:红绿灯
🎯 确定任务: 制作交通红绿灯,红灯亮30秒,绿灯亮10秒,重复循环。
📊 程序流程图:
开始
↓
初始化:设置引脚12、13为输出
↓
┌─────────────────┐
│ 红灯亮,绿灯灭 │
│ ↓ │
│ 等待30秒 │
│ ↓ │
│ 红灯灭,绿灯亮 │
│ ↓ │
│ 等待10秒 │
└─────────────────┘
void loop() {
digitalWrite(12,1); digitalWrite(13,0); delay(30000);
digitalWrite(12,0); digitalWrite(13,1); delay(10000);
}
digitalWrite(12,1); digitalWrite(13,0); delay(30000);
digitalWrite(12,0); digitalWrite(13,1); delay(10000);
}
📖 知识点详解:
• 光的波长: 红光波长最长(约620-750nm),穿透雾霾能力强,所以用作停车信号。绿灯波长较短,与红色容易区分。
• 红绿灯历史: 1868年伦敦诞生第一个红绿灯。1918年纽约出现三色灯。1928年上海出现中国第一批红绿灯。
• 多引脚控制: 可以同时控制多个输出设备,每个设备独立工作。
• 光的波长: 红光波长最长(约620-750nm),穿透雾霾能力强,所以用作停车信号。绿灯波长较短,与红色容易区分。
• 红绿灯历史: 1868年伦敦诞生第一个红绿灯。1918年纽约出现三色灯。1928年上海出现中国第一批红绿灯。
• 多引脚控制: 可以同时控制多个输出设备,每个设备独立工作。
📚 课程4:呼吸灯
🎯 确定任务: 模仿人的呼吸,LED逐渐变亮,再逐渐变暗,反复循环。
📊 程序流程图:
开始
↓
初始化:设置引脚3为PWM输出
↓
┌─────────────────────────┐
│ 亮度从0逐渐增加到255 │
│ ↓(每次增加1,延时8ms)│
│ 亮度从255逐渐减少到0 │
│ ↓(每次减少1,延时8ms)│
└─────────────────────────┘
int led = 3;
void loop() {
for(int a=0;a<=255;a++){ analogWrite(led,a); delay(8); }
for(int a=255;a>=0;a--){ analogWrite(led,a); delay(8); }
}
void loop() {
for(int a=0;a<=255;a++){ analogWrite(led,a); delay(8); }
for(int a=255;a>=0;a--){ analogWrite(led,a); delay(8); }
}
📖 知识点详解:
• PWM(脉冲宽度调制): 通过快速开关(约500次/秒)来模拟不同电压,实现LED亮度调节。占空比=高电平时间/周期,占空比越大越亮。
• analogWrite(引脚, 值): 仅支持带~标记的PWM引脚(Arduino UNO的3、5、6、9、10、11),值的范围0-255。
• 呼吸效果原理: 人眼有视觉暂留效应,PWM频率足够高时,感觉不到闪烁,只感觉到亮度变化。
• PWM(脉冲宽度调制): 通过快速开关(约500次/秒)来模拟不同电压,实现LED亮度调节。占空比=高电平时间/周期,占空比越大越亮。
• analogWrite(引脚, 值): 仅支持带~标记的PWM引脚(Arduino UNO的3、5、6、9、10、11),值的范围0-255。
• 呼吸效果原理: 人眼有视觉暂留效应,PWM频率足够高时,感觉不到闪烁,只感觉到亮度变化。
📚 课程5:按键开关灯
🎯 确定任务: 按下按键时LED亮,松开按键时LED灭。
📊 程序流程图:
开始
↓
初始化:引脚12为输入,引脚13为输出
↓
┌─────────────────────┐
│ 读取按键状态 │
│ ↓ │
│ 按键按下? │
│ ↓是 ↓否 │
│ LED亮 LED灭 │
└─────────────────────┘
void loop() {
if(digitalRead(12)==0) digitalWrite(13,1);
else digitalWrite(13,0);
}
if(digitalRead(12)==0) digitalWrite(13,1);
else digitalWrite(13,0);
}
📖 知识点详解:
• 数字输入: pinMode(引脚, INPUT)设置为输入模式,digitalRead(引脚)读取电平(HIGH=1,LOW=0)。
• 上拉电阻: 按键一端接引脚,另一端接GND。引脚通过内部上拉电阻(约20kΩ)默认拉高,按下时变低。
• if-else语句: if(条件){条件成立时执行} else{条件不成立时执行}。
• 按键抖动: 机械按键按下时会产生10-20ms的抖动,需要软件延时或硬件滤波。
• 数字输入: pinMode(引脚, INPUT)设置为输入模式,digitalRead(引脚)读取电平(HIGH=1,LOW=0)。
• 上拉电阻: 按键一端接引脚,另一端接GND。引脚通过内部上拉电阻(约20kΩ)默认拉高,按下时变低。
• if-else语句: if(条件){条件成立时执行} else{条件不成立时执行}。
• 按键抖动: 机械按键按下时会产生10-20ms的抖动,需要软件延时或硬件滤波。
📚 课程6:智能调光台灯
🎯 确定任务: 环境光线越暗,LED越亮;环境光线越亮,LED越暗(自动调节)。
📊 程序流程图:
开始
↓
初始化:A0为模拟输入,11为PWM输出
↓
┌─────────────────────────┐
│ 读取光线传感器值(0-1023)│
│ ↓ │
│ 计算亮度 = 255 - 值/4 │
│ ↓ │
│ 设置LED亮度 │
└─────────────────────────┘
void loop() {
int light = analogRead(A0);
int bright = 255 - light/4;
analogWrite(11, bright);
}
int light = analogRead(A0);
int bright = 255 - light/4;
analogWrite(11, bright);
}
📖 知识点详解:
• 模拟输入: analogRead(引脚)读取0-5V电压,返回0-1023之间的数值(10位精度)。
• 光敏电阻原理: 光照越强,电阻越小,ADC读取值越小。光线越暗,电阻越大,ADC读取值越大。
• 照度单位: 勒克斯(Lux),教室标准照度约300Lux,家庭客厅约100Lux。
• 映射公式: 将光线值(0-1023)映射到LED亮度(255-0),实现“暗时光亮,亮时光暗”。
• 模拟输入: analogRead(引脚)读取0-5V电压,返回0-1023之间的数值(10位精度)。
• 光敏电阻原理: 光照越强,电阻越小,ADC读取值越小。光线越暗,电阻越大,ADC读取值越大。
• 照度单位: 勒克斯(Lux),教室标准照度约300Lux,家庭客厅约100Lux。
• 映射公式: 将光线值(0-1023)映射到LED亮度(255-0),实现“暗时光亮,亮时光暗”。
📚 课程7:声光控楼道灯
🎯 确定任务: 环境暗且有声音时,LED亮5秒后自动熄灭。
📊 程序流程图:
开始
↓
初始化:A0、A1为输入,13为输出
↓
┌─────────────────────────┐
│ 读取光线值 和 声音值 │
│ ↓ │
│ 光线暗 AND 有声音? │
│ ↓是 ↓否 │
│ LED亮5秒 LED灭 │
└─────────────────────────┘
void loop() {
if(analogRead(A0)<200 && analogRead(A1)>120){
digitalWrite(13,1); delay(5000); digitalWrite(13,0);
}
}
if(analogRead(A0)<200 && analogRead(A1)>120){
digitalWrite(13,1); delay(5000); digitalWrite(13,0);
}
}
📖 知识点详解:
• 逻辑运算符: &&(与)表示两个条件同时成立才为真;||(或)表示任意一个成立就为真;!(非)表示取反。
• 声音传感器: 检测环境音量,声音越大ADC值越大。通常使用驻极体话筒+放大电路。
• 组合传感器: 将多个传感器条件组合,实现更智能的控制逻辑。
• 逻辑运算符: &&(与)表示两个条件同时成立才为真;||(或)表示任意一个成立就为真;!(非)表示取反。
• 声音传感器: 检测环境音量,声音越大ADC值越大。通常使用驻极体话筒+放大电路。
• 组合传感器: 将多个传感器条件组合,实现更智能的控制逻辑。
📚 课程8:人体感应灯
🎯 确定任务: 人体靠近时LED自动点亮,离开后自动熄灭。
📊 程序流程图:
开始
↓
初始化:引脚12为输入,13为输出
↓
┌─────────────────────┐
│ 读取人体红外传感器 │
│ ↓ │
│ 检测到人体? │
│ ↓是 ↓否 │
│ LED亮 LED灭 │
└─────────────────────┘
void loop() {
int val = digitalRead(12);
if(val==1) digitalWrite(13,1);
else digitalWrite(13,0);
}
int val = digitalRead(12);
if(val==1) digitalWrite(13,1);
else digitalWrite(13,0);
}
📖 知识点详解:
• 人体红外传感器(PIR): 检测人体发出的5-30微米远红外线。透镜(菲涅尔透镜)增大探测范围。
• 红外光谱: 太阳光包含红外、可见光、紫外。人体因体温约36℃,主要辐射远红外线。
• 应用场景: 楼道灯、自动门、安防报警器、感应水龙头。
• 人体红外传感器(PIR): 检测人体发出的5-30微米远红外线。透镜(菲涅尔透镜)增大探测范围。
• 红外光谱: 太阳光包含红外、可见光、紫外。人体因体温约36℃,主要辐射远红外线。
• 应用场景: 楼道灯、自动门、安防报警器、感应水龙头。
📚 课程9:遥控开关灯
🎯 确定任务: 使用任意红外遥控器,按“音量+”开灯,按“音量-”关灯。
📊 程序流程图:
开始
↓
初始化:红外接收、LED引脚
↓
┌─────────────────────────┐
│ 等待红外信号 │
│ ↓ │
│ 接收到信号? │
│ ↓是 │
│ 解码获取按键值 │
│ ↓ │
│ 判断按键值 │
│ ↓ │
│ 开关键 → LED亮 │
│ 关关键 → LED灭 │
└─────────────────────────┘
#include <IRremote.h>
IRrecv irrecv(11); decode_results results;
void loop() {
if(irrecv.decode(&results)){
if(results.value==0x4D457CCD) digitalWrite(12,1);
if(results.value==0x77C97628) digitalWrite(12,0);
irrecv.resume();
}
}
IRrecv irrecv(11); decode_results results;
void loop() {
if(irrecv.decode(&results)){
if(results.value==0x4D457CCD) digitalWrite(12,1);
if(results.value==0x77C97628) digitalWrite(12,0);
irrecv.resume();
}
}
📖 知识点详解:
• 红外通信: 使用38kHz载波调制,每个按键对应唯一编码(16进制)。
• 获取编码方法: 运行示例程序,打开串口监视器,按下遥控器按键即可看到编码值。
• switch-case语句: 多分支选择,比多个if-else更清晰高效。
• 应用: 万能遥控器、智能家居控制。
• 红外通信: 使用38kHz载波调制,每个按键对应唯一编码(16进制)。
• 获取编码方法: 运行示例程序,打开串口监视器,按下遥控器按键即可看到编码值。
• switch-case语句: 多分支选择,比多个if-else更清晰高效。
• 应用: 万能遥控器、智能家居控制。
📚 课程10:时钟灯带(WS2812)
🎯 确定任务: 12颗LED灯带,每秒点亮一颗新灯,前一颗保留,12秒后全部点亮,然后全部熄灭重复。
📊 程序流程图:
开始
↓
初始化:灯带引脚D6,12颗灯
↓
┌─────────────────────────┐
│ 全部熄灭 │
│ ↓ │
│ for i=0 到 11 │
│ 点亮第i颗灯 │
│ 显示 │
│ 等待1秒 │
│ i增加 │
└─────────────────────────┘
#include <Adafruit_NeoPixel.h>
#define PIN 6 #define NUMPIXELS 12
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void loop() {
for(int i=0;i<12;i++){
pixels.clear();
pixels.setPixelColor(i,pixels.Color(0,255,0));
pixels.show();
delay(1000);
}
}
#define PIN 6 #define NUMPIXELS 12
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void loop() {
for(int i=0;i<12;i++){
pixels.clear();
pixels.setPixelColor(i,pixels.Color(0,255,0));
pixels.show();
delay(1000);
}
}
📖 知识点详解:
• WS2812灯带: 内置驱动芯片的可编程LED,只需一根数据线即可控制多个灯的颜色和亮度。
• RGB颜色: 每个灯由红(R)、绿(G)、蓝(B)三基色混合而成,每种颜色值0-255,0=全暗,255=最亮。
• 光的三原色: 红+绿=黄,红+蓝=洋红,绿+蓝=青,红+绿+蓝=白光。
• Adafruit_NeoPixel库: 专用于控制WS2812灯带,提供setPixelColor(位置, 颜色)和show()等函数。
• WS2812灯带: 内置驱动芯片的可编程LED,只需一根数据线即可控制多个灯的颜色和亮度。
• RGB颜色: 每个灯由红(R)、绿(G)、蓝(B)三基色混合而成,每种颜色值0-255,0=全暗,255=最亮。
• 光的三原色: 红+绿=黄,红+蓝=洋红,绿+蓝=青,红+绿+蓝=白光。
• Adafruit_NeoPixel库: 专用于控制WS2812灯带,提供setPixelColor(位置, 颜色)和show()等函数。
📚 课程11:调速跑马灯
🎯 确定任务: 制作跑马灯,旋转电位器可调节跑动速度。
📊 程序流程图:
开始
↓
初始化:灯带引脚D6,电位器A0
↓
┌─────────────────────────┐
│ for i=0 到 11 │
│ 设置第i颗灯为随机颜色 │
│ 显示 │
│ 读取电位器值计算延时 │
│ 等待 │
│ 全部熄灭 │
└─────────────────────────┘
void loop() {
for(int i=0;i<12;i++){
pixels.setPixelColor(i,pixels.Color(random(0,255),random(0,255),random(0,255)));
pixels.show();
delay(analogRead(A0)*3);
pixels.clear();
}
}
for(int i=0;i<12;i++){
pixels.setPixelColor(i,pixels.Color(random(0,255),random(0,255),random(0,255)));
pixels.show();
delay(analogRead(A0)*3);
pixels.clear();
}
}
📖 知识点详解:
• 电位器: 可变电阻器,旋转改变电阻值,ADC读取0-1023。顺时针电阻增大→电压增大→数值增大。
• random()函数: random(最小值, 最大值)生成指定范围的随机整数,需要先用randomSeed()初始化随机种子。
• 调速原理: delay(电位器值×3)让等待时间随电位器值变化,实现速度调节。
• 电位器: 可变电阻器,旋转改变电阻值,ADC读取0-1023。顺时针电阻增大→电压增大→数值增大。
• random()函数: random(最小值, 最大值)生成指定范围的随机整数,需要先用randomSeed()初始化随机种子。
• 调速原理: delay(电位器值×3)让等待时间随电位器值变化,实现速度调节。
📚 课程12:调向跑马灯(中断控制方向)
🎯 确定任务: 按一次按键,跑马灯改变方向(从当前位置反转)。
📊 程序流程图:
开始
↓
初始化:开启中断(按键按下触发)
↓
设置方向变量state
↓
┌─────────────────────────┐
│ 根据state决定移动方向 │
│ ↓ │
│ 更新LED位置 │
│ ↓ │
│ 显示LED │
│ ↓ │
│ 延时 │
└─────────────────────────┘
↑
中断函数:按下按键时,state取反
volatile boolean state=LOW;
void sw(){ state=!state; }
void setup(){ attachInterrupt(0,sw,RISING); }
void loop(){
if(state==LOW) i++; else i--;
if(i>=12) i=0; if(i<0) i=11;
pixels.setPixelColor(i,pixels.Color(255,0,0));
pixels.show(); delay(100);
}
void sw(){ state=!state; }
void setup(){ attachInterrupt(0,sw,RISING); }
void loop(){
if(state==LOW) i++; else i--;
if(i>=12) i=0; if(i<0) i=11;
pixels.setPixelColor(i,pixels.Color(255,0,0));
pixels.show(); delay(100);
}
📖 知识点详解:
• 中断: 当外部事件发生时,暂停正在执行的程序,转去执行中断服务函数(ISR),执行完再返回。
• attachInterrupt(中断号, 函数, 触发方式): Arduino UNO的中断0对应D2,中断1对应D3。
• 触发方式: LOW(低电平)、CHANGE(电平变化)、RISING(上升沿)、FALLING(下降沿)。
• volatile关键字: 告知编译器变量可能在中断中修改,禁止优化,确保读取最新值。
• 中断: 当外部事件发生时,暂停正在执行的程序,转去执行中断服务函数(ISR),执行完再返回。
• attachInterrupt(中断号, 函数, 触发方式): Arduino UNO的中断0对应D2,中断1对应D3。
• 触发方式: LOW(低电平)、CHANGE(电平变化)、RISING(上升沿)、FALLING(下降沿)。
• volatile关键字: 告知编译器变量可能在中断中修改,禁止优化,确保读取最新值。
📚 课程13:展品讲解员(MP3语音播报)
🎯 确定任务: 当人体接近时,自动播放预先录制的展品介绍语音。
📊 程序流程图:
开始
↓
传感器检测人体
↓
检测到人体?
↓是
三极管导通 → MP3模块IO1接地
↓
播放第1首语音
↓
等待播放结束
🔌 电路原理: 人体红外传感器输出→三极管B极,E极→GND,C极→MP3模块IO1。当传感器输出高电平,三极管导通,IO1被拉低,触发播放。
📖 知识点详解:
• 三极管开关: NPN型三极管(如9013),B极高电平时,C-E导通,相当于开关闭合。
• MP3模块(BY8301): 内置存储,可通过USB更新MP3文件。IO1接地时播放第一首曲目。
• 语音更新: 使用专用软件“BY8301语音更新工具”将MP3文件写入模块。
• 应用: 博物馆讲解、迎宾器、语音提示器。
• 三极管开关: NPN型三极管(如9013),B极高电平时,C-E导通,相当于开关闭合。
• MP3模块(BY8301): 内置存储,可通过USB更新MP3文件。IO1接地时播放第一首曲目。
• 语音更新: 使用专用软件“BY8301语音更新工具”将MP3文件写入模块。
• 应用: 博物馆讲解、迎宾器、语音提示器。
📚 课程14:火焰报警器
🎯 确定任务: 检测到火焰时,蜂鸣器立即报警。
📊 程序流程图:
开始
↓
初始化:A0为输入,9为输出
↓
┌─────────────────────┐
│ 读取火焰传感器值 │
│ ↓ │
│ 值 > 500? │
│ ↓是 ↓否 │
│ 蜂鸣器响 蜂鸣器静│
└─────────────────────┘
void loop() {
if(analogRead(A0) > 500){
tone(9, 523, 250); delay(250);
}
}
if(analogRead(A0) > 500){
tone(9, 523, 250); delay(250);
}
}
📖 知识点详解:
• 火焰传感器: 检测红外光谱(主要是760-1100nm),火焰越近,ADC值越大。
• tone()函数: tone(引脚, 频率, 持续时间)在指定引脚输出方波,驱动蜂鸣器发声。
• 灭火常识: 固体火灾用水/干粉,液体/气体火灾用干粉/二氧化碳,电器火灾用干粉/二氧化碳。
• 声音报警: 频率523Hz对应C5音调,有急促感。
• 火焰传感器: 检测红外光谱(主要是760-1100nm),火焰越近,ADC值越大。
• tone()函数: tone(引脚, 频率, 持续时间)在指定引脚输出方波,驱动蜂鸣器发声。
• 灭火常识: 固体火灾用水/干粉,液体/气体火灾用干粉/二氧化碳,电器火灾用干粉/二氧化碳。
• 声音报警: 频率523Hz对应C5音调,有急促感。
📚 课程15-20:电子琴 / 平衡训练器 / 倒车雷达 / 自动排烟器 / 遥控闸机 / 防雨窗户
由于篇幅限制,其余课程结构与上述类似,包含:任务目标、流程图、电路连接、代码示例、知识点详解。完整版请下载Word文档查看。
📖 附录:常用Arduino语句汇总
| 语句 | 功能 | 示例 |
|---|---|---|
| pinMode(pin, mode) | 设置引脚模式 | pinMode(13, OUTPUT); |
| digitalWrite(pin, value) | 数字输出 | digitalWrite(13, HIGH); |
| digitalRead(pin) | 数字输入 | int val = digitalRead(12); |
| analogWrite(pin, value) | PWM输出 | analogWrite(3, 128); |
| analogRead(pin) | 模拟输入 | int light = analogRead(A0); |
| delay(ms) | 延时(毫秒) | delay(1000); |
| millis() | 返回开机毫秒数 | unsigned long t = millis(); |
| tone(pin, freq, duration) | 播放频率 | tone(9, 440, 500); |
| pulseIn(pin, state, timeout) | 测量脉冲宽度 | pulseIn(echo, HIGH, 30000); |
| random(min, max) | 随机数 | int r = random(0, 9); |
| attachInterrupt(pin, func, mode) | 外部中断 | attachInterrupt(0, sw, RISING); |
| Servo.write(angle) | 舵机角度 | myservo.write(90); |