Arduino程序函数从入门到精通
一、Arduino开发环境与基础框架
1.1 Arduino IDE安装与配置
- 下载与安装
访问Arduino官网下载IDE,支持Windows、macOS、Linux系统。安装后需配置开发板类型(如Arduino Uno)和串口。 - 代码框架
每个Arduino程序包含两个核心函数:
void setup() {
// 初始化代码,仅执行一次
}
void loop() {
// 主循环代码,重复执行
}
二、Arduino核心函数详解与代码实践
2.1 引脚控制函数
2.1.1 pinMode():引脚模式设置
- 功能:配置数字引脚为输入(INPUT)、输出(OUTPUT)或输入上拉(INPUT_PULLUP)。
- 代码示例:
void setup() {
pinMode(13, OUTPUT); // 13号引脚设为输出
pinMode(2, INPUT_PULLUP); // 2号引脚启用内部上拉电阻
}
2.1.2 digitalWrite()与digitalRead()
- 功能:数字引脚电平控制与读取。
- 代码示例:
void loop() {
digitalWrite(13, HIGH); // 点亮LED
delay(1000);
digitalWrite(13, LOW); // 熄灭LED
delay(1000);
int buttonState = digitalRead(2); // 读取按钮状态
}
2.1.3 analogRead()与analogWrite()
- 功能:模拟输入(0-1023)与PWM输出(0-255)。
- 代码示例:
int sensorValue = analogRead(A0); // 读取A0引脚模拟值
analogWrite(9, 128); // 设置9号引脚PWM占空比为50%
2.2 串口通信函数
- Serial.begin():初始化串口通信(波特率需一致)。
- Serial.println():发送数据到串口监视器。
void setup() {
Serial.begin(9600); // 初始化串口
}
void loop() {
Serial.println("Hello World");
delay(1000);
}
2.3 时间控制函数
- delay():阻塞式延时(单位:毫秒)。
- millis():非阻塞时间管理(返回系统运行时间)。
三、自定义函数与高级编程技巧
3.1 函数定义与参数传递
- 函数原型声明:在setup()前声明函数。
- 代码示例:
int add(int a, int b); // 函数原型声明
void setup() {
Serial.begin(9600);
int result = add(3, 5);
Serial.println(result); // 输出8
}
int add(int a, int b) {
return a + b;
}
3.2 中断处理
- attachInterrupt():绑定中断服务函数。
volatile bool flag = false;
void setup() {
attachInterrupt(digitalPinToInterrupt(2), interruptHandler, FALLING);
}
void interruptHandler() {
flag = true; // 中断触发时执行
}
3.3 内存优化技巧
- 变量类型选择:优先使用uint8_t而非int节省内存。
- PROGMEM关键字:将常量数据存储到Flash而非RAM。
const char str[] PROGMEM = "Long Text";
四、Arduino与ESP32/树莓派的对比分析
4.1 Arduino与ESP32的差异
特性 | Arduino Uno | ESP32 |
处理器性能 | 16MHz 8-bit AVR | 240MHz 双核32-bit Xtensa |
内存容量 | 2KB RAM, 32KB Flash | 520KB RAM, 4MB Flash |
无线通信 | 需外接模块 | 内置Wi-Fi/蓝牙 |
适用场景 | 简单传感器控制 | 物联网、多任务处理 |
代码兼容性示例:ESP32支持Arduino框架,但需额外库(如WiFi.h):
#include <WiFi.h>
void setup() {
WiFi.begin("SSID", "password");
}
4.2 Arduino与树莓派的对比
特性 | Arduino | 树莓派 |
操作系统 | 无(裸机编程) | Linux/Windows |
开发语言 | C/C++ | Python/C++/Java等 |
硬件扩展 | 专用Shield模块 | 通用USB/GPIO |
实时性 | 高(微秒级响应) | 低(受OS调度影响) |
联合应用案例:树莓派作为控制中心,通过串口发送指令给Arduino驱动硬件。
五、扩展应用:从Arduino到物联网
5.1 进阶项目示例
- 环境监测系统
- 传感器:DHT11(温湿度)、MQ-135(空气质量)。
- 代码框架:
#include <DHT.h>
DHT dht(2, DHT11);
void setup() {
dht.begin();
Serial.begin(9600);
}
void loop() {
float temp = dht.readTemperature();
Serial.print("Temperature: ");
Serial.println(temp);
delay(2000);
}
- 无线通信(ESP32)
- 使用MQTT协议上传数据至云平台:
#include <WiFi.h>
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
WiFi.begin("SSID", "password");
client.connect("ESP32Client");
}
void loop() {
client.publish("sensor/temp", "25.5");
}