507|0

22

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子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函数有点不一样哈,不过终归是学会了。

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表