蓝桥杯青少年创意编程大赛树莓派模拟题四:“绚丽彩灯”

2021-07-01 10:55牟晓东
电脑报 2021年7期
关键词:灯带数码管彩灯

牟晓东

本文以模拟题“绚丽彩灯”为例,进行题目解析。

第四题“绚丽彩灯”(难度系数4,30个计分点):

每逢节日,可以看到商场各地都挂着绚丽的彩灯,它们通过颜色变换,可以实现各种各样的绚丽效果,现制作一些绚丽的彩灯效果。

硬件准备:

1个按键模块【接入25#引脚】,1个数码管【接入IIC接口】,灯带(60颗灯珠)【接入18#引脚】,杜邦线若干。

编程实现:

(1)程序开始时,数码管只有最后一位显示0,灯带熄灭;

(2)当按键每被按一次时,数码管最后一位显示的数字都在之前的基础上加1,当数码管最后一位显示4时,再按一次,数码管显示1,如此重复1-4的显示;

(3)当数码管显示1的时候,灯带前面30个灯亮红色,后面30个灯亮蓝色;

(4)当数码管显示2的时候,灯带以红色和蓝色交叉显示,最前面为红色;

(5)当数码管显示3的时候,灯带以红色和蓝色交叉显示,每隔0.5秒,红色和蓝色位置交换一次;

(6)当数码管显示4的时候,灯带从中间位置向两边同时每隔0.1秒各点亮一个灯珠,向前点亮灯珠的颜色为红色,向后点亮灯珠的颜色为蓝色;

(7)如此循环。

判断标准:

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

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

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

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

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

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

3分:完全符合题意。

1.审清题意,抓住关键点

“绚丽彩灯”的考点有分支选择结构的嵌套、按键模块的循环计数和灯带的初始化设置及各种效果的实现。此外,还要注意数码管的初始化和显示控制方法。

(1)分支选择结构的最“内层”嵌套是匹配按键模块的1-4按下次数,对应控制数码管最低位(3号)显示该数字,以及灯带的一种显示效果。

(2)按键模块的按下次数最大值为4,必须使用条件语句判断其是否超出范围,当该值大于4时需要使用赋值语句重新将其值改写为1,进行下一次的循环。

(3)灯带的60颗灯珠编号为0-59,每颗灯珠均可独立控制其显示颜色(也可用RGB值来控制);当数码管分别显示1-4时,对应灯带的四种显示效果中多次提到“前30、后30”、“中间位置”,编程时注意分别使用0-29和30-59来区分前后两大组灯珠。

2.实验器材的安装

按照题目要求,首先将按键模块接入25#引脚;灯带需要接入18#引脚,注意灯带的三根异色引线的标注,通常是红色为+5V(电源正极)、白色为GND、绿色为Din(数字信号输入),对应扩展板18#引脚的VCC、GND和D(数字端);由于灯带接入18#引脚占用了IIC接口Up列一侧的空间,因此数码管必须要旋转180度,接至IIC接口Down列对角线位置;最后,给树莓派接通电源,启动操作系统(如图1)。

3.编程实现“绚丽彩灯”

(1)进入平台编程环境

登录古德微机器人平台切换至“积木”编程区。

(2)编写“初始化数码管”函数

建立函数“初始化数码管”,先关闭0-3号数码管,再设置亮度为1(对四个数码管均有效);最后设置3号数码管显示“0”(不显示点),实现题目中(1)对数码管“只有最后一位显示0”的显示要求(如图2)。

(3)编写“初始化灯带”函数

灯带的初始化操作需要先使用“设置GPIO18可控制灯带60个灯并设置亮度为50”语句;然后构建一个循环结构,控制变量i从0增至59(步长为1),依次设置每个灯珠的颜色为黑色,实现题目中(1)对灯带“熄灭”的要求(黑色即“熄灭”)。特别要注意的是,最后必须添加一条“灯带刷新显示”语句,否则之前对灯带的设置控制均是无效的(如图3)。

(4)构建循环结构中的多分支选择嵌套结构

在主程序中分别调用“初始化数码管”和“初始化灯带”函数后,建立变量“数字”并赋值为0,用来存储按键次数(数字1-4);接着建立“重复当真”的循环结构,进行外层分支选择的判断,条件为是否从25号按键获取到“按下”动作;然后,将变量“数字”进行“自增1”赋值运算,并且通过一个“如果…执行…”语句设置其运算规律(大于4时重新“回归”为1);通过“设置3号数码管显示‘数字,并显示点‘0”语句,将变量數字的值根据变化(1、2、3、4)均在数码管的最低位上显示输出。

建立“如果…执行…否则如果…执行……”四分支选择结构,准备实现题目中(3)-(6)所要求的灯带四种显示效果:

①当数字为1时,为了实现“前面30个灯亮红色、后面30个灯亮蓝色”(注意二者应该是同步进行的)效果,应该只建立一个循环结构来控制两组灯珠;如果是两个循环结构来分别控制两组灯珠的话,效果就变成了先亮一组30个、再亮另一组30个。控制变量i从初值0自增至终值29(步长为1),前30个灯珠设置为亮红色;后30个灯珠的序号是在前30个的基础上对应“加30”,即“i+30”,设置为亮蓝色。切记:最后一定要添加一条“灯带刷新显示”语句(下同),控制灯带发光。

②当数字为2时,为了实现“以红色和蓝色交叉显示且最前面为红色”效果,同样是只建立一个循环结构,注意变量i的取值范围是从0至59,步长设置为2(实现奇偶数灯珠的“交叉”控制);排序为奇数的灯珠(编号为i)发光颜色设置为红色,偶数灯珠(编号为“i+1”)发光颜色设置为蓝色。

③当数字为3时,为了实现“以红色和蓝色交叉显示,每隔0.5秒,红色和蓝色位置交换一次”效果,需要建立两个循环结构;相当于重复执行了两次“数字为2时”的操作:先奇数灯珠发红光、偶数灯珠发蓝光,完成后停顿0.5秒,再奇数灯珠发蓝光、偶数灯珠发红光。

④当数字为4时,为了实现“从中间位置向两边同时每隔0.1秒各点亮一个灯珠,向前点亮灯珠的颜色为红色,向后点亮灯珠的颜色为蓝色”效果,同样是使用一个循环结构,注意变量i的取值范围是从29至0(“每隔1”:步长为-1),第一组是从第29个灯珠向前发红光,第二组是从第30个灯珠向后发蓝光——特别要注意该组的编号构建规则算式是“59-i”(如图4)。

(5)其他细节

不管是主程序循环结构的最后,还是各分支选择结构的最后(个别的还有中间位置),都需要考虑是否应该添加等待语句,作用同样是防止循环过多和过快地占用系统资源。

4.运行程序,检测“绚丽彩灯”

在平台编程环境中点击“连接设备”,正常的话再点击“运行”按钮,对照题目进行多次测试,不断按下按键,数码管重复显示1、2、3、4,同时灯带也进行亮红灯和蓝灯等不同效果的对应显示,实现了题目要求。

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

猜你喜欢
灯带数码管彩灯
LED COB灯带在LED灯带中演绎及应用
物理项目教学设计,用单片机控制四位数码管显示
彩灯
LED灯串显示屏的设计与应用
蓝桥杯树莓派模拟题解析三:“电子测距仪”
树莓派自定义“灯带函数”
便携式可收放LED灯带
Arduino编程
MC9S08FL16单片机数码管静态显示分析
有多少盏彩灯