3649浏览
查看: 3649|回复: 0

[教程] 第5课 小按钮 大用处

[复制链接]
本帖最后由 dafeng388 于 2019-11-9 20:20 编辑

小按钮 大用处

星火课程团队
欢迎来到树莓派课堂。今天我们以生活中常见的按钮为例,来尝试使用按钮控制LED灯,让小灯乖乖听话,想怎么亮就怎么亮。
知识点:
1. 认识按钮
2. 数字信号的获取方法
3. 程序分支结构
生活中按钮绝对是无处不在。键盘、手机、汽车、遥控器、洗衣机、电灯……都由各式的按钮来控制设备的运转。由此可见按钮虽小,它的应用范围却是非常之广泛。


第5课 小按钮 大用处图1


众多按钮其实可大致划分为两大类,轻触按钮和自锁按钮。
本节课我们用两个小案例来体验这两类按钮的妙用。
案例1.当按钮按下时,LED灯亮,当按钮松开时,LED灯灭(轻触按钮)
案例2.按钮按一下LED灯亮,再按一下LED灯灭(自锁按钮)
硬件连接:
树莓派主板  古德微扩展板 LED灯一盏 按钮一个  
1.认识按钮
我们先来认识一下今天要使用的按钮,它与你平日见到的按钮有什么不同?
第5课 小按钮 大用处图2

对,它有三个针脚,在针脚的附近标有字母,分别是VCC、OUT、GND。它们分别链接正极、信号线和负极。

第5课 小按钮 大用处图3

我们再来看扩展板,

第5课 小按钮 大用处图4
扩展板上有GPIO  25号,左右两侧是正负极,与按钮针脚排列一致,我们将按钮插在这里。
2. 数字信号的获取方法
对于不同类型的按钮不知道其内部电路时,可以进行检测获得其按下弹起对应高低电平后再使用。登录古德微网站平台“智能硬件常用”模块中找到获取按钮检测结果的积木。
第5课 小按钮 大用处图5

我们将积木拖到脚本区,因为这块积木无法独立运行,因此还需要借助
第5课 小按钮 大用处图6这块积木的帮助。
去掉文本,将获取按钮检测结果积木嵌套在输出调试信息积木中。
第5课 小按钮 大用处图7

目前的程序只执行一次,我们使用循环命令让其持续监测。

第5课 小按钮 大用处图8
因为在按钮的操作中,可能会出现抖动,这是由按钮的机械特性所决定的,一般为5ms~10ms。这是一个很重要的时间参数,按钮抖动会引起一次按钮被误读多次。我们一般用延时去除抖动。当然即使没有按钮抖动,程序循环时一般也需要设置间隔时间的。这里我们添加上等待0.1秒。
按钮有两种状态,按下和弹起。现在我们打开日志显示区,运行程序,当按下按钮,输出的信息是1,松开按钮输出的结果为0。
(课件)通过观察我们发现按钮状态只有两个1和0。1表示检测到按钮被按下,0表示按钮弹起。

第5课 小按钮 大用处图9

3.程序分支结构
程序分支结构,它常用于需要先条件判断再执行的场景。根据传感器的不同状态来执行不同的程序代码,比如要实现案例一(流程图+视频)当按钮被按下时,LED亮,松开时,LED灭。程序根据按钮的不同状态决定是否点亮LED灯。按钮属于数字模块,当按下时输出高电平,松开时输出低电平。那输出的高低电平状态便是分支语句条件判断的内容。
第5课 小按钮 大用处图10

编写程序:
明白了上述两个知识点,我们就可以编写程序了。
“条件”模块中,拖拽一个新的积木“如果——否则”积木到脚本区。
第5课 小按钮 大用处图11

LED灯连接到扩展板5号GPIO上。那么也就是说当检测到按钮按下时,5号灯亮,否则灭。按照这个思路,我们将如果后面的条件设为:获取25号按钮检测结果的积木。
第5课 小按钮 大用处图12

如果检测到按钮被按下,就执行
第5课 小按钮 大用处图13

否则就执行
第5课 小按钮 大用处图14

因为程序需要不断的执行,我们才能有效控制灯的亮灭,所以添加循环命令,也可以使用上节课讲得计数循环来实现。
第5课 小按钮 大用处图15

上传程序看一下效果。(视频)“按下亮,松开灭”这属于按钮分类中的“轻触按钮”。
接下里我们再实现案例二“按一下亮,再按一下灭”自锁按钮的效果。
按钮的默认状态是松开,处于低电平状态,输出0。只有按下时才对应的是高电平,输出1。这样来看,按钮绝大部分时间的状态处于低电平0,我们可以通过按下按钮这个动作控制灯的亮灭。
当按钮状态检测到是1时,就改变5号GPIO的信号状态,同时也改变了LED灯的通电状态,实现了“按一下亮,再按一下灭”的效果。如何用程序来实现呢?
首先,建立变量,重新命名变量为“按钮状态”, 第5课 小按钮 大用处图16
将获取25号按钮检测结构的积木赋值给变量按钮状态,如果监测按钮状态=1,那么就执行信号反转,即改变LED灯的亮灭状态。

第5课 小按钮 大用处图17
第5课 小按钮 大用处图18
添加循环积木持续程序的运行。
第5课 小按钮 大用处图19
上传程序看一下效果。(视频)
知识梳理:
最后我们一起来梳理一下本节课的知识点。数字信号的获取和程序分支结构。首先数字信号的获取可以直接使用“获取按钮检测结果”这块积木来完成,积木检测到高或低的两种电平状态;其次是程序分支结构,“如果 执行 否则”如果后跟的是条件判断语句,根据25号管脚返回的电平状态,来判断按键是否被按下,进而呢向5号管脚输出对应的电平状态来控制LED灯的亮灭。程序分支结构与我们前几节课的顺序结构不同,程序的代码并非全部执行,而是根据条件判断的成立与否来进行有选择的执行。程序分支结构的引入呢,让程序与传感器实现了更丰富的动态交互,极大的提高了树莓派硬件的可玩度。
最后我们拓展一个小知识,前两节课我们说了全局变量和局部变量,那么有人会疑问:什么是变量,它究竟有什么作用?这里说一下变量和常量的概念。变量相对的是常量,都是数据存在的形式。常量用来表示确定的数值或内容,例如1、2、3这些都是固定的,不变的,就是常量。变量只能存储一个值,它用来表示变化的数值或内容。变量就像放置物品的盒子,盒子里可以放食物,也可以放工具,无论是食物还是工具,但盒子里一次只能放一个,打开盒子,你只能看到最后放进去的数值或内容。这回你明白了吗?
那么对于本节课按钮控制灯的案例你还可以做出哪些效果呢?期待你的精彩分享。
这节到这里,下期再见。
[size=18.6667px]课程由星火课程团队制作,版权归杭州古德微机器人有限公司所有。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail