Arduino 知识速查表
基础语法
程序结构
void setup() {
// 初始化代码,只执行一次
}
void loop() {
// 主循环代码,重复执行
}
数据类型
| 类型 | 大小 | 范围 | 说明 |
|---|---|---|---|
byte | 1字节 | 0-255 | 无符号整数 |
int | 2字节 | -32768~32767 | 整数 |
unsigned int | 2字节 | 0-65535 | 无符号整数 |
long | 4字节 | -2147483648~2147483647 | 长整数 |
float | 4字节 | -3.4E+38~3.4E+38 | 浮点数 |
double | 4字节 | 同 float | 双精度(Uno 上与 float 相同) |
char | 1字节 | -128~127 | 字符 |
bool | 1字节 | true/false | 布尔值 |
String | 可变 | - | 字符串对象 |
常量
| 常量 | 值 | 说明 |
|---|---|---|
HIGH | 1 | 高电平(5V) |
LOW | 0 | 低电平(0V) |
INPUT | 0 | 输入模式 |
OUTPUT | 1 | 输出模式 |
INPUT_PULLUP | 2 | 输入上拉模式 |
LED_BUILTIN | 13 | 板载 LED 引脚 |
true | 1 | 真 |
false | 0 | 假 |
数字 I/O
函数
pinMode(pin, mode); // 设置引脚模式
pinMode(13, OUTPUT);
digitalWrite(pin, value); // 数字输出
digitalWrite(13, HIGH);
int value = digitalRead(pin); // 数字输入
int buttonState = digitalRead(2);
引脚模式
| 模式 | 说明 |
|---|---|
INPUT | 高阻抗输入 |
OUTPUT | 输出模式 |
INPUT_PULLUP | 内部上拉电阻输入 |
模拟 I/O
函数
int value = analogRead(pin); // 模拟输入(0-1023)
int sensorValue = analogRead(A0);
analogWrite(pin, value); // PWM 输出(0-255)
analogWrite(9, 128); // 50% 占空比
// 数值映射
map(value, fromLow, fromHigh, toLow, toHigh);
int pwm = map(sensorValue, 0, 1023, 0, 255);
PWM 引脚
Arduino Uno 的 PWM 引脚:D3, D5, D6, D9, D10, D11
时间函数
delay(ms); // 延时(毫秒)
delay(1000); // 延时 1 秒
delayMicroseconds(us); // 延时(微秒)
delayMicroseconds(100); // 延时 100 微秒
unsigned long ms = millis(); // 运行时间(毫秒)
unsigned long us = micros(); // 运行时间(微秒)
串口通信
初始化与发送
Serial.begin(baudrate); // 初始化串口
Serial.begin(9600);
Serial.print(data); // 打印数据(不换行)
Serial.println(data); // 打印数据(换行)
Serial.write(byte); // 写入字节
接收
int available = Serial.available(); // 可读字节数
char incoming = Serial.read(); // 读取一个字节
String data = Serial.readString(); // 读取字符串
String line = Serial.readStringUntil('\n'); // 读取到换行
常用波特率
| 波特率 | 用途 |
|---|---|
| 9600 | 默认,最常用 |
| 115200 | 高速传输 |
| 57600 | 蓝牙模块常用 |
数学函数
// 基本运算
min(x, y); // 最小值
max(x, y); // 最大值
abs(x); // 绝对值
constrain(x, a, b); // 限制在范围内
map(x, a, b, c, d); // 数值映射
// 高级运算
sqrt(x); // 平方根
pow(base, exp); // 幂运算
sq(x); // 平方
// 三角函数(弧度)
sin(rad); // 正弦
cos(rad); // 余弦
tan(rad); // 正切
// 随机数
random(max); // 0 到 max-1
random(min, max); // min 到 max-1
randomSeed(seed); // 设置随机种子
位操作
// 位运算
& // 与
| // 或
^ // 异或
~ // 非
<< // 左移
>> // 右移
// 位操作宏
bitRead(value, bit); // 读取位
bitWrite(value, bit, bitvalue); // 写入位
bitSet(value, bit); // 设置位为 1
bitClear(value, bit); // 清除位为 0
bit(bitNum); // 获取位掩码
中断
// 定义中断服务函数
void myISR() {
// 中断处理代码
}
void setup() {
// 附加中断
attachInterrupt(digitalPinToInterrupt(pin), myISR, mode);
// 分离中断
detachInterrupt(digitalPinToInterrupt(pin));
}
中断模式
| 模式 | 说明 |
|---|---|
LOW | 低电平触发 |
CHANGE | 状态变化触发 |
RISING | 上升沿触发 |
FALLING | 下降沿触发 |
Uno 中断引脚
| 中断号 | 引脚 |
|---|---|
| 0 | D2 |
| 1 | D3 |
EEPROM(存储)
#include <EEPROM.h>
// 写入
EEPROM.write(address, value); // 写入字节
EEPROM.put(address, value); // 写入任意类型
// 读取
byte value = EEPROM.read(address); // 读取字节
EEPROM.get(address, variable); // 读取任意类型
// 更新(只在值变化时写入)
EEPROM.update(address, value);
// 获取大小
int size = EEPROM.length();
常用库
舵机
#include <Servo.h>
Servo myServo;
myServo.attach(pin); // 连接舵机
myServo.write(angle); // 设置角度(0-180)
myServo.detach(); // 断开连接
步进电机
#include <Stepper.h>
Stepper myStepper(stepsPerRev, pin1, pin2, pin3, pin4);
myStepper.setSpeed(rpm); // 设置转速
myStepper.step(steps); // 转动步数
软件串口
#include <SoftwareSerial.h>
SoftwareSerial mySerial(rxPin, txPin);
mySerial.begin(baudrate);
mySerial.print(data);
I2C
#include <Wire.h>
Wire.begin(); // 以主设备加入 I2C 总线
Wire.beginTransmission(address);
Wire.write(data);
Wire.endTransmission();
Wire.requestFrom(address, quantity);
while (Wire.available()) {
char c = Wire.read();
}
SPI
#include <SPI.h>
SPI.begin();
SPI.transfer(data);
SPI.end();
引脚图(Arduino Uno)
┌─────────────────┐
RESET ─┤● ●├─ 5V
3.3V ─┤ ●├─ GND
5V ─┤● ●├─ Vin
GND ─┤ ●├─ A0
Vin ─┤● ●├─ A1
│ │
A0 ─┤● ●├─ A2
A1 ─┤ ●├─ A3
A2 ─┤● ●├─ A4 (SDA)
A3 ─┤ ●├─ A5 (SCL)
A4 ─┤● ●├─ D0 (RX)
A5 ─┤ ●├─ D1 (TX)
│ ARDUINO │
D0 ─┤● UNO ●├─ D2
D1 ─┤ ●├─ D3 (~PWM)
D2 ─┤● ●├─ D4
D3 (~) ─┤ ●├─ D5 (~PWM)
D4 ─┤● ●├─ D6 (~PWM)
D5 (~) ─┤ ●├─ D7
D6 (~) ─┤● ●├─ D8
D7 ─┤ ●├─ D9 (~PWM)
D8 ─┤● ●├─ D10 (~PWM)
D9 (~) ─┤ ●├─ D11 (~PWM)
D10(~) ─┤● ●├─ D12
D11(~) ─┤ ●├─ D13 (LED)
D12 ─┤● ●├─ GND
D13 ─┤ ●├─ AREF
GND ─┤● ●├─ SDA
AREF ─┤ ●├─ SCL
SDA ─┤● ●├─
SCL ─┤ ●├─
└─────────────────┘
(~) = PWM 支持
常用传感器接线速查
DHT11/DHT22 温湿度
VCC → 5V
DATA → D2(需 10kΩ 上拉)
GND → GND
HC-SR04 超声波
VCC → 5V
Trig → D9
Echo → D10
GND → GND
HC-SR501 人体红外
VCC → 5V
OUT → D2
GND → GND
I2C 设备(LCD/OLED)
VCC → 5V
GND → GND
SCL → A5
SDA → A4
代码片段
按钮消抖
bool debounce(int pin) {
static unsigned long lastTime = 0;
static int lastState = HIGH;
int reading = digitalRead(pin);
if (reading != lastState) {
lastTime = millis();
}
if (millis() - lastTime > 50) {
return reading == LOW;
}
lastState = reading;
return false;
}
平滑传感器读数
int smoothRead(int pin, int samples = 10) {
long sum = 0;
for (int i = 0; i < samples; i++) {
sum += analogRead(pin);
delayMicroseconds(100);
}
return sum / samples;
}
非阻塞延时
unsigned long previousMillis = 0;
const long interval = 1000;
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// 执行定时任务
}
}
故障排除
上传失败
- 检查端口选择
- 检查开发板型号
- 检查驱动安装
- 断开 D0/D1 外部连接
程序不运行
- 检查电源连接
- 检查引脚编号
- 检查
pinMode()设置
串口乱码
- 检查波特率设置
- 检查串口监视器波特率
传感器读数异常
- 检查接线
- 检查电源稳定性
- 添加去耦电容
- 使用滤波算法