当前位置: 首页 > news >正文

Arduino程序函数从入门到精通

一、Arduino开发环境与基础框架

1.1 Arduino IDE安装与配置

  1. 下载与安装
    访问Arduino官网下载IDE,支持Windows、macOS、Linux系统。安装后需配置开发板类型(如Arduino Uno)和串口。
  2. 代码框架
    每个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 内存优化技巧

  1. 变量类型选择:优先使用uint8_t而非int节省内存。
  2. PROGMEM关键字:将常量数据存储到Flash而非RAM。

const char str[] PROGMEM = "Long Text";

四、ArduinoESP32/树莓派的对比分析

4.1 ArduinoESP32的差异

特性

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 进阶项目示例

  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);

}

  1. 无线通信(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");

}

相关文章:

  • Cursor 是什么
  • 【IP101】图像滤波技术详解:从均值滤波到高斯滤波的完整指南
  • C语言-函数的递归和迭代
  • 【大模型】图像生成:ESRGAN:增强型超分辨率生成对抗网络的革命性突破
  • 在 Windows 上启用 Telnet 命令
  • Linux之shell脚本
  • 多商户商城系统开发全策略:从技术架构到流量增长
  • 前端八股 3
  • 2025智能体的发展趋势
  • 分寝室(C++完成)
  • [UVM]寄存器模型的镜像值和期望值定义是什么?他们会保持一致吗?
  • Socket通信
  • SQL注入与简单实战
  • 动态规划简单题
  • Origin绘图操作:图中迷你图绘制
  • 欧拉计划 Project Euler62(立方数重排)题解
  • GESP2024年6月认证C++八级( 第一部分选择题(11-15))
  • 图像增强技术:从基础原理到企业级开发实战
  • NU1680低成本、无固件、高集成度无线充电电源接收器
  • 如何阅读GitHub上的深度学习项目
  • “五一”假期首日:国铁南宁局发送旅客81.7万人次
  • 讲座|为什么要不断地翻译叶芝的诗?它们为什么值得细读?
  • 荆州市委书记汪元程:全市各级干部要做到慎微、慎初、慎独、慎友
  • 中方发布《不跪!》视频传递何种信息?外交部回应
  • 言短意长|新能源领军者密集捐赠母校
  • 对话|贝聿铭设计的不只是建筑,更是生活空间