第98-2课:如何使用Arduino通过按钮控制LED的开关
本项目向你展示如何使用 Arduino 通过按钮控制 LED。与其让 LED 自行闪烁,不如由你来决定它何时亮起:按住按钮,LED 点亮;松开按钮,LED 熄灭。这是继简单的闪烁示例之后自然而然的一步,因为它引入了几乎每个 Arduino 项目都会用到的两个概念 —— 读取数字输入,并在代码中利用该输入做出判断。
这里真正的价值在于了解微控制器如何感知物理世界。按钮是最简单的人机输入设备,但同样的模式 —— 读取输入、判断条件、驱动输出 —— 正是你读取 3D 打印机限位开关、检测安防系统门被打开,或从控制面板启动电机的方式。一旦你理解了这一个电路,你几乎可以把 LED 换成任何东西。
以下是使用相同技术可以构建的一些实用项目:
- 一个瞬时门铃或呼叫按钮,按下时点亮一盏灯。
- 一个“死人开关”,仅在按钮被按住时保持继电器(及其供电的设备)通电。
- 机器的手动测试按钮,其中指示灯 LED 确认输入已被记录。
- 电机驱动器或水泵的启动按钮,LED 充当状态灯。
- 一个简单的游戏抢答器,第一个按下按钮的玩家获胜,LED 宣布赢家。
- 传感器项目上的校准或“学习”按钮,在模式激活时点亮。
硬件与元件
元件清单刻意保持精简,这也是它成为优秀入门输入项目的原因:
- 一块 Arduino 板 —— Uno、Nano、Mega 或任何兼容板。
- 一个 LED,5 mm 或 3 mm 均可,颜色不限。
- 一个用于 LED 的电阻,阻值在 200 Ω 到 1000 Ω 之间。
- 一个瞬时按钮开关。
- 一块面包板和若干杜邦跳线。
如果你想知道为什么需要电阻,文字记录中讲解了计算过程(视频 03:49 处)。典型 LED 自身压降约为 2 V,需要约 10 mA 电流。在 5 V 电源下,剩余 3 V 必须由电阻承担,因此欧姆定律给出 R = 3 V / 0.01 A = 300 Ω。从 300 Ω 到约 1000 Ω 之间的任何值都可以 —— 阻值越高,LED 越暗,但更安全、更高效。电流并不关键;你只是用亮度换取更低的电流消耗。
接线指南
该电路与闪烁示例中使用的 LED 电路相同,只是增加了一个按钮。LED 的阳极(较长的一脚)通过电阻连接到 Arduino 引脚 3,阴极(较短的一脚,塑料边缘的平面一侧为标记)连接到地。按钮连接在引脚 2 和地之间。
有一个值得了解的细节:按钮有四个引脚,但它们在内部是成对的。其中两个引脚彼此永久连接,另外两个引脚也彼此永久连接 —— 按下按钮会桥接这两对引脚。如果你有万用表,请使用其通断(蜂鸣)模式找出按钮未按下时已经连接的两个引脚;这两个引脚是你不应使用的一对。从两个独立对中各选一个引脚(视频 07:50 处)。
代码如何工作
该示例很短,而且几乎全部都是你可以调整的配置。顶部三行才是你实际会修改的内容:
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 的开/关 中介绍。按钮接线完全相同,所以你可以复用这个完全相同的电路。
本视频中的相关项目
- 第 98-1 课:如何使用 Arduino 打开和关闭 LED
- 第 98-3 课:如何使用 Arduino 和按钮开关切换 LED 的开/关
- 第 98-4 课:使用 Arduino 让 LED 灯渐隐:亮度控制
- 第 98-5 课:使用 Arduino 在按下按钮时让灯光渐隐
- 第 98-6 课:使用 Arduino 的跷跷板 LED 游戏
- 第 98-7 课:使用 Arduino 和 5 个 LED 的流水灯
- 第 98-8 课:使用 Arduino 的按钮和 LED 流水灯
- 第 98-9 课:使用 Arduino 的 LED 电压电平表或使用电位器的流水灯
- 第 98-10 课:Arduino 交通灯
章节
- [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] 按钮切换的实际应用
This code has not been parsed yet. Please return to the admin panel to parse it.
|||您可能需要的东西
-
亚马逊SunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
亚马逊
-
亚马逊
资源与参考
-
文档SunFounder 3合1物联网/智能车/学习套件的文档docs.sunfounder.com
文件📁
Arduino 库(zip 格式)
-
SunFounder 的 3 合 1 智能汽车学习套件源代码
3in1-kit-main-v2.zip12.80 MB
用户手册
-
SunFounder 3合1 Arduino智能车组装手册本文档逐步展示SunFounder 3合1 Arduino智能车的组装过程
SunFounder_car_assembly_manual.pdf1.20 MB