【得捷电子Follow me第2期】任务3:控制WS2812B
[复制链接]
任务3是控制WS2812B,即使用按键控制板载Neopixel LED的显示和颜色切换。
在本次的硬件上,如下图的硬件,含有一颗RGB的WS2812B灯珠。
以及下图中的两颗按钮,其中左侧是复位按钮,右侧则是boot按钮。在本次就不作为按钮使用。
因为板子上还做了另一个功能,就是触摸按键功能touch。
翻阅文档《adafruit-esp32-s3-tft-feather.pdf》可以找到触摸按钮章节。
从文中可以获知,只要通过touchio.TouchIn()定义好触摸按钮所在引脚,然后通过该引脚的touch value即可获知该触摸引脚是否被按下。
从文中可知,并不是所有引脚都支持,支持的触摸touch引脚如下图。
这里我们就选择D5作为Neopixel LED的打开,D10作为Neopixel LED的关闭按钮,而A5则作为切换几组不同颜色的按钮。
综上所属,我们开始代码设计
首先将如下三个libraries import进来
然后定义硬件的Neopixel LED以及上述的三个控制touch引脚
接下来定义几组颜色,其中1~6为切换显示的颜色,最后一组作为关闭Neopixel LED使用。
然后定义几种状态,包括
color_cnt:用于循环切换颜色
led_state:用于记录当前led亮灭状态
Key_color_state:用于记录当前颜色切换按钮状态
定义一个led打开函数接口,其中将根据led状态,以及当前颜色打开led
然后是熄灭led函数
最后是主函数接口了,根据当前按钮或者led状态等,切换led的亮灭以及颜色切换。
完整代码
import board
import neopixel
import touchio
print("This is the task 3:Control the ws2812B using buttons")
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
pixel.brightness = 0.3
key_on = touchio.TouchIn(board.D5)
key_off = touchio.TouchIn(board.D10)
key_color = touchio.TouchIn(board.A5)
color_1 = (200, 0, 0)
color_2 = (0, 200, 0)
color_3 = (0, 0, 200)
color_4 = (111, 111, 0)
color_5 = (0, 111, 111)
color_6 = (111, 0, 111)
color_off = (0, 0, 0)
color_cnt = 1
led_state = 0
key_color_state = 0
def pixel_set_on():
global led_state
if led_state == 0:
print(f"Turn on pixel, color index is {color_cnt}")
pixel.brightness = 0.1
if color_cnt == 1:
pixel.fill(color_1)
if color_cnt == 2:
pixel.fill(color_2)
if color_cnt == 3:
pixel.fill(color_3)
if color_cnt == 4:
pixel.fill(color_4)
if color_cnt == 5:
pixel.fill(color_5)
if color_cnt == 6:
pixel.fill(color_6)
def pixel_set_off():
global led_state
if led_state == 1:
print("Turn off pixel")
pixel.fill(color_off)
while True:
if key_on.value:
pixel_set_on()
led_state = 1
if key_off.value:
pixel_set_off()
led_state = 0
if key_color.value:
key_color_state = 1
else:
if key_color_state == 1:
key_color_state = 0
color_cnt += 1
if color_cnt > 6:
color_cnt = 1
print(f"Change color, index is {color_cnt}")
if led_state == 1:
if color_cnt == 1:
pixel.fill(color_1)
if color_cnt == 2:
pixel.fill(color_2)
if color_cnt == 3:
pixel.fill(color_3)
if color_cnt == 4:
pixel.fill(color_4)
if color_cnt == 5:
pixel.fill(color_5)
if color_cnt == 6:
pixel.fill(color_6)
保存运行,REPL打印任务内容信息,显示屏也一并显示
触摸按钮即可切换led的颜色和亮灭状态了
打开led
切换不同颜色
关闭led
在关闭状态下也可以切换颜色,下次打开是就以新颜色打开了。
|