【得捷电子Follow me第2期】任务3:控制WS2812B
[复制链接]
本帖最后由 Ykern 于 2023-10-23 23:30 编辑
今天是10月23日星期一,在晚自习时把任务三完成好了
【得捷电子Follow me第2期】任务3:控制WS2812B
该任务主要是要用按键来控制板子上的灯珠变化,其实灯珠只有那一个,按键有两个,但其中一个是rst,所以到最后也就是一个按键控制一个灯珠
一个灯也可以玩出许多效果,例如通过延时函数来控制闪烁,用代码控制颜色等等。
在该任务中,我导入了官方的neopixel库和adafruit_led_animation库,主要用来控制灯的亮灭和亮的时间长短
在我以为万事大吉时,程序没有跑通,查阅了大佬的资料后,才发现我没有读取按键和控制io口
大意了
所以我们还要取调用库digitalio和库board
以下就是具体的代码,我把我的理解都写在注释了,希望大家斧正。
import board //检测按键的库
import digitalio
import time //控灯的库
import neopixel
from adafruit_display_text import label //任务一的文字显示库(老常客了)
from adafruit_bitmap_font import bitmap_font
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
pixel.brightness = 0.8 //控制亮度
button = digitalio.DigitalInOut(board.BUTTON) //初始化按键对象
button.direction = digitalio.Direction.INPUT //设置按键为输入
button.pull = digitalio.Pull.UP //将按键设置为上拉
but_in=3
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
display = board.DISPLAY
font_file = "fonts/wenquanyi_10pt.pcf" //加载任务一所用字体
font = bitmap_font.load_font(font_file)
def button(): //定义了一个按键函数
global but_in
if(not button.value): //按键没按下执行的操作
but_in=but_in+1
if (but_in>3): //按键没按下执行的操作
but_in=0
def dispinfo(str): //又定义了一个灯光函数
if(str=="RED"):
color = 0xFF0000
text_area = label.Label(font, text="红色", color=color)
text_area.x = 80
text_area.y = 60
scale = 2
display.show(text_area)
pixel.fill(color)
elif(str=="GREEN"):
color = 0x00FF00
text_area = label.Label(font, text="绿色", color=color)
text_area.x = 80
text_area.y = 60
scale = 2
pixel.fill(color)
elif(str=="BLUE"):
color = 0x0000FF
text_area = label.Label(font, text="蓝色", color=color)
text_area.x = 80
text_area.y = 60
scale = 2
pixel.fill(color)
else :
color = 0xFFFFFF
text_area = label.Label(font, text="按下按键以开始", color=color)
text_area.x = 80
text_area.y = 60
scale = 2
pixel.fill(color)
//分别输出红绿蓝
display.show(text_area)
while True: //最终输出的执行语句
colbutton()
if(but_in==0):
dispinfo("RED")
elif(but_in==1):
dispinfo("BLUE")
elif(but_in==2):
dispinfo("GREEN")
else:
dispinfo("START")
time.sleep(0.5) //延时
|