4431| 0
|
[教程] 第5课 小按钮 大用处 |
本帖最后由 dafeng388 于 2019-11-9 20:20 编辑 第五课 小按钮 大用处 星火课程团队 欢迎来到树莓派课堂。今天我们以生活中常见的按钮为例,来尝试使用按钮控制LED灯,让小灯乖乖听话,想怎么亮就怎么亮。 知识点: 1. 认识按钮 2. 数字信号的获取方法 3. 程序分支结构 生活中按钮绝对是无处不在。键盘、手机、汽车、遥控器、洗衣机、电灯……都由各式的按钮来控制设备的运转。由此可见按钮虽小,它的应用范围却是非常之广泛。 ![]() 众多的按钮其实可大致划分为两大类,轻触按钮和自锁按钮。 本节课我们用两个小案例来体验这两类按钮的妙用。 案例1.当按钮按下时,LED灯亮,当按钮松开时,LED灯灭(轻触按钮) 案例2.按钮按一下,LED灯亮,再按一下,LED灯灭(自锁按钮) 硬件连接: 树莓派主板 古德微扩展板 LED灯一盏 按钮一个 1.认识按钮 我们先来认识一下今天要使用的按钮,它与你平日见到的按钮有什么不同? ![]() 对,它有三个针脚,在针脚的附近标有字母,分别是VCC、OUT、GND。它们分别链接正极、信号线和负极。 ![]() 我们再来看扩展板, ![]() 扩展板上有GPIO 25号,左右两侧是正负极,与按钮针脚排列一致,我们将按钮插在这里。 2. 数字信号的获取方法 对于不同类型的按钮不知道其内部电路时,可以进行检测获得其按下弹起对应高低电平后再使用。登录古德微网站平台,“智能硬件常用”模块中找到获取按钮检测结果的积木。 ![]() 我们将积木拖到脚本区,因为这块积木无法独立运行,因此还需要借助 ![]() 去掉文本,将获取按钮检测结果积木嵌套在输出调试信息积木中。 ![]() 目前的程序只执行一次,我们使用循环命令让其持续监测。 ![]() 因为在按钮的操作中,可能会出现抖动,这是由按钮的机械特性所决定的,一般为5ms~10ms。这是一个很重要的时间参数,按钮抖动会引起一次按钮被误读多次。我们一般用延时去除抖动。当然即使没有按钮抖动,程序循环时一般也需要设置间隔时间的。这里我们添加上等待0.1秒。 按钮有两种状态,按下和弹起。现在我们打开日志显示区,运行程序,当按下按钮,输出的信息是1,松开按钮输出的结果为0。 (课件)通过观察我们发现按钮状态只有两个:1和0。1表示检测到按钮被按下,0表示按钮弹起。 ![]() 3.程序分支结构 程序分支结构,它常用于需要先条件判断再执行的场景。根据传感器的不同状态来执行不同的程序代码,比如要实现案例一(流程图+视频)当按钮被按下时,LED亮,松开时,LED灭。程序根据按钮的不同状态决定是否点亮LED灯。按钮属于数字模块,当按下时输出高电平,松开时输出低电平。那输出的高低电平状态便是分支语句条件判断的内容。 ![]() 编写程序: 明白了上述两个知识点,我们就可以编写程序了。 “条件”模块中,拖拽一个新的积木“如果——否则”积木到脚本区。 ![]() LED灯连接到扩展板5号GPIO上。那么也就是说当检测到按钮按下时,5号灯亮,否则灭。按照这个思路,我们将如果后面的条件设为:获取25号按钮检测结果的积木。 ![]() 如果检测到按钮被按下,就执行 ![]() 否则就执行 ![]() 因为程序需要不断的执行,我们才能有效控制灯的亮灭,所以添加循环命令,也可以使用上节课讲得计数循环来实现。 ![]() 上传程序看一下效果。(视频)“按下亮,松开灭”这属于按钮分类中的“轻触按钮”。 接下里我们再实现案例二“按一下亮,再按一下灭”自锁按钮的效果。 按钮的默认状态是松开,处于低电平状态,输出0。只有按下时才对应的是高电平,输出1。这样来看,按钮绝大部分时间的状态处于低电平0,我们可以通过按下按钮这个动作控制灯的亮灭。 当按钮状态检测到是1时,就改变5号GPIO的信号状态,同时也改变了LED灯的通电状态,实现了“按一下亮,再按一下灭”的效果。如何用程序来实现呢? 首先,建立变量,重新命名变量为“按钮状态”, ![]() 将获取25号按钮检测结构的积木赋值给变量按钮状态,如果监测按钮状态=1,那么就执行信号反转,即改变LED灯的亮灭状态。 ![]() ![]() 添加循环积木持续程序的运行。 ![]() 上传程序看一下效果。(视频) 知识梳理: 最后我们一起来梳理一下本节课的知识点。数字信号的获取和程序分支结构。首先数字信号的获取可以直接使用“获取按钮检测结果”这块积木来完成,积木检测到高或低的两种电平状态;其次是程序分支结构,“如果 执行 否则”如果后跟的是条件判断语句,根据25号管脚返回的电平状态,来判断按键是否被按下,进而呢向5号管脚输出对应的电平状态来控制LED灯的亮灭。程序分支结构与我们前几节课的顺序结构不同,程序的代码并非全部执行,而是根据条件判断的成立与否来进行有选择的执行。程序分支结构的引入呢,让程序与传感器实现了更丰富的动态交互,极大的提高了树莓派硬件的可玩度。 最后我们拓展一个小知识,前两节课我们说了全局变量和局部变量,那么有人会疑问:什么是变量,它究竟有什么作用?这里说一下变量和常量的概念。变量相对的是常量,都是数据存在的形式。常量用来表示确定的数值或内容,例如1、2、3这些都是固定的,不变的,就是常量。变量只能存储一个值,它用来表示变化的数值或内容。变量就像放置物品的盒子,盒子里可以放食物,也可以放工具,无论是食物还是工具,但盒子里一次只能放一个,打开盒子,你只能看到最后放进去的数值或内容。这回你明白了吗? 那么对于本节课按钮控制灯的案例你还可以做出哪些效果呢?期待你的精彩分享。 这节到这里,下期再见。 [size=18.6667px]课程由星火课程团队制作,版权归杭州古德微机器人有限公司所有。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed