APP下载

蓝桥杯树莓派模拟题解析三:“电子测距仪”

2021-07-27牟晓东

电脑报 2021年6期
关键词:数码管分支超声波

牟晓东

本文以模拟题“电子测距仪”为例,进行题目解析。

第三题“电子测距仪”(难度系数3,25个计分点):

在日常生活中,我们经常会需要测量距离,电子测距仪作为一种测距设备,可以很方便地帮助我们测出距离,现制作一个简易的电子测距仪。

硬件准备:

1个按键模块【接入25#引脚】,1个数码管【接入IIC接口】,1个超声波传感器【接入超声波专用接口】,杜邦线若干。

编程实现:

(1)程序开始时,数码管没有显示;

(2)当按键按下并且按住时,数码管显示当前设备测试的距离值(只显示整数部分),测量显示的距离范围为2-400cm;

(3)当测量到的距离大于400或者小于2cm时,数码管显示4个0;

(4)当按键松开时,数码管不显示;

(5)如此循环。

判断标准:

3分:实现“编程实现”中的(1);

5分:实现“编程实现”中的(2);

7分:实现“编程实现”中的(3);

5分:实现“编程实现”中的(4);

5分:完全符合题意。

1.审题

“电子测距仪”的关键考点是使用分支选择结构的嵌套,将超声波传感器检测到的不同范围距离值在数码管上进行显示;另外,还必须要特别注意数码管的使用前设置(如先关闭再调节亮度等),以及如何单独控制各个数字位的数据显示。

(1)通常使用的HC-SR04超声波传感器的有效测距范围为2-400cm,数码管则最多可显示四位数字;因此,题目中的要求(2)其实也只是使用了右侧的1号、2号和3号低位数码管,最左侧的0号是处于“空闲”状态。

(2)超声波传感器进行测距的返回值为9位小数,必须在输出至数码管显示前进行“取整”操作;还要将这个三位数进行百位、十位和个位的逐一“分解”,分别输出至数码管的1号、2号、3号,这步操作是该题的难点,需要使用数学中的“除法”和“取余数”相结合的操作方法来实现。

(3)按键的编程控制部分需要使用“获取25号按钮检测结果”语句,其返回结果为0和1,分别对应“松开”和“按下”两种状态。

2.实验器材的安装

按照题目要求,将按键模块接入25号的三个引脚;超声波传感器有四个引脚,接入专用接口(扩展板的20和21号);将数码管的四个引脚(VCC、GND、SCL和SDA)接入IIC接口(Up列);最后,给树莓派接通电源,启动操作系统(如图1)。

3.编程实现“电子测距仪”

(1)进入平台编程环境

访问古德微机器人平台(www.gdwrobot.cn)。

(2)数码管的“预处理”

数码管在调用前必须要先进行“关闭”的操作,而且题目(4)也明确有“按键松开时不显示”的要求;由于数码管的关闭需要逐个进行,为减少代码数量,此时应该考虑建立函数“关闭数码管”,顺序关闭0-3号数码管。同时,在程序开始调用该函数后,添加一条“设置0号数码管的亮度为1”语句。

(3)构建“外层”分支选择结构

建立变量“按键”,为其赋值为“获取25号按钮检测结果”;接着建立“如果…执行…否则…”分支选择结构,对变量“按键”的值是否为1进行判断,是的话表示为“按下”状态,准备实现题目中(2)和(3)的要求;否的话(值为0),关闭数码管显示,实现题目中(4)的要求。

(4)构建“内层”分支选择结构

如果判断按键为“按下”的状态,则建立变量“距离”,赋值为“超声波测距”,并且增加“获取整数”处理后进行调试信息的LOG区输出;接着再构建“如果…执行…否则…”分支选择结构,判断超声波测量的距离值是否在2-400cm的正常测量范围内;否的话,使用“设置0/1/2/3号数码管显示0”四个语句,控制显示4个0,实现题目(3)的要求;是的话,建立变量“百位”、“十位”和“个位”:

为变量“百位”赋值为“距离除以100”,取出该三位数的最高位;

为变量“十位”赋值为先“距离除以100”后取余数、再将余数“除以10”;

为变量“个位”赋值为先“距离除以10”、再将商“取余数”。

最后,分别使用三个“设置1/2/3号数码管显示百位/十位/个位”,其中的“并显示点0”的意思是控制不显示数码管中的小数点。

(5)完善细节

将相关语句按照题目要求放置于“重复当真”的循环结构中,在循环体内的两层分支选择结构的最后均添加一条“等待0.1秒”语句,防止循环过快(如图2)。

4.調试程序

在平台编程环境中点击“连接设备”,正常的话再点击“运行”按钮,对照题目中的各种情况进行多次测试,包括程序开始和按键松开时“数码管不显示”、按键按下并且按住时的正常测距范围(2-400cm)显示实际测量值与超范围时显示4个0(如图3),均实现了题目要求。

最后将程序按照要求保存为“03.txt”,下载并上传至考试系统中即可。

5.程序“升级”

程序代码仍然可以进行两处改写“升级”:

一是不建立变量“按键”,直接在外层分支选择结构中将“获取25号按钮检测结果”作为判断条件,因为该返回值只有0和1,与按键的“松开”与“按下”是对应的——数值“1”在很多编程语言中都是表示逻辑真;二是将数码管显示0的四行语句从主程序中去除,将它们增加至新函数“数码管显示0”中,虽然在主程序中只调用一次,但整体的简洁性会更好(如图4)。

再次运行程序,同样也能够实现题目要求。

猜你喜欢

数码管分支超声波
物理项目教学设计,用单片机控制四位数码管显示
超声波诊断甲状腺结节的临床应用观察
Arduino编程
Arduino编程
基于git工具的多分支并行开发上线流程
MC9S08FL16单片机数码管静态显示分析
用“分散数论”对“哥德巴赫猜想”的初等证明
蝙蝠的超声波
含有二阶幂零鞍点的双同宿环附近的极限环分支
蝙蝠的超声波