基于低代码单片机和CE1931实现 RGB Led 灯控制

96 篇文章 0 订阅
32 篇文章 0 订阅


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

一、实现功能

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

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

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

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

三、接线图

ec42d88527b8653147e07bc5b8e6aba1.jpeg

四、材料清单

  • 共阴极RGB三色灯

e7ece621114403e2053dd020f35d0fc8.jpeg

b86cbf34115cf081e8d60edf4c57d5a7.jpeg

您可以根据上面的原理图,自己做一个模块,但需要注意灯珠的工作电流、限流电阻阻值、以及需选型共阴极型的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灯最初的紫色状态:

8298406b3b2f271215d7bcfc49b2a742.jpeg

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值