【得捷电子Follow me第2期】+基于CircuitPython的控制WS2812B
[复制链接]
任务3:控制WS2812B
效果图:
大概思路:
先处理LED引脚的定义和LED 驱动
再去处理按键的一些定义和按键处理逻辑,还有屏幕的初始化
最后在主循环中一直循环判断哪一个按键按下
再去执行LED和TFT的效果
任务功能对应的主要代码片段及说明
关于导入的相关库
# 导入board内置库
import board
# 导入neopixel内置库
import neopixel
import digitalio,terminalio,displayio
# 导入time内置库
import time
import key
from adafruit_display_text import label
# 从digitalio内置库导入DigitalInOut, Direction, Pull
from digitalio import DigitalInOut, Direction, Pull
# 从adafruit_led_animation.color库导入五种颜色定义
from adafruit_led_animation.color import JADE,BLACK, ORANGE, GOLD, OLD_LACE
先去处理关于LED相关的引脚以及LED的驱动,这里我使用了两个引脚来驱动 WS2812
#关于LED的定义**************************************************************************
led_io = digitalio.DigitalInOut(board.NEOPIXEL_POWER)
led_io.direction = digitalio.Direction.OUTPUT
led_io.value = True
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
# 亮度
pixel.brightness = 0.1
pixe2 = neopixel.NeoPixel(board.A0, 16)
# 亮度
pixe2.brightness = 0.1
这里就是我单独写的一个按键处理的文件。定义了5个按键都是独立按键,
# 初始化btn按钮对象
btn = DigitalInOut(board.BOOT0)
# 设置btn引脚为输入
btn.direction = Direction.INPUT
# 设置btn引脚为上拉
btn.pull = Pull.UP
......
......
btn4 = DigitalInOut(board.A4)
# 设置btn1引脚为输入
btn4.direction = Direction.INPUT
# 设置btn引脚为上拉
btn4.pull = Pull.UP
def key():
time.sleep(0.1) # sleep for debounce
if btn.value==0:
time.sleep(0.1) # sleep for debounce
if btn.value==0:
return 1
elif btn1.value==0:
return 2
elif btn2.value==0:
return 3
elif btn3.value==0:
return 4
elif btn4.value==0:
return 5
else :
return 0
配置屏幕的参数,这里直接调用封装号的配置处理
#屏幕的基础配置
display= board.DISPLAY
下面就是主循环了,
# 进入while循环
while True:
#进入循环先一直判断按键按下
key_value=key.key()
# 判断按键是否按下
if key_value!=0:
# 若按键按下,则根据余数指定led颜色
time.sleep(0.1) #这里就是按键消抖
print(key_value) #打印哪一个按键按下
if key_value == 1: #按键1按下了,执行里面的程序
pixel.fill((JADE))# 玉色
pixe2.fill((JADE))# 玉色
text ="JADE"
text_area =label.Label(terminalio.FONT,text=text, color=JADE,x=10,y=30)
text_group=displayio.Group(scale=2 ,x=0,y=0)
text_group.append(text_area)
display.show(text_group)
elif key_value == 2:
pixel.fill((ORANGE))# 橙色
pixe2.fill((ORANGE))# 橙色
text ="ORANGE"
text_area =label.Label(terminalio.FONT,text=text, color=ORANGE,x=10,y=30)
text_group=displayio.Group(scale=2 ,x=0,y=0)
text_group.append(text_area)
display.show(text_group)
elif key_value == 3:
pixel.fill((GOLD))# 金色
pixe2.fill((GOLD))# 金色
text ="GOLD"
text_area =label.Label(terminalio.FONT,text=text, color=GOLD,x=10,y=30)
text_group=displayio.Group(scale=2 ,x=0,y=0)
text_group.append(text_area)
display.show(text_group)
elif key_value == 4:
pixel.fill((OLD_LACE))#
pixe2.fill((OLD_LACE))#
text ="OLD_LACE"
text_area =label.Label(terminalio.FONT,text=text, color=OLD_LACE,x=10,y=30)
text_group=displayio.Group(scale=2 ,x=0,y=0)
text_group.append(text_area)
display.show(text_group)
elif key_value == 5:
pixel.fill((BLACK))# 黑色
pixe2.fill((BLACK))# 黑色
text ="BLACK"
text_area =label.Label(terminalio.FONT,text=text, color=BLACK,x=10,y=30)
text_group=displayio.Group(scale=2 ,x=0,y=0)
text_group.append(text_area)
display.show(text_group)
else:
# 空
pass
下面是效果视频:
VID_20231019_175535
这是源代码所有文件:
|