1363|8

1万

帖子

14

资源

版主

【DIY创意LED】WS2812效果显示文件 [复制链接]

本帖最后由 dcexpert 于 2020-10-8 10:38 编辑

这次将LED的效果显示单独拿出来,可以编写各种效果,就看大家的创造力了。

 

一个效果文件的基本程序结构如下(这是一个红色呼吸灯的效果):

 

from common import *

def run():
    clear(np)
    n = 0
    while 1:
        clear(np, (abs(32-n), 0, 0))
        n = (n + 1)%64
        sleep_ms(100)
    
  1. 每个效果文件可以 import common,使用预定义的 np 实例和通用函数。
  2. 每个效果文件必须包含一个 run() 函数,它将由主程序调用。
  3. 每个run()函数主体是一个无限循环。
  4. 效果文件中尽量不涉及其它硬件功能,避免冲突

 

 

其它:

  1. 文件名是 ef_xxxx.py 形式,不要用中文或特殊字符,支持长文件名。
  2. 每个文件都是独立的,互不关联。
  3. 编写好的效果文件复制到ESP8266中,重新启动一次就可以使用,不需要修改主程序。

 

此帖出自单片机论坛

回复

1万

帖子

14

资源

版主

 已经编写了二十种左右的效果,选几个给大家参考,其它的后续整理出来会放在github和给gitee上。每个效果文件代码都很简单,但是实际效果不错,作为氛围灯特别好。

 

火焰跳动效果

from common import *

def run():
    clear(np)
    while 1:
        for i in range(8):
            d = rand(32)
            np[i] = (d*2, d, 0)
        np.write()
        sleep_ms(150)

 

旋转+随机效果

from common import *

def run():
    while 1:
        cnt = rand(2000)
        d = 2 - rand(5)
        for i in range(cnt):
            rotate(np, d)
            np[rand(np.n)] = (rand(32), rand(32), rand(32))
            np.write()
            sleep_ms(75)

 

随机

 

from common import *

def run():
    while 1:
        np[rand(np.n)] = (rand(32), rand(32), rand(32))
        np.write()
        sleep_ms(20)

 

 


回复

1万

帖子

14

资源

版主

太极

 

from common import *

def run():

    while 1:

        d = 48 // np.n
        r = rand(2)
        g = rand(2)
        b = rand(2)
        if r+g+b == 0:
            r = g = b = 1
        for i in range(np.n):
            np[i] = [i*d*r, i*d*g, i*d*b]
        np.write()

        cnt = rand(500) + 100
        d = 1 if rand()%2 else -1
        for i in range(cnt):
            rotate(np, d)
            np.write()
            sleep_ms(80)

 

太极2

from common import *

def run():

    d = 48 // np.n
    for i in range(np.n//2):
        np[-i] = [i*d, 0, 0]
        np[-i+np.n//2] = [0, 0, i*d]

    while 1:
        cnt = rand(500) + 100
        d = 1 if rand()%2 else -1
        for i in range(cnt):
            rotate(np, d)
            np.write()
            sleep_ms(80)

 


回复

1万

帖子

14

资源

版主

 彩虹呼吸灯

from common import *

def run():

    while 1:

        for i in range(7):
            for j in range(128):
                n = j if j < 64 else 127 - j
                r = rainbow_color[i][0]*n // 256
                g = rainbow_color[i][1]*n // 256
                b = rainbow_color[i][2]*n // 256
                clear(np, [r, g, b])
                sleep_ms(20)

 

旋转彩虹

from common import *

def run():
    clear(np)
    for i in range(7):
        r = rainbow_color[i][0] * MAX_BRIGHT // 512
        g = rainbow_color[i][1] * MAX_BRIGHT // 512
        b = rainbow_color[i][2] * MAX_BRIGHT // 512
        np[i] = [r, g, b]
    
    while 1:
        cnt = rand(500) + 100
        d = 1 if rand()%2 else -1
        dl = rand(90) + 50
        for i in range(cnt):
            rotate(np, d)
            np.write()
            sleep_ms(dl)
        

 


回复

1万

帖子

14

资源

版主

 时钟1

from common import *

def run():
    n = 0
    while 1:
        clear(np)
        n = (n + np.n - 1)%np.n
        np[n] = (rand(32),rand(32),rand(32))
        np.write()
        sleep_ms(1000)

 

时钟2

from common import *

def run():
    n = 0
    while 1:
        n = (n + np.n - 1)%np.n
        np[n] = (rand(32),rand(32),rand(32))
        np.write()
        sleep_ms(500)
        clear(np)
        np.write()
        sleep_ms(500)

 


回复

1万

帖子

14

资源

版主

 莫尔斯码显示python之禅

from common import *

MORSECODE = {
  'A':(0,1),
  'B':(1,0,0,0),
  'C':(1,0,1,0),
  'D':(1,0,0),
  'E':(0,),
  'F':(0,0,1,0),
  'G':(1,1,0),
  'H':(0,0,0,0),
  'I':(0,0),
  'J':(0,1,1,1),
  'K':(1,0,1),
  'L':(0,1,0,0),
  'M':(1,1),
  'N':(1,0),
  'O':(1,1,1),
  'P':(0,1,1,0),
  'Q':(1,1,0,1),
  'R':(0,1,0),
  'S':(0,0,0),
  'T':(1,),
  'U':(0,0,1),
  'V':(0,0,0,1),
  'W':(0,1,1),
  'X':(1,0,0,1),
  'Y':(1,0,1,1),
  'Z':(1,1,0,0),
  '0':(1,1,1,1,1),
  '1':(0,1,1,1,1),
  '2':(0,0,1,1,1),
  '3':(0,0,0,1,1),
  '4':(0,0,0,0,1),
  '5':(0,0,0,0,0),
  '6':(1,0,0,0,0),
  '7':(1,1,0,0,0),
  '8':(1,1,1,0,0),
  '9':(1,1,1,1,0),
  '.':(0,1,0,1,0,1),
  ':':(1,1,1,0,0,0),
  ',':(1,1,0,0,1,1),
  ';':(1,0,1,0,1,0),
  '?':(0,0,1,1,0,0),
  '=':(1,0,0,0,1),
  '\'':(0,1,1,1,1,0),
  '/':(1,0,0,1,0),
  '!':(1,0,1,0,1,1),
  '-':(1,0,0,0,0,1),
  '_':(0,0,1,1,0,1),
  '"':(0,1,0,0,1,0),
  '(':(1,0,1,1,0),
  ')':(1,0,1,1,0,1),
  '$':(0,0,0,1,0,0,1),
  '&':(0,1,0,0,0),
  '@':(0,1,1,0,1),
  '+':(0,1,0,1,0)
}

MDT = 200

def morse(me):

    for i in range(len(me)):
        try:
            c = me.upper()[i]
            d = MORSECODE[c]
        except:
            continue

        print(c, d)

        for i in range(len(d)):
            print(d[i])
            clear(np, 32)
            if d[i]:
                sleep_ms(MDT*3)
            else:
                sleep_ms(MDT)
            clear(np)
            sleep_ms(MDT)

        sleep_ms(MDT*5)


PYZEN = "\
Beautiful is better than ugly.\
Explicit is better than implicit.\
Simple is better than complex.\
Complex is better than complicated.\
Flat is better than nested.\
Sparse is better than dense.\
Readability counts.\
Special cases aren't special enough to break the rules.\
Although practicality beats purity.\
Errors should never pass silently.\
Unless explicitly silenced.\
In the face of ambiguity, refuse the temptation to guess.\
There should be one-- and preferably only one --obvious way to do it.\
Although that way may not be obvious at first unless you're Dutch.\
Now is better than never.\
Although never is often better than *right* now.\
If the implementation is hard to explain, it's a bad idea.\
If the implementation is easy to explain, it may be a good idea.\
Namespaces are one honking great idea -- let's do more of those!\
"

def run():
    morse('Hello, world.')
    while 1:
        morse(PYZEN)

 


回复

5250

帖子

18

资源

五彩晶圆(中级)

没动图呢,想象不出来,哈哈.

个人签名

默认摸鱼


回复

196

帖子

0

资源

一粒金砂(中级)

这些每一个效果就是需要一个文件单独保存,而不能放一个文件中

点评

目前的系统架构就是每个效果单独文件,简单方便,可以随时添加而不影响其它文件。   如果想放在一个文件中,就需要稍微修改主程序,并将每个效果存放到一个函数中。  详情 回复 发表于 2020-12-19 17:33
个人签名单片机软件/硬件交流群:127034610

回复

1万

帖子

14

资源

版主

liushiming82 发表于 2020-12-19 10:51 这些每一个效果就是需要一个文件单独保存,而不能放一个文件中

目前的系统架构就是每个效果单独文件,简单方便,可以随时添加而不影响其它文件。

 

如果想放在一个文件中,就需要稍微修改主程序,并将每个效果存放到一个函数中。


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

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/9 下一条

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

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

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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