【SAMR21新玩法】29. WS2812应用之彩虹

Adafruit CircuitPython相关
MicroPython重要分支
回复
头像
shaoziyang
帖子: 3956
注册时间: 2019年 10月 21日 13:48

【SAMR21新玩法】29. WS2812应用之彩虹

#1

帖子 shaoziyang »

前面一节介绍了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可以实现旋转彩虹的效果,晚上看效果非常好


完整的程序可以参考社区的驱动库:

https://github.com/shaoziyang/microbit- ... rainbow.py

回复

  • 随机主题
    回复总数
    阅读次数
    最新文章