搜索代码

第98-2课:如何使用Arduino通过按钮控制LED的开关

第98-2课:如何使用Arduino通过按钮控制LED的开关

本项目向你展示如何使用 Arduino 通过按钮控制 LED。与其让 LED 自行闪烁,不如由你来决定它何时亮起:按住按钮,LED 点亮;松开按钮,LED 熄灭。这是继简单的闪烁示例之后自然而然的一步,因为它引入了几乎每个 Arduino 项目都会用到的两个概念 —— 读取数字输入,并在代码中利用该输入做出判断。

第98课的所有项目、面包板和元件
第98课的所有项目、面包板和元件

这里真正的价值在于了解微控制器如何感知物理世界。按钮是最简单的人机输入设备,但同样的模式 —— 读取输入、判断条件、驱动输出 —— 正是你读取 3D 打印机限位开关、检测安防系统门被打开,或从控制面板启动电机的方式。一旦你理解了这一个电路,你几乎可以把 LED 换成任何东西。

以下是使用相同技术可以构建的一些实用项目:

  • 一个瞬时门铃或呼叫按钮,按下时点亮一盏灯。
  • 一个“死人开关”,仅在按钮被按住时保持继电器(及其供电的设备)通电。
  • 机器的手动测试按钮,其中指示灯 LED 确认输入已被记录。
  • 电机驱动器或水泵的启动按钮,LED 充当状态灯。
  • 一个简单的游戏抢答器,第一个按下按钮的玩家获胜,LED 宣布赢家。
  • 传感器项目上的校准或“学习”按钮,在模式激活时点亮。

硬件与元件

元件清单刻意保持精简,这也是它成为优秀入门输入项目的原因:

  • 一块 Arduino 板 —— Uno、Nano、Mega 或任何兼容板。
  • 一个 LED,5 mm 或 3 mm 均可,颜色不限。
  • 一个用于 LED 的电阻,阻值在 200 Ω 到 1000 Ω 之间。
  • 一个瞬时按钮开关。
  • 一块面包板和若干杜邦跳线。
5mm 琥珀色 LED
5mm 琥珀色 LED

如果你想知道为什么需要电阻,文字记录中讲解了计算过程(视频 03:49 处)。典型 LED 自身压降约为 2 V,需要约 10 mA 电流。在 5 V 电源下,剩余 3 V 必须由电阻承担,因此欧姆定律给出 R = 3 V / 0.01 A = 300 Ω。从 300 Ω 到约 1000 Ω 之间的任何值都可以 —— 阻值越高,LED 越暗,但更安全、更高效。电流并不关键;你只是用亮度换取更低的电流消耗。

接线指南

带按钮开关的 LED Arduino 原理图
带按钮开关的 LED Arduino 原理图
带按钮开关的 LED Arduino 接线图
带按钮开关的 LED Arduino 接线图

该电路与闪烁示例中使用的 LED 电路相同,只是增加了一个按钮。LED 的阳极(较长的一脚)通过电阻连接到 Arduino 引脚 3,阴极(较短的一脚,塑料边缘的平面一侧为标记)连接到地。按钮连接在引脚 2 和地之间。

有一个值得了解的细节:按钮有四个引脚,但它们在内部是成对的。其中两个引脚彼此永久连接,另外两个引脚也彼此永久连接 —— 按下按钮会桥接这两对引脚。如果你有万用表,请使用其通断(蜂鸣)模式找出按钮未按下时已经连接的两个引脚;这两个引脚是你不应使用的一对。从两个独立对中各选一个引脚(视频 07:50 处)。

330 欧姆电阻
330 欧姆电阻

代码如何工作

该示例很短,而且几乎全部都是你可以调整的配置。顶部三行才是你实际会修改的内容:

const int pushButtonPin = 2;//define a pin number for push button
const int LEDPin = 3;//define a pin that is connected to LED
const int delayLED = 0;//how long the LED should stay ON

pushButtonPin 是按钮所连接的数字引脚。如果你把按钮移到其他引脚,请修改此项 —— 只要记得同时移动实际导线以匹配即可。

LEDPin 是驱动 LED 的引脚。任何数字引脚都可以,但请记住引脚 0 和 1 用于串行连接,因此最好避免使用它们。

delayLED 是最有趣的设置。它控制松开按钮后 LED 保持点亮的时长,以毫秒为单位。将其设置为 0 意味着你抬起手指的瞬间 LED 就会熄灭。将其设置为 1000 会让 LED 在松开后持续点亮整整一秒,而 5000 会让它保持点亮五秒(视频 16:31 处)。这一个数字完全改变了这个项目的手感,也是观察代码中的变量如何直接转化为你能看到的行为的好方法。

设置中还有另外两点值得注意。首先,按钮引脚配置为 INPUT_PULLUP 而不是普通的 INPUT

pinMode(pushButtonPin, INPUT_PULLUP);//define a pin for push button switch

这会启用 Arduino 的内部上拉电阻,在按钮未按下时将引脚保持在稳定的高电平。如果没有它,悬空的输入引脚会拾取杂散的电噪声并给出随机读数,你就需要外接一个电阻来解决。启用内部上拉后,接线保持简单:按钮的一端接引脚,另一端接地。当你按下按钮时,引脚被拉低到地并读取为低电平(视频 14:08 处)。

其次,串口监视器以 9600 波特率启动,这样你就可以实时观察状态变化:

Serial.begin(9600);//initialize the serial monitor
Serial.println("Robojax LED with push button");//print this text on Serial Monitor

在主循环中,逻辑就是一个简单的 if/else。代码读取按钮引脚并将其与 LOW 进行比较。如果按钮被按下,LED 引脚变为高电平,打印消息“LED ON”,然后程序等待 delayLED 毫秒。如果按钮未被按下,LED 引脚变为低电平,LED 熄灭。由于 loop() 会反复运行,这个检查每秒发生数千次,所以响应感觉是即时的。

现场演示

delayLED 设置为 1000 时,按下按钮会点亮 LED,并且在你松开后它还会保持点亮一秒。将该值降到 5000,LED 会持续五秒——长到你可以从按钮旁走开还能看到它亮着。将其设置为 0,LED 就会完全跟随你的手指:按下,亮;松开,灭(视频 17:02 处)。

代码上传后,你可以将 Arduino 从 USB 断开,用电池或 5 V 适配器供电。这块板子不需要电脑就能运行——程序存储在其内存中,每次通电时都会自动启动(视频 12:27 处)。

如果你更希望 LED 在按一次后保持点亮,并在下一次按下时熄灭,那是另一种称为切换的行为,已在 第 98-3 课:如何使用 Arduino 和按钮开关切换 LED 的开/关 中介绍。按钮接线完全相同,所以你可以复用这个完全相同的电路。

本视频中的相关项目

章节

  • [00:00] 本视频中 10 个项目的概述
  • [01:00] Arduino 分步课程介绍
  • [02:29] 什么是 LED:符号、阳极、阴极和物理形状
  • [03:49] 用欧姆定律计算 LED 电阻
  • [07:32] 在面包板上连接 LED 和按钮
  • [08:50] 解释代码:引脚、设置和主循环
  • [12:43] 按钮开关的工作原理
  • [13:22] 将按钮连接到引脚 2 和地
  • [13:43] 代码讲解:INPUT_PULLUP 和读取按钮
  • [16:14] 演示:将 delayLED 从 1 秒改为 5 秒再改为 0
  • [19:52] 按钮切换的实际应用

图像

2 pin tactile push button switch
2 pin tactile push button switch
Arduino wiring for LED  with resistor
Arduino wiring for LED with resistor
Arduino schematic for LED
Arduino schematic for LED
Arduino wiring for LED with a push button switch
Arduino wiring for LED with a push button switch
Arduino schematic for LED with a push button switch
Arduino schematic for LED with a push button switch
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
第98课所有项目,面包板和元件
第98课所有项目,面包板和元件
第98课所有项目,面包板和元件
第98课所有项目,面包板和元件
LED-5mm-amber
LED-5mm-amber
934-Lessson 98-LED-2: Arduino code push button to turn LED ON and OFF
语言: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

文件📁

Arduino 库(zip 格式)

用户手册