STEM学习平台团队 bio photo

Email

Zhihu

Bilibili

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
    }
    
  • 执行流程

    1. 检测括号内的条件表达式
    2. 若为真(true),执行代码块A
    3. 若为假(false),执行代码块B

硬件连接说明

1. 标准按钮电路(需外接元件)

         +5V
          │
          ▼
      10kΩ电阻(上拉)
          │
按钮 → 12号引脚
          │
          ▼
         GND

2. LED连接方式

13号引脚 → 220Ω电阻 → LED正极(长脚)
LED负极(短脚) → GND

3. 内部上拉模式(简化接线)//下次内容,这次仅了解

pinMode(12, INPUT_PULLUP); // 替代INPUT模式
  • 按钮直接连接引脚与GND即可,无需外接电阻

关键问题解析

Q1:按钮按下时LED不亮

  • 排查步骤
    1. 确认按钮连接方式正确(引脚与GND之间)
    2. 检查是否使用上拉电阻或启用内部上拉
    3. 用万用表测量按钮按下时引脚电压

Q2:LED状态不稳定(随机闪烁)

  • 原因:按钮抖动
  • 解决方案

    if (digitalRead(12) == HIGH) {
      delay(50);                // 防抖延时
      if (digitalRead(12) == HIGH) { // 二次确认
        digitalWrite(13, HIGH);
      }
    }
    

Q3:如何实现按一次切换状态?//请看下一文

扩展实验

实验:蜂鸣器发报机

不需要对程序做任何改变,只需要把LED灯换成蜂鸣器即可(因为这两个元件的使用方式是一样的)

总结

本程序实现了通过数字输入控制LED亮灭的基础交互,涉及以下核心知识点:

  1. 输入/输出模式配置
  2. 数字信号读取与写入
  3. 条件判断逻辑
  4. 硬件电路设计原则

有问题找柯萌૮₍♡>𖥦<₎ა
mingyoufhh@outlook.com