632|2

22

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第2期】任务4----分任务2:WS2812B效果控制 [复制链接]

  本帖最后由 怀66 于 2023-9-10 09:16 编辑

任务4----分任务2:完成一个Neopixel(12灯珠或以上)控制器,通过按键和屏幕切换展示效果

    这次任务基本上就是在任务三上面改进。任务三连接:【得捷电子Follow me第2期】任务3:控制WS2812B - DigiKey得捷电子技术专区 - 电子工程世界-论坛 (eeworld.com.cn)

    我手头上刚好有一个底板,底板上有12个rgb彩灯,这里就不放连线图了,因为兄弟们不一定有和我一样的底板。主要就是连接电源线、地线、esp32的一个数字io-D5连接rgb彩灯的数据输入、再找两个数字io连接两个按键。硬件连接就这样。

    其实主要就是把原来的          pixel = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=1)

    改为                                       pixel = neopixel.NeoPixel(board.D5, 12, brightness=1)

    就是把rgb灯数据接口改为你用的就好啦。

    另外,在任务三基础上,还要求要使用屏幕展示效果,于是我就去官方的库里找了一些驱动屏幕的资料,然后自己瞎吉儿乱搞,找到一些改变屏幕状态的核心语句,就可以让屏幕同步显示当前彩灯的颜色啦。

    效果:光线原因拍出来不是很好看

任务4-rgb彩灯

    这个任务也完成的比较简单,主要是屏幕控制方面云里雾里的,程序逻辑都没怎么看懂,但是,能跑就行!哈!对了其中彩虹的逻辑其实就是固定一个rgb中的原色值,另外两个值一个加一个减,就实现了渐变效果。还有诸如单独控制某个小灯的值我放在setcolor函数里了。😊

代码:

import time, board, neopixel, digitalio
import touchio
import displayio
from adafruit_display_text import label
from adafruit_st7789 import ST7789
from adafruit_bitmap_font import bitmap_font

#-----------------------显示设置-------------------------------------------------
# First set some parameters used for shapes and text
BORDER = 20
FONTSCALE = 2
BACKGROUND_COLOR = 0xffffff  # Bright Green
TEXT_COLOR = 0x000000
font_file = "wenquanyi_13px.pcf"
font = bitmap_font.load_font(font_file)

# Release any resources currently in use for the displays
displayio.release_displays()

spi = board.SPI()
tft_cs = board.TFT_CS
tft_dc = board.TFT_DC

display_bus = displayio.FourWire(spi, command=tft_dc, chip_select=tft_cs)
display = ST7789(
    display_bus, rotation=270, width=240, height=135, rowstart=40, colstart=53
)

# Make the display context
splash = displayio.Group()
display.show(splash)

color_bitmap = displayio.Bitmap(display.width, display.height, 1)
color_palette = displayio.Palette(1)
color_palette[0] = BACKGROUND_COLOR

bg_sprite = displayio.TileGrid(color_bitmap, pixel_shader=color_palette, x=0, y=0)
splash.append(bg_sprite)

# Draw a label
text = "这里显示颜色"
text_area = label.Label(font, text=text, color=TEXT_COLOR)
text_width = text_area.bounding_box[2] * FONTSCALE
text_group = displayio.Group(
    scale=FONTSCALE,
    x=display.width // 2 - text_width // 2,
    y=display.height // 2,
)
text_group.append(text_area)  # Subgroup for text scaling
splash.append(text_group)
#------------------------------分割线------------------------------------------------------

#颜色及rgb灯初始化
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.D5, 12, brightness=1) 

#按键1和按键2
button2 = digitalio.DigitalInOut(board.D10)
button2.direction = digitalio.Direction.INPUT
button2.pull = digitalio.Pull.UP

button1 = digitalio.DigitalInOut(board.D9)
button1.direction = digitalio.Direction.INPUT
button1.pull = digitalio.Pull.UP

state = 0
press_time = 0

#触摸引脚
touch_one = touchio.TouchIn(board.D12)
touch_two = touchio.TouchIn(board.A4)


def setcolor(n,color):
    pixel[n] = color
    
def on():
    for _ in range(12):
        pixel[_] = (122//16,238//16,78//16)
        
def off():
    for _ in range(12):
        pixel[_] = (0,0,0)

def rainbow():
    while not touch_one.value: #是否触摸
        pass
    if touch_one.value:
        while True:
        #红变绿
            r = 255
            g = 0
            b = 0
            for _ in range(12):
                pixel[_]  = (r,g,b)
                r = r - 20
                g = g + 20
                time.sleep(0.01)

        #绿变蓝
            r = 0
            g = 255
            b = 0
            for _ in range(12):
                pixel[_]  = (r,g,b)
                g = g - 20
                b = b + 20
                time.sleep(0.01)

        #蓝变红
            r = 0
            g = 0
            b = 255
            for _ in range(12):
                pixel[_]  = (r,g,b)
                b = b - 21
                r = r + 21
                time.sleep(0.01)
            if touch_two.value:   #触摸
                off()
                break
 
off()
while True:
    if state >= len(color):
        state = 0
    time.sleep(0.01) #延时消抖
    if button1.value == 0:
        while not button1.value:
            pass
        print('touch above begin rainbow show, and touch below exit')
        text_area.color = 0xffffff
        text_area.text = '彩虹模式'
        color_palette[0] = 0x000000
        rainbow()
        text_area.color = 0x000000
        text_area.text = '这里显示颜色'
        color_palette[0] = 0xffffff
    if button2.value == 0:    #按键按下
        while not button2.value:  #判断按键是否起来,区别长按短按
            press_time += 0.001
        if 0 <= press_time <= 200:      #3秒左右
            print(press_time, 'duanan')
            pixel.fill(color[state])
            if color[state] == (0,0,0):
                text_area.color = 0xffffff
                text_area.text = '这是关闭状态'
                color_palette[0] = 0x7F7F7F
            else:
                text_area.text = '这里显示颜色'
                text_area.color = TEXT_COLOR 
                color_palette[0] = color[state]
            state += 1
            
        elif press_time > 200:
            print(press_time, 'changan') #5s以上
            pixel.fill((0,0,0))
            state = 0
            text_area.color = 0xffffff
            text_area.text = '这是关闭状态'
            color_palette[0] = 0x7F7F7F
            
        press_time = 0





 

最新回复

能找到一些改变屏幕状态的核心语句,还有一定的水平的啊 然后就可以让屏幕同步显示当前彩灯的颜色,那是必然   详情 回复 发表于 2023-9-10 21:21
点赞 关注
 
 

回复
举报

4

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
111111111111111111111111111111111111111111111111
 
 
 

回复

6828

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

能找到一些改变屏幕状态的核心语句,还有一定的水平的啊

然后就可以让屏幕同步显示当前彩灯的颜色,那是必然

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表