【Follow me第二季第1期】任务1:控制板载炫彩LED,跑马灯点亮和颜色变换
[复制链接]
大家好,我是郑工,尘世间一个迷途小工程师。
昨天有些事情,没给大家分享第一个任务,今天继续。
任务一是控制WS2812B灯珠,其实就是学习使用neopixel库,需要参考这个网址-->Adafruit CircuitPython NeoPixel — Adafruit CircuitPython NeoPixel Library 1.0 documentation
说白了就是需要知道用的是哪个管教,一共有多少个灯珠,亮度是多少之类的信息,最重要最重要就是初始化做好,其他啥问题没有,下面是我的初始化函数:
pixel_pin = board.NEOPIXEL
num_pixels = 10
ORDER = neopixel.GRB
pixels = neopixel.NeoPixel(
pixel_pin, num_pixels, brightness=0.2, auto_write=False, pixel_order=ORDER
)
然后需要做的就是给pixels赋值颜色了,有两种方式,一种是调用pixels.fill()函数,所有灯珠都同一个颜色,另一个是给pixels[i]赋值。
最后就是调用pixels.shows()函数执行操作就新行了。
剩下的就是花里胡哨的跑马灯环节。我自己做了两种循环模式,一种是在RGB三种颜色上渐变,另一种是指定RGB之和为255的情况下渐变。也算是争奇斗艳,花里胡哨了。下面是两个函数,有兴趣的同学可以琢磨一下,有啥问题跟我沟通沟通哈!
def Wheel2(i, r_in, g_in):
if i < 0 or i > 10:
r = g = b = 0
elif i % 3 == 0:
r = r_in
g = g_in
b = 255 - r - g
elif i % 3 == 1:
r = g_in
b = r_in
g = 255 - r - b
else:
g = r_in
b = g_in
r = 255 - b - g
return (r, g, b)
def rainbow_cycle2():
dir = True
for r in range(255):
start = 0
stop = 255 - r
step = 1
if not dir:
start = 255 - r
stop = 0
step = -1
for g in range(start, stop, step):
for i in range(10):
pixels[i] = Wheel2(i, r, g)
pixels.show()
time.sleep(colorFulWaitTime / 50)
dir = not dir
def wheel(pos):
if pos < 0 or pos > 768:
r = g = b = 0
elif pos < 256:
r = int(pos)
g = int(255 - pos)
b = 0
elif pos < 512:
pos -= 256
r = int(255 - pos)
g = 0
b = int(pos)
else:
pos -= 512
r = 0
g = int(pos)
b = int(255 - pos)
return (r, g, b)
def rainbow_cycle():
for j in range(767):
for i in range(num_pixels):
pixel_index = (i * 767 // num_pixels) + j
pixels[i] = wheel(pixel_index % 767)
pixels.show()
time.sleep(colorFulWaitTime)
|