【得捷电子Follow me第2期】任务3:控制WS2812B
[复制链接]
【得捷电子Follow me第2期】任务3:控制WS2812B
本文会涉及通用的编程思维,十分推荐一个学习网站——菜鸟教程
import 的库如下
import board
import neopixel
import digitalio
import time
neopixel是一个外置库,是用来控制WS2812B
按键基础配置
# 按键基础配置
button = digitalio.DigitalInOut(board.BUTTON)
button.switch_to_input(pull=digitalio.Pull.UP)
板子上的按键是按下为低电平,所以要加上上拉电阻
WS2812B基础配置
# WS2812B 电源控制
power = digitalio.DigitalInOut(board.NEOPIXEL_POWER)
power.direction = digitalio.Direction.OUTPUT
power.value = True
# WS2812B设置
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
# 亮度
pixel.brightness = 0.5
首先,我们需要将WS2812B引脚置为高电平
neopixel.NeoPixel(board.NEOPIXEL, 1) board.NEOPIXEL为WS2812B的控制引脚,后者为WS2812B的数量
颜色控制函数
def WS2812B(color):
pixel.fill(((color&0x0000FF),(color&0x00FF00)>>8,(color&0xFF0000)>>16))
这里我定义了一个函数
pixel.fill()函数可以控制颜色,传递的参数为元组(不了解的可以去菜鸟教程);元组的元素有三个,分别为:R,G,B
那么我们这函数用途就很明显了,是想用一个十六进制数来控制WS2812B的颜色
主循环
color=0x0000FF
flag=False
while True:
if button.value==False:
if flag==False:
flag=True
WS2812B(color=color)
if color==0xFF0000:
color=0X0000FF
else :
color<<=8
elif button.value==True:
flag=False
这里定义了一个color,flag来存储我们的WS2812B颜色数据和按键标志位
按键按下,color左移8位,color在0x0000FF,0x00FF00,0xFF0000之间循环
flag的用途为按键标志位,可以使我们按键按下时程序只执行一次
完整代码
import board
import neopixel
import digitalio
import time
# 按键基础配置
button = digitalio.DigitalInOut(board.BUTTON)
button.switch_to_input(pull=digitalio.Pull.UP)
# WS2812B 电源控制
power = digitalio.DigitalInOut(board.NEOPIXEL_POWER)
power.direction = digitalio.Direction.OUTPUT
power.value = True
# WS2812B设置
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
# 亮度
pixel.brightness = 0.5
def WS2812B(color):
pixel.fill(((color&0x0000FF),(color&0x00FF00)>>8,(color&0xFF0000)>>16))
color=0x0000FF
flag=False
while True:
if button.value==False:
if flag==False:
flag=True
WS2812B(color=color)
if color==0xFF0000:
color=0X0000FF
else :
color<<=8
elif button.value==True:
flag=False
|