【SAMR21新玩法】29. WS2812应用之彩虹
[复制链接]
前面一节介绍了WS2812的驱动方法,在此基础上,我们可以设计出多种有趣的应用。首先看看WS2812灯带显示彩虹,在makecode中已经介绍过,这里介绍用python实现的方法。
彩虹是由赤橙黄绿青蓝紫7种颜色组成,考虑到颜色可以回绕,我们可以将灯带平均分为7段,每一段的端点就是7种颜色,中间按照与端点的距离计算对应的颜色。因为WS2812是由RGB三色组成,所以需要对每种颜色分量进行插值计算,最后在合成显示的颜色。
参考子程序如下:
def np_rainbow(np, num, bright=32, offset = 0):
rb = ((255,0,0), (255,127,0), (255,255,0), (0,255,0), (0,255,255),(0,0,255),(136,0,255), (255,0,0))
for i in range(num):
t = 7*i/num
t0 = int(t)
r = round((rb[t0][0] + (t-t0)*(rb[t0+1][0]-rb[t0][0]))*bright)>>8
g = round((rb[t0][1] + (t-t0)*(rb[t0+1][1]-rb[t0][1]))*bright)>>8
b = round((rb[t0][2] + (t-t0)*(rb[t0+1][2]-rb[t0][2]))*bright)>>8
np[(i+offset)%num] = (r, g, b)
np是neopixel对象
num是彩灯的数量,数量越多效果越好,颜色变化越平滑。
bright是最大亮度,限制最大亮度可以保护眼睛视力
offset是颜色显示偏移量,周期改变offset可以实现旋转彩虹的效果,晚上看效果非常好
此内容由EEWORLD论坛网友dcexpert原创,如需转载或用于商业用途需征得作者同意并注明出处