第98-8课:使用Arduino的按钮和LED制作行走灯
本项目将向您展示如何制作一个“走马灯”,每次按下按钮时它都会前进一位。与依靠自身定时器运行的光效不同,您可以获得直接、可触控的控制:每次按下都会将点亮的LED向前移动一个位置,在最后一个LED之后会回绕到第一个。这是Arduino学习中最有用的构建模块之一,因为它教会您如何将数字输入(按钮)与循环状态机(当前点亮的是哪个LED)结合起来——这是您会不断重复使用的模式。
一旦您理解了这种模式,同样的逻辑就能驱动大量实际项目。以下是一些您可以用它构建的实用想法:
- 设备上的菜单选择器,每次按下都会高亮下一个选项。
- 用于机器或流程的顺序步骤指示器(步骤1、步骤2、步骤3……)。
- 通过按钮手动推进的分数或等级显示。
- 照明控制器的“下一频道”或“下一模式”指示器。
- 一个简单的游戏或问答蜂鸣器,玩家轮流点亮下一盏灯。
- 继电器或负载序列器,每次按下都会按顺序激活下一个输出。
与自动运行灯相比,关键优势在于控制:在您按下之前什么都不会发生,因此灯光只在您决定时前进。视频还指出,同样的切换和顺序控制思路不仅可以驱动LED,还可以驱动继电器来开关交流灯或控制电机(视频19:52处)。
硬件与元件
元件清单很短,而且成本不高:
- 一块Arduino板(Uno、Nano、Mega或任何兼容板)。
- 五个LED——5 mm或3 mm,颜色随意。
- 五个限流电阻,200 Ω到1000 Ω(视频中使用1 kΩ)。
- 一个按钮开关(瞬时轻触开关最理想)。
- 一块面包板和一些杜邦跳线。
关于LED的快速说明:阴极是较短的引脚以及带有平边的一侧,而阳极是较长的引脚(视频03:13处)。电阻值并不关键——电阻越大,LED只是越暗,因此大约300 Ω到1000 Ω之间的任何值都可以正常工作(视频05:33处)。
接线指南
接线基本上与标准的五LED走马灯相同,只是增加了一个按钮。每个LED的阳极连接到各自的Arduino引脚,每个阴极通过各自的电阻连接到面包板上共享的接地轨。在此构建中,LED连接到引脚3、4、5、6和7(视频31:37处)。按钮放置在面包板上,一只脚接地,另一只脚连接到引脚2——也就是代码用于按钮的同一个引脚(视频37:04处)。
由于代码启用了Arduino的内部上拉电阻,因此按钮不需要外部电阻。当按钮未按下时,引脚读取为HIGH;当您按下它时,引脚被拉低并读取为LOW(视频14:02处)。
代码说明
完整程序可在本文下方获取。这里我们重点介绍您实际会想要更改的部分。
在草图顶部,每个LED和按钮都分配到一个引脚。您可以在这里根据自己的接线来自定义构建:
const int pushButtonPin = 2; // push button pin
const int LED1 = 3;
const int LED2 = 4;
const int LED3 = 5;
const int LED4 = 6;
const int LED5 = 7;
int LED_ON = LED1; // which LED is currently lit
LED_ON变量是本项目的核心。它记住当前点亮的是哪个LED,初始为LED1。每次按下按钮时,代码都会将LED_ON推进到序列中的下一个LED,并关闭前一个LED,因此同一时间始终只有一个LED点亮。
每次按下后还有一个小延迟:
delay(200); // debounce / give the user time between presses
这200 毫秒的暂停可防止一次物理按下被记录为多次按下。如果您的手指抖动,或者按钮感觉过于灵敏,请增大此数值;如果您想要更快响应,请减小它。请注意,将其设置得太低可能会导致灯光意外跳进(视频41:20处)。
主要逻辑位于 loop() 中。它读取按钮,只有当按钮被按下(读取为 LOW)时,才会推进灯光。该序列使用一连串 if / else if 检查,从 LED1 移动到 LED2 再到 LED3,依此类推,并在最后一个之后回绕到 LED1。如果你想改变方向或 LED 的顺序,这就是需要编辑的代码块 — 只需重新分配哪个引脚跟随哪个引脚。
实时项目与演示
上传代码后,按下按钮会点亮第一个 LED;松开按钮会让该 LED 保持点亮。下一次按下会将灯光移动到第二个 LED,然后是第三个、第四个和第五个,再下一次按下会回到第一个 — 形成连续旋转(视频中 40:22 处)。
200 毫秒延迟的一个不错副作用是,如果你按住按钮,灯光会每 200 毫秒自行继续推进,实际上在按钮被按住时将项目变成自动走灯(视频中 42:07 处)。松开按钮,它就会停在当前 LED 上。这让你可以用一个按钮同时实现手动步进和免手操作运行。
如果你更希望灯光完全不需要按钮就自动运行,那是另一个独立项目。自动版本已在 第 98-7 课:使用 Arduino 和 5 个 LED 的走灯 中介绍。
本视频中的相关项目
- 第 98-1 课:如何使用 Arduino 打开和关闭 LED
- 第 98-2 课:如何使用 Arduino 和按钮打开和关闭 LED
- 第 98-3 课:如何使用 Arduino 和按钮打开/关闭切换 LED
- 第 98-4 课:使用 Arduino 让 LED 灯渐隐:亮度控制
- 第 98-5 课:使用 Arduino 在按下按钮时让灯光渐隐
- 第 98-6 课:使用 Arduino 的跷跷板 LED 游戏
- 第 98-7 课:使用 Arduino 和 5 个 LED 的走灯
- 第 98-9 课:使用 Arduino 的 LED 电压电平表或使用电位器的走灯
- 第 98-10 课:Arduino 交通灯
章节
- [00:00] 10 个 Arduino LED 项目概述
- [01:22] Arduino 分步课程介绍
- [02:29] 理解 LED:符号、极性和引脚
- [03:49] 计算 LED 限流电阻
- [30:47] 使用 5 个 LED 的走灯:接线和原理
- [32:52] 走灯代码:引脚、时序和循环
- [36:41] 使用按钮推进灯光
- [37:44] 使用按钮的走灯:代码讲解
- [40:22] 演示和调整按下延迟
- [57:16] 结束语和课程结尾
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