当前位置: 首页 > 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");

}

http://www.xdnf.cn/news/242299.html

相关文章:

  • 中国发布Web3计划:区块链列为核心基础技术,不排除发展加密资产应用!
  • 2025五一杯B题超详细解题思路
  • Qwen3 发布:优化编码与代理能力,强化 MCP 支持引领 AI 新潮流
  • 在阿里云 Ubuntu 24.04 上部署 RabbitMQ:一篇实战指南
  • 24.Linux中RTC的驱动实验_csdn
  • MATLAB R2024a安装教程
  • Spring MVC 与 FreeMarker 整合
  • Sigmoid函数导数推导详解
  • CSS学习笔记14——移动端相关知识(rem,媒体查询,less)
  • 奇偶ASCII值判断
  • 对计网考研中的信道、传输时延、传播时延的理解
  • python2反编译部分
  • POI从入门到上手(三)-轻松完成EasyExcel使用,完成Excel导入导出.
  • 第 11 届蓝桥杯 C++ 青少组中 / 高级组省赛 2020 年真题,选择题详细解释
  • WPF使用SQLSugar和Nlog
  • 精品推荐-湖仓一体电商数据分析平台实践教程合集(视频教程+设计文档+完整项目代码)
  • OpenHarmony全局资源调度管控子系统之内存管理部件
  • 【STM32单片机】#12 SPI通信(软件读写)
  • IRF2.0IRF3.1
  • 小白dockerfile
  • Linux安全清理删除目录bash脚本
  • 使用scipy求解优化问题
  • Three.js在vue中的使用(一)-基础
  • 报错:函数或变量 ‘calcmie‘ 无法识别。
  • 【网络服务器】——回声服务器(echo)
  • 【C++】类和对象【中下】
  • 【中间件】bthread_基础_TaskControl
  • PyTorch 与 TensorFlow:深度学习框架的深度剖析与实战对比
  • 怎么查看数据库容量
  • REST API、FastAPI与Flask API的对比分析