- 机器人等级考试
Arduino 编程基础实践学习笔记教程
- 2025-8-10 21:00:29 @
Arduino 编程基础实践学习笔记教程
一、前言
本教程围绕多段 Arduino 代码展开,涵盖引脚配置、输入输出控制、串口通信、循环结构、模拟信号处理等核心知识点,结合代码示例与详细注释,帮助你快速上手 Arduino 开发。
二、环境准备
确保已安装 Arduino IDE,可从Arduino 官方网站下载对应系统版本。将 Arduino 开发板通过 USB 连接到电脑,安装好对应开发板驱动(如 Uno 等常见开发板一般自动识别) 。
三、代码实践与知识点解析
(一)按钮控制风扇启停(sketch_aug10a.ino )
// 定义风扇模块连接的引脚为3(数字输出引脚)
// 注:数字引脚3、5、6、9、10、11通常支持PWM输出,适合控制电机类设备,这里用普通数字输出也可控制启停
const int motorPin = 3;
// 定义按钮模块连接的引脚为A0(此处A0作为数字输入引脚使用,虽然A0是模拟引脚,但可当数字引脚用)
const int buttonPin = A0;
// setup函数:初始化设置,Arduino上电或复位后会先执行一次
void setup() {
// 设置风扇引脚为输出模式,让其能向外输出电信号控制风扇转动或停止
pinMode(motorPin, OUTPUT);
// 设置按钮引脚为输入模式,使Arduino能读取按钮的按下/未按下状态(对应电平高低)
pinMode(buttonPin, INPUT);
}
// loop函数:重复执行,Arduino主循环,setup执行完后会一直循环执行loop里的代码
void loop() {
// 读取按钮引脚的电平状态:HIGH表示未按下(默认高电平,按钮未按时引脚电平由内部上拉/外部电路决定,这里假设默认高),LOW表示按下
if (digitalRead(buttonPin) == HIGH) {
// 若按钮未按下,向风扇引脚输出高电平(1等价于HIGH),风扇获得工作电压,开始工作
digitalWrite(motorPin, 1);
} else {
// 若按钮按下,向风扇引脚输出低电平(0等价于LOW),风扇断电,停止工作
digitalWrite(motorPin, 0);
}
}
知识点:
pinMode(pin, mode)
:配置引脚模式,OUTPUT
用于输出控制(如控制风扇、LED 等),INPUT
用于读取外部信号(如按钮状态 )。digitalRead(pin)
:读取数字引脚电平,返回HIGH
(高电平,一般对应 5V 或 3.3V 等)或LOW
(低电平,一般对应 0V )。digitalWrite(pin, value)
:向数字引脚输出电平,value
为HIGH
或LOW
(也可用 1 和 0 替代 )。
(二)电位器控制电机转速(sketch_aug10b 系列 )
原始版(含拼写错误,了解逻辑流程)
// 定义电位器连接的模拟输入引脚A0,电位器可改变接入电路的电阻,进而改变引脚输入电压
const int potPin = A0;
// 定义电机连接引脚为3(支持PWM输出,用于调速,这里变量名“moterPin”是拼写错误,正确是“motorPin” )
const int moterPin = 3;
// setup函数初始化
void setup() {
// 设置电位器引脚为输入模式,读取其电压对应的模拟值
pinMode(potPin, INPUT);
// 设置电机引脚为输出模式,输出PWM信号控制电机
pinMode(moterPin, OUTPUT);
// 初始化串口通信,波特率9600,用于在串口监视器查看数据
Serial.begin(9600);
}
// 存储电位器读取值的变量
int val;
// loop函数循环执行
void loop() {
// 读取电位器的模拟值,范围0~1023(对应输入电压0~5V,不同开发板参考电压可能有差异 )
val = analogRead(potPin);
// 将0~1023的范围映射到0~255(PWM输出的有效范围,PWM占空比对应 )
val = map(val, 0, 1023, 0, 255);
// 在串口监视器打印映射后的值,方便调试观察
Serial.println(val);
// 输出PWM信号到电机引脚,控制电机转速,val越大转速越高(0对应停转,255对应最大转速 )
analogWrite(moterPin, val);
// 延迟20毫秒,降低读取和输出频率,避免数据变化太快,也给电机稳定响应时间
delay(20);
}
注释修正版(修正拼写,清晰说明 )
// 定义 potentiometer(电位器)连接的引脚为 A0(模拟输入引脚,可读取连续变化的电压值 )
const int potPin = A0;
// 定义电机(或舵机等执行器)连接的引脚为 3(支持 PWM 输出的数字引脚,用于精准调速 )
// 原代码"moterPin"为拼写错误,修正为"motorPin"
const int motorPin = 3;
// 初始化函数,Arduino上电或复位时运行一次
void setup() {
// 设置电位器引脚为输入模式,用于读取外部电压信号对应的模拟值
pinMode(potPin, INPUT);
// 设置电机引脚为输出模式,输出PWM信号控制电机转速
pinMode(motorPin, OUTPUT);
// 初始化串口通信,波特率9600,与电脑串口监视器通信
Serial.begin(9600);
}
// 定义变量用于存储读取到的电位器数值
int val;
// 主循环函数,Arduino会反复执行该函数内的代码
void loop() {
// 读取电位器的模拟值,范围0~1023(对应输入电压0~5V )
val = analogRead(potPin);
// 将0~1023的范围映射到0~255(PWM输出的有效范围,让电位器调节与电机转速范围匹配 )
val = map(val, 0, 1023, 0, 255);
// 通过串口打印映射后的值,在串口监视器查看,方便调试
Serial.println(val);
// 将映射后的值通过 PWM 信号输出到电机引脚,控制电机转速
// PWM 值越大,电机转速越高(0 对应停止,255 对应最大转速 )
analogWrite(motorPin, val);
// 延迟 20 毫秒,降低读取频率,避免数据刷新过快,也让电机转速变化更平稳
delay(20);
}
知识点:
analogRead(pin)
:读取模拟引脚的电压值,返回 0~1023 的整数,对应 0~参考电压(如 5V )。map(value, fromLow, fromHigh, toLow, toHigh)
:映射函数,将一个范围的值转换到另一个范围,这里把电位器 0~1023 映射到 PWM 可用的 0~255 。analogWrite(pin, value)
:向支持 PWM 的引脚输出占空比可变的信号,value
范围 0~255,对应占空比 0%~100% ,实现电机等设备调速。Serial.begin(baudrate)
与Serial.println(value)
:串口通信初始化和打印数据,用于调试,在 Arduino IDE 点击“工具” - “串口监视器”打开查看。
(三)循环结构练习(sketch_aug10c 系列 )
含for
和while
循环示例
// setup函数初始化
void setup() {
// 初始化串口通信,波特率9600,用于打印循环数据
Serial.begin(9600);
// for循环:初始化i为0,条件i <= 5,每次循环i自增1,循环体打印i的值
for (int i = 0; i <= 5; i++) {
// 串口打印i,每行一个,串口监视器会依次显示0、1、2、3、4、5
Serial.println(i);
}
// 打印分隔线,方便区分for和while循环的输出
Serial.println("-------------------------");
// 定义while循环的变量i,初始化为0
int i = 0;
// while循环:条件i <= 6,成立则执行循环体,否则退出
while (i <= 6) {
// 串口打印当前i的值,会依次显示0、1、2、3、4、5、6
Serial.println(i);
// 改变循环变量,i自增1,否则会陷入死循环(条件永远成立 )
i += 1;
}
}
// loop函数,这里为空,若有代码会循环执行
void loop() {
// put your main code here, to run repeatedly:
// 可在此添加需要持续执行的任务,比如不断检测传感器、控制设备等
}
简化loop
版(逻辑同上,loop
更简洁 )
void setup() {
Serial.begin(9600);
for (int i = 0; i <= 5; i++) {
Serial.println(i);
}
Serial.println("-------------------------");
int i = 0;
while (i <= 6) {
Serial.println(i);
i += 1;
}
}
// loop函数为空,不执行重复任务
void loop() {
}
for
循环流程讲解示例(带手写标记思路 )
void setup() {
Serial.begin(9600);
// for循环:初始化i为1,条件i <= 5,每次循环i自增1,打印i
for (int i = 1; i <= 5; i++) {
// 串口依次打印1、2、3、4、5
Serial.println(i);
}
// 打印分隔线
Serial.println("-------------------------");
}
// loop函数为空
void loop() {
}
// 手写内容(辅助理解:比如想象执行步骤,初始化i=1→判断i<=5→执行打印→i自增→重复直到i=6不满足条件 )
条件显示不全的for
循环示例(推测完整逻辑 )
void setup() {
Serial.begin(9600);
// for循环:初始化i为1,推测条件是i <= 5(因常见练习场景 ),每次循环i自增1,打印i
for (int i = 1; i [显示不全,推测是<= 5]; i++) {
// 串口打印i,若条件成立,会打印1、2、3、4、5
Serial.println(i);
}
// 打印分隔线
Serial.println("-------------------------");
}
// loop函数为空
void loop() {
}
知识点:
for
循环语法:for(初始化表达式; 条件表达式; 更新表达式)
,初始化循环变量,判断条件,每次循环更新变量,常用于已知循环次数的场景。while
循环语法:while(条件表达式)
,先判断条件,成立则执行循环体,需注意在循环体里更新条件变量,否则易死循环,适用于循环次数不确定,由条件控制的情况。- 变量作用域:
for
循环里定义的int i
是局部变量,作用域仅限for
循环内;后面while
循环重新定义int i
是新的局部变量,互不影响(实际编码注意合理命名,避免混淆 )。
四、综合实践与拓展
- 硬件连接实践:
- 按代码里的引脚定义,将按钮接
A0
和 GND(或对应电平电路,保证按下为低电平 )、风扇(或电机 )接引脚 3 和 GND 、电位器按“三个引脚,两边接电源和地,中间接 A0”的方式连接(具体电位器引脚不同,一般中间是信号输出 )。 - 连接好后,上传代码(Arduino IDE 点击“上传”按钮 ),在串口监视器(若涉及串口)查看数据,操作按钮、转动电位器观察设备(风扇、电机 )反应。
- 按代码里的引脚定义,将按钮接
- 拓展修改:
- 给按钮控制风扇的代码添加功能,比如长按按钮切换风扇转速(结合
for
循环或多个digitalWrite
输出不同电平组合,若风扇支持多档 )。 - 优化电位器控制电机的代码,加入转速限制,比如让电机最低转速不为 0 ,调整
map
函数的映射范围。 - 利用循环结构,让设备按特定规律工作,比如让电机先高速转 3 秒,再低速转 2 秒,循环执行(结合
delay
和analogWrite
)。
- 给按钮控制风扇的代码添加功能,比如长按按钮切换风扇转速(结合
五、总结
通过以上代码实践,你掌握了 Arduino 引脚配置(数字、模拟输入输出 )、串口通信调试、循环结构(for
/while
)、模拟信号处理与 PWM 控制等核心技能。多动手修改代码、连接不同硬件(如换成 LED 、舵机等 ),不断拓展实践,就能更熟练运用 Arduino 实现创意项目啦,比如智能小车调速、环境监测设备控制等,加油探索吧!
0 条评论
目前还没有评论...