基于 FlexLua 低代码单片机技术,脱离复杂单片机C语言开发正逐渐成为一种快速高效的 IoT 硬件开发方式。即使新手不懂单片机开发也可很快很容易用FlexLua零门槛开发各种 IoT 硬件,更多教程请参考 FlexLua 官网。

一、实现功能

一、实现功能

Core(SHIneBlink Mini开发板) 直接外接一个共阴极三色全彩 RGB Led 模块,并动态调整 RGB Led 的三色值。

二、关于RGB Led控制的一些较深入的理论知识

二、关于RGB Led控制的一些较深入的理论知识

Core关于RGB Led提供的驱动库接口很简单,如果用户只是想简单的想通过调整RGB灯珠的三色比例进而显示自己想要的比较接近的色彩,则下面的内容完全不需要了解。

  1. (1)如何用PWM线性的控制Led亮度
  2. 这个问题看起来简单,但实际上人眼对Led灯珠亮度的感知和PWM占空比并不是呈线性的关系,这里面有一套相关的理论计算公式,感兴趣的同学可以了解下另一篇文章《CIE1931 PWM LED亮度线性控制》。
  3. Core 已在 RGB 的驱动库中对 PWM 的输出根据 CIE1931 公式进行了相关矫正,所以用户可以不用考虑。
  4. (2)白平衡问题
  5. 色彩学上当红绿蓝三原色的比例为3:6:1时才会显示出纯正的白色,所以当选者全彩色LED进行配色前,为了达到最佳亮度和最低地成本,应尽量选择三原色发光强度成大致为3:6:1比例地LED灯珠。但实际中由于各个LED灯珠厂家工艺的差别,会有些不同,所以这里需要调整RGB灯珠的三色比例。LED灯珠的三原色白平衡调节是一个比较复杂的工程,感兴趣的同学可以网上了解一下相关资料,这里仅提供两种比较粗略的仅适用于单颗RGB灯珠白平衡的调节方法以供参考
  6. 方法一:通过调整串联在R,G,B灯珠上的电阻阻值来达到三原色在相同色阶下亮度为3:6:1的比例
  7. 方法二:在用LIB_RGBledConfig(p1,p2,p3)函数初始化时,调整p1,p2,p3这三个百分比参数来达到白平衡目的。
三、接线图

三、接线图

打开网易新闻 查看精彩图片

四、材料清单

四、材料清单

  1. 共阴极RGB三色灯

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

您可以根据上面的原理图,自己做一个模块,但需要注意灯珠的工作电流、限流电阻阻值、以及需选型共阴极型的LED灯珠。

五、完整代码

--配置共阴极RGB模块开始工作,模块的R,G,B引脚分别固定占用Core的D0,D1,D2引脚
--R,G,B系数都保持100%,即不考虑白平衡问题
LIB_RGBledConfig(100,100,100)
--设定初始RGB颜色,(255,0,255)为紫色
R = 255
G = 0
B = 255
--开始大循环
while(GC(1) == true)
do
--每20毫秒更新一次颜色值(R和B不变,G逐渐增大到255后再次返回0)
LIB_DelayMs(20)
LIB_RGBledUpdate(R,G,B)
G = G + 1
if G >= 255 then
G = 0
end
end

如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。

六、代码运行结果

六、代码运行结果

可以看到最开始RGB灯珠是紫色,随着绿色的成分逐渐增加,灯珠逐渐变成白色,当白色带到最亮状态后又会回到最初的紫色状态。

下图为RGB灯最初的紫色状态:

打开网易新闻 查看精彩图片