1.5. 流光溢彩的RGB像素灯珠

RGB像素灯珠串是非常有趣的一种输出,不仅可以用于照明和产生彩光,还能输出动态的流光溢彩的光效。

BlueFi的LCD屏幕上方有5颗RGB像素灯珠串,你可以利用他们产生各种有趣的光效,包括进度条、剩余电量、彩虹、流动的光等。整体亮度可编程, 每一个像素的颜色独立可编程。

如果你已经使用BlueFi一段时间了,相信你一定注意过BlueFi的5个RGB像素灯珠,本节我们将掌握如何对这个灯珠串编程让他们产生绚丽的、运动的 光效。


1.5.1. 显示预制的彩光图案

BlueFi单板机上只有5颗RGB像素灯珠,能够产生多种静态或动态的彩光效果,我们已经预制了4种动态的彩光效果,你只需要给定他们的的显示时间, 即可产生动态彩光效果。在BlueFi上运行下面示例程序,你将看到4种光效:

../../_static/images/basics/pixels.png

运行这个示例程序时,如果你的环境光较暗,可以调低RGB像素灯珠的亮度,即减程序的第2行像素亮度的值,避免眼睛盯着非常明亮的光源。

示例代码分析:

  • 第1行,初始化程序,相当与程序下载进Bluefi之后告知Bluefi从此开始执行程序
  • 第2行,设置像素亮度(Bluefi上五颗led彩灯的整体亮度)为0.3,合理取值范围:0.05(亮度最小)~1.0(亮度最大)
  • 第3行,开始一个无穷循环的程序块
  • 第4行(无穷循环程序块的第1行),在LCD屏幕(控制台)上显示字符串“show rainbow”
  • 第5行(无穷循环程序块的第2行),设置像素显示动画特效彩虹,时长设为4秒
  • 第6行(无穷循环程序块的第3行),清除所有像素(即关闭彩灯)
  • 第7行(无穷循环程序块的第4行),等待1秒(即系统可操作1秒)
  • 第8行(无穷循环程序块的第5行),在LCD屏幕(控制台)上显示字符串“show star”
  • 第9行(无穷循环程序块的第6行),设置像素显示动画特效星星眨眼,时长设为4秒
  • 第10行(无穷循环程序块的第7行),清除所有像素(即关闭彩灯)
  • 第11行(无穷循环程序块的第8行),等待1秒(即系统可操作1秒)
  • 第12行(无穷循环程序块的第9行),在LCD屏幕(控制台)上显示字符串“show comet”
  • 第13行(无穷循环程序块的第10行),设置像素显示动画特效彗星掠空,时长设为4秒
  • 第14行(无穷循环程序块的第11行),清除所有像素(即关闭彩灯)
  • 第15行(无穷循环程序块的第12行),等待1秒(即系统可操作1秒)
  • 第16行(无穷循环程序块的第13行),在LCD屏幕(控制台)上显示字符串“show wipe”
  • 第17行(无穷循环程序块的第14行),设置像素显示动画特效画和擦交替,时长设为4秒
  • 第18行(无穷循环程序块的第11行),清除所有像素(即关闭彩灯)
  • 第19行(无穷循环程序块的第13行),等待1秒(即系统空操作1秒)

我们所谓预制的光效,实际上是我们对BlueFi的每一个RGB像素灯珠的颜色进行编程,并通过移位实现动态光效,代码块在使用时点击下拉框直接 选择动画的效果,并指定持续显示光效时间长度即可。

1.5.2. 自制的彩光图案

下面我们使用自定义显示图案代码块将Bluefi上彩色led的图案进行设置,然后显示出来,并逐位移动他们,产生自定义的光效。 示例程序如下:

../../_static/images/basics/pixels1.png

在BlueFi上执行本示例程序,你会看到流动的光带效果,如果你改变程序最后一个语句等待时长中的时间参数,并重新保存到 /CIRCUITPY/code.py中,将会看到不同的色彩运动效果。

示例代码分析:

  • 第1行,初始化程序,相当与程序下载进Bluefi之后告知Bluefi从此开始执行程序
  • 第2行,设置像素亮度(即RGB像素彩灯的整体亮度)为0.2,合理取值范围:0.05(亮度最小)~1.0(亮度最大)
  • 第3行,自定义显示图案代码块,点击颜色块通过滑动条对颜色、饱和度、亮度进行颜色设置,或是直接运用取色器完成颜色的选取
  • 第4行,开始一个无穷循环的程序块
  • 第5行(无穷循环程序块的第1行),设置像素图案右移,此代码块默认是左移,需要点击下拉框将移动方向选为右移,让5个RGB像素灯珠的颜色循环右移一次
  • 第6行(无穷循环程序块的第2行),等待0.2秒(即系统空操作0.2秒)

在本示例程序的第3行,我们使用自定义显示图案代码块定义单个RGB像素灯珠的颜色,即通过设置颜色、饱和度、亮度三个值来定义颜色,并使用 这样的5种颜色分别指定5个灯珠的颜色。

除了上面示例中设置彩灯颜色的方法之外,在彩灯代码块抽屉中还有不同的方式可以定义彩灯的颜色。可以看到彩灯代码块抽屉中有两个定义颜色 的代码块”RGB(三个数值的范围:0~255)”和”HSV(三个数值的范围:0~100)”,这是两种不同的定义颜色的标准。

../../_static/images/basics/pixels2.png

你可以使用设置像素图案左移让彩色图案左移,试一试并观察左移和右移的效果。现在我们每次只是移动1位,你能自己编写程序实现 每次移动2位或更多位吗?

1.5.3. 用RGB像素灯珠画柱状图

BlueFi上的并排5个彩灯可以实现很多种光效,最酷的应该是动态柱状图指示变量的变化,不仅直观而且彩色光柱让人印象深刻。如下示例:

../../_static/images/basics/pixels3.png

当你把本示例程序保存为/CIRCUITPY/code.py文件后,播放节奏明显的音乐、敲桌子等方式制造点很有节奏的动静,你会发现BlueFi灯珠上 彩色光柱几乎完全与节奏同步跳动,效果非常有趣。

示例代码分析:

  • 第1行,初始化程序,相当与程序下载进Bluefi之后告知Bluefi从此开始执行程序
  • 第2行,设置像素亮度(即RGB像素彩灯的整体亮度)为0.2,合理取值范围:0.05(亮度最小)~1.0(亮度最大)
  • 第3行,定义一个变量名叫vmin,并将声音大小(初始时麦克风感知到的声音高低)作为初始值
  • 第3行,定义一个变量名叫vmax,并使用“vmin+500”作为初始值
  • 第4行,开始一个无穷循环的程序块
  • 第3行(无穷循环程序块的第1行),使用彩灯中的画图代码块,使用声音大小(麦克风感知到的声音高低)作为变量画柱状图,且最小值为vmain和最大值为vmax
  • 第5行(无穷循环程序块的第2行),等待0.01秒(即系统空操作0.01秒)

关于BlueFi的声音输入类的用法,后续将会详细说明,此处只是使用声音大小(麦克风感知到的声音高低).

总结:

  • 设置RGB像素图案特效
  • “RGB”/”HSV”自定义像素颜色
  • RGB像素绘制柱状图
  • 变量赋值
  • 变量自增/自减
  • 逻辑判断和逻辑程序块
  • 本节中,你总计完成了30行代码的编写工作

重要

出现的代码块

  • 设置像素显示动画特效,下拉框中选择现成四种特效
  • 设置像素亮度, BlueFi的RGB像素灯珠串的整体亮度
  • 清楚所有像素, 关闭BlueFi的所有RGB像素灯珠
  • 显示像素图案, 让BlueFi的RGB像素灯珠显示给定的图案
  • 设置像素图案移动, 让BlueFi的RGB像素灯珠显示的图案循环左/右移一步
  • 画图 (变量:声音大小, 变量最小值, 变量最大值, 峰值颜色), 用声音大小的值画柱状图