Arduino 基础入门教程:按钮控制LED程序解析
本实验目标:完成一个按钮控制灯的亮灭程序
目标分析:为了完成这个实验,我们首先对于它进行系统化的分析
传感器:按钮 控制器:UNO/ESP32 执行器:LED灯
接着是效果分析
有一个按钮,有一个小灯,当按钮按下时小灯亮,松开时小灯灭。
明确目标系统,开始正式学习—
代码全文
void setup() { //初始化函数
pinMode(12, INPUT); // 设置12号引脚为输入模式
pinMode(13, OUTPUT); // 设置13号引脚为输出模式
}
void loop() { //重复执行函数
if (digitalRead(12) == HIGH) { // if语句-检测12号引脚电平状态
digitalWrite(13, HIGH); // 输出高电平点亮LED
} else { //else-如果if为假则执行
digitalWrite(13, LOW); // 输出低电平熄灭LED
}
}
代码逐行解析
1. void setup() { ... }
- 功能:Arduino开发板启动时执行一次,用于初始化设置。
- 详细说明:
pinMode(12, INPUT):pinMode:设置引脚工作模式的函数12:目标引脚编号(物理接口位置)INPUT:输入模式(用于接收外部信号)
pinMode(13, OUTPUT):OUTPUT:输出模式(用于控制外部设备)
2. void loop() { ... }
- 功能:在
setup()后无限循环执行,实现核心控制逻辑。
关键代码解析:
行1:if (digitalRead(12) == HIGH) {
digitalRead(12):读取12号引脚的电压状态digitalRead:数字信号读取函数12:目标引脚编号
== HIGH:判断条件是否成立HIGH:高电平(5V或3.3V,取决于开发板)- 当按钮按下时(假设按钮连接正确),引脚检测到高电平
行2:digitalWrite(13, HIGH);
- 当条件成立时执行:向13号引脚输出高电平,LED亮起
行3:} else {
- 条件不成立时的备用分支:即当
digitalRead(12)为LOW时
行4:digitalWrite(13, LOW);
- 执行备用操作:向13号引脚输出低电平,LED熄灭
核心概念详解
1. 输入模式(INPUT)
- 功能:使引脚处于信号接收状态
- 典型应用:
- 读取按钮状态
- 检测传感器信号(如红外、声音传感器)
- 硬件要求:
- 需外接上拉/下拉电阻(或使用内部上拉)
- 示例电路:按钮一端接引脚,另一端接地(需上拉电阻)
2. 数字信号读取(digitalRead)
-
工作原理:
引脚电压范围 返回值 > 3V(5V系统) HIGH < 1.5V(5V系统) LOW -
注意事项:
- 未连接的输入引脚可能处于”浮空”状态(随机返回HIGH/LOW)
3. 条件判断(if-else)
-
逻辑结构:
if (条件成立) { 执行代码块A } else { 执行代码块B } -
执行流程:
- 检测括号内的条件表达式
- 若为真(true),执行代码块A
- 若为假(false),执行代码块B
硬件连接说明
1. 标准按钮电路(需外接元件)
+5V
│
▼
10kΩ电阻(上拉)
│
按钮 → 12号引脚
│
▼
GND
2. LED连接方式
13号引脚 → 220Ω电阻 → LED正极(长脚)
LED负极(短脚) → GND
3. 内部上拉模式(简化接线)//下次内容,这次仅了解
pinMode(12, INPUT_PULLUP); // 替代INPUT模式
- 按钮直接连接引脚与GND即可,无需外接电阻
关键问题解析
Q1:按钮按下时LED不亮
- 排查步骤:
- 确认按钮连接方式正确(引脚与GND之间)
- 检查是否使用上拉电阻或启用内部上拉
- 用万用表测量按钮按下时引脚电压
Q2:LED状态不稳定(随机闪烁)
- 原因:按钮抖动
-
解决方案:
if (digitalRead(12) == HIGH) { delay(50); // 防抖延时 if (digitalRead(12) == HIGH) { // 二次确认 digitalWrite(13, HIGH); } }
Q3:如何实现按一次切换状态?//请看下一文
扩展实验
实验:蜂鸣器发报机
不需要对程序做任何改变,只需要把LED灯换成蜂鸣器即可(因为这两个元件的使用方式是一样的)
总结
本程序实现了通过数字输入控制LED亮灭的基础交互,涉及以下核心知识点:
- 输入/输出模式配置
- 数字信号读取与写入
- 条件判断逻辑
- 硬件电路设计原则
有问题找柯萌૮₍♡>𖥦<₎ა
mingyoufhh@outlook.com