【得捷电子Follow me第2期】任务3:控制WS2812B
[复制链接]
任务三:使用按键控制板载Neopixel LED的显示和颜色切换
这里我的控制思路很简单啦,就是按键短按可以切换7个颜色,长按可以直接关闭彩灯,然后超长按可以显示彩虹渐变的效果。这里还使用了esp32s3板子的触摸引脚,touch pin可以使用电容触摸引脚来当做按键,超长按后,触摸板子下边的引脚可以开启彩虹渐变,触摸上面的引脚会退出。
效果如下:duanan是短按,changan是长按,chaochangan是超长按。
任务3
代码如下:
import time, board, neopixel, digitalio
from rainbowio import colorwheel
import touchio
color = [(255,0,0), (0,255,0), (0,0,255), (0,255,255),\
(255,0,255), (255,255,0), (255,255,255), (0,0,0)]
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=1) #brightness为亮度0到1的小数
button = digitalio.DigitalInOut(board.BUTTON)
button.direction = digitalio.Direction.INPUT
button.pull = digitalio.Pull.UP
touch_one = touchio.TouchIn(board.D12)
touch_two = touchio.TouchIn(board.A4)
state = 0
press_time = 0
def rainbow(delay):
while not touch_one.value: #是否触摸
pass
if touch_one.value:
while True:
for color_value in range(255):
pixel.fill(colorwheel(color_value))
if touch_two.value:
break
time.sleep(delay)
if touch_two.value:
break
pixel.fill((0,0,0))
while True:
if state >= len(color):
state = 0
time.sleep(0.01) #延时消抖
if button.value == 0: #按键按下
while not button.value: #判断按键是否起来,区别长按短按
press_time += 0.001
if 0 <= press_time <= 200: #3秒左右
print(press_time, 'duanan')
pixel.fill(color[state])
state += 1
elif 200 < press_time <= 500:
print(press_time, 'changan') #5s以上
pixel.fill((0,0,0))
state = 0
else:
print('changchaoan')
print('touch above begin rainbow show, and touch below exit')
rainbow(0.002)
state = 0
press_time = 0
完成的比较简单,主要是有neopixel库非常方便控制rgb彩灯,官方也有相关的例程。一开始还不知道怎么使用pin引脚啥的,按钮gpio输入输出也不会用,因为和micropython函数有点不一样哈,不过终归是学会了。
|