764|2

9

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子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)                                 //延时
   

 

     

最新回复

WS2812B的控制和屏幕显示的一个结合,不错的倡议,可以在屏幕在开出一个区域显示   详情 回复 发表于 2023-10-24 08:52
点赞 关注
 
 

回复
举报

6995

帖子

11

TA的资源

版主

沙发
 
这个控制跑得非常好,有创决的一个作业呀!
 
 
 

回复

6500

帖子

10

TA的资源

版主

板凳
 

WS2812B的控制和屏幕显示的一个结合,不错的倡议,可以在屏幕在开出一个区域显示

个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

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

随便看看
查找数据手册?

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