是最帅的啊

  • 2020-10-14
  • 回复了主题帖: 【GD32307E-START】开发环境搭建+开发实战->点亮板载LED

    这个link配置能发具体一点么  我配置的不能用  

  • 2020-09-23
  • 发表了主题帖: ESP32学习笔记3 -- WS2812 16*16点阵的点线面绘画

    大家晚上好,上次强占的发帖位这次给大家补上了 上次初步介绍了WS2812的16*16点阵  传送门在这里   ----->   http://bbs.eeworld.com.cn/thread-1141816-1-1.html 有兴趣的可以看一下啊 一个图形是由线条组成的,而线条是由点构成的,那么画点则是重中之重 首先我想建立一个坐标系,就是所有的点都在坐标系上,坐标为横向1-16,纵向1-16 在画点的时候我做种考虑了一下16*16点阵的重要要素 第一要有图形的感念  图形是你要在点阵上面表示的东西  它是一个列表 ,列表里面是数字WS2812的编号 即要点亮和改变的灯  第二要有颜色的感念 每个灯都可以有不同的颜色,颜色是一个列表,里面是一个一个的元组红绿蓝的组合 第三要有页的感念  每一页都是有图形 颜色和非图形以外灯的结合体,我想页是由灯与颜色的对应关系组成 第四要有动态图的感念 ,就是很多个页组成的集合体(我现在还没有写到这里,所以这些是我的猜想) 好吧废话不多说,上干货   画点走起 from machine import Pin from neopixel import NeoPixel import time p5 = Pin(5,Pin.OUT) np = NeoPixel(p5,256) r = g = b = 0 ### 一个变换的点阵图像必须要有以下几个要素 ## 图形 : 每个点阵必须有整个图形存储的空间 ## 当前页 : 当前刷新的页的参数 包括 当前亮的灯 背景颜色 灯颜色 ## 颜色 : 所有包含的颜色列表 ## 过渡 : 是一个过渡列表 yanse = [] tuxing = [] ye = [] def dian(x,y) : #画点函数 任何图形必定是由点组成的 if x == 1 : return 16 - y if x == 2 : return 15 + y if x == 3 : return 48 - y if x == 4 : return 47 + y if x == 5 : return 80 - y if x == 6 : return 79 + y if x == 7 : return 112 - y if x == 8 : return 111 + y if x == 9 : return 144 - y if x == 10 : return 143 + y if x == 11 : return 176 - y if x == 12 : return 175 + y if x == 13 : return 208 - y if x == 14 : return 207 + y if x == 15 : return 240 - y if x == 16 : return 239 + y def hua (x,y) : #画一个点 zi = dian(x,y) np[zi] = (11,22,33) np.write() 通过输入 X和Y的值来计算出灯的编号   比如说点亮10 * 10 的这个灯   会画点了我们就进一步画线 线是由很多个点组成的,因为分辨率实在太低 所以我这里就做了简单的直线和45度斜线 源码如下 from machine import Pin from neopixel import NeoPixel import time p5 = Pin(5,Pin.OUT) np = NeoPixel(p5,256) r = g = b = 0 ### 一个变换的点阵图像必须要有以下几个要素 ## 图形 : 每个点阵必须有整个图形存储的空间 ## 当前页 : 当前刷新的页的参数 包括 当前亮的灯 背景颜色 灯颜色 ## 颜色 : 所有包含的颜色列表 ## 过渡 : 是一个过渡列表 # yanse = [] # tuxing = [] # ye = [] def dian(x,y) : #画点函数 任何图形必定是由点组成的 if x == 1 : return 16 - y if x == 2 : return 15 + y if x == 3 : return 48 - y if x == 4 : return 47 + y if x == 5 : return 80 - y if x == 6 : return 79 + y if x == 7 : return 112 - y if x == 8 : return 111 + y if x == 9 : return 144 - y if x == 10 : return 143 + y if x == 11 : return 176 - y if x == 12 : return 175 + y if x == 13 : return 208 - y if x == 14 : return 207 + y if x == 15 : return 240 - y if x == 16 : return 239 + y def huaxian(x1,y1,x2,y2) : xian = [] x3 = y3 = 0 if x1 == x2 : if y1 == y2 : xian.append(dian(x1,y1)) if y1 > y2 : for i in range (y1-y2+1) : xian.append(dian(x1,y2+i)) if y1 < y2 : for i in range (y2-y1+1) : xian.append(dian(x1,y1+i)) if x1 > x2 : x3 = x1 x1 = x2 x2 = x3 y3 = y1 y1 = y2 y2 = y3 if x1 != x2 : if y1 == y2 : for i in range (x2-x1+1) : xian.append(dian(x1+i,y1)) if y1 > y2 : if y1 - y2 == x2 - x1 : for i in range(x2-x1+1): xian.append(dian(x1+i,y1-i)) if y1 < y2 : if y2 - y1 == x2 - x1 : for i in range(x2-x1+1): xian.append(dian(x1+i,y1+i)) for i in range(len(xian)) : np[xian] = (11,22,33) np.write() 在这里我画了两条线,分别是(1,1)到 (10,10)的和(1,16)到(16,16)的   画完线之后就要画图形了   我在这里先拿了一个硬骨头来啃,就是画三角形。 为啥说三角形是硬骨头呢,看我的思路慢慢道来吧 在低像素中只能画这样8种三角形 那么每种三角形都有一个不同的算法 在画三角形的时候我在函数里面添加了填充或不填充两种选择 具体看函数吧  有问题再帖子下面留言 from machine import Pin from neopixel import NeoPixel import time p5 = Pin(5,Pin.OUT) np = NeoPixel(p5,256) r = g = b = 0 tuxing = [] ### 一个变换的点阵图像必须要有以下几个要素 ## 图形 : 每个点阵必须有整个图形存储的空间 ## 当前页 : 当前刷新的页的参数 包括 当前亮的灯 背景颜色 灯颜色 ## 颜色 : 所有包含的颜色列表 ## 过渡 : 是一个过渡列表 # yanse = [] # tuxing = [] # ye = [] def dian(x,y) : #画点函数 任何图形必定是由点组成的 if x == 1 : return 16 - y if x == 2 : return 15 + y if x == 3 : return 48 - y if x == 4 : return 47 + y if x == 5 : return 80 - y if x == 6 : return 79 + y if x == 7 : return 112 - y if x == 8 : return 111 + y if x == 9 : return 144 - y if x == 10 : return 143 + y if x == 11 : return 176 - y if x == 12 : return 175 + y if x == 13 : return 208 - y if x == 14 : return 207 + y if x == 15 : return 240 - y if x == 16 : return 239 + y def huaxian(x1,y1,x2,y2) : xian = [] x3 = y3 = 0 if x1 == x2 : if y1 == y2 : xian.append(dian(x1,y1)) if y1 > y2 : for i in range(y1-y2+1) : xian.append(dian(x1,y2+i)) if y1 < y2 : for i in range(y2-y1+1) : xian.append(dian(x1,y1+i)) if x1 > x2 : x3 = x1 x1 = x2 x2 = x3 y3 = y1 y1 = y2 y2 = y3 if x1 != x2 : if y1 == y2 : for i in range(x2-x1+1) : xian.append(dian(x1+i,y1)) if y1 > y2 : if y1 - y2 == x2 - x1 : for i in range(x2-x1+1): xian.append(dian(x1+i,y1-i)) if y1 < y2 : if y2 - y1 == x2 - x1 : for i in range(x2-x1+1): xian.append(dian(x1+i,y1+i)) return xian #三角图形,只能画等腰直角三角形,第一个坐标值为三角形直角,最后的t=0为不填充,t=1为填充,默认为0 def sanjiao (x1,y1,x2,y2,x3,y3,t=0): global tuxing x4 = y4 = 0 bian = [] if t == 0 : bian = huaxian(x1,y1,x2,y2) for i in range(len(bian)) : tuxing.append(bian) bian = huaxian(x1,y1,x3,y3) for i in range(len(bian)) : tuxing.append(bian) bian = huaxian(x2,y2,x3,y3) for i in range(len(bian)) : tuxing.append(bian) tuxing = list(set(tuxing)) if t == 1 : if x2 == x3 : if y3 == y2 : tuxing = huaxian(x3,y3,x2,y2) if y2 < y3 : y4 = y2 x4 = x2 y2 = y3 x2 = x3 y3 = y4 x3 = x4 if y3 != y2 : if x1 > x2 : #测试无误 for i in range(x1-x2+1): bian = huaxian(x2+i,y2-i,x3+i,y3+i) for j in range(len(bian)) : tuxing.append(bian[j]) tuxing = list(set(tuxing)) if x2 > x1 : #测试无误 for i in range(x2-x1+1): bian = huaxian(x2-i,y2-i,x3-i,y3+i) for j in range(len(bian)) : tuxing.append(bian[j]) tuxing = list(set(tuxing)) if x2 > x3 : x4 = x2 y4 = y2 x2 = x3 y2 = y3 x3 = x4 y3 = y4 if x2 != x3 : if y3 == y2 : if y1 > y2 : #测试无误 for i in range(y1-y2+1): bian = huaxian(x2+i,y2+i,x3-i,y3+i) for j in range(len(bian)) : tuxing.append(bian[j]) tuxing = list(set(tuxing)) if y2 > y1 : #测试无误 for i in range(y2-y1+1): bian = huaxian(x2+i,y2-i,x3-i,y3-i) for j in range(len(bian)) : tuxing.append(bian[j]) tuxing = list(set(tuxing)) if x1 == x2 : if y2 > y1 : #测试无误 for i in range(y2-y1+1): bian = huaxian(x1,y1+i,x3-i,y3+i) for j in range(len(bian)) : tuxing.append(bian[j]) tuxing = list(set(tuxing)) if y1 > y2 : #测试无误 for i in range(y1-y2+1): print(tuxing) bian = huaxian(x1,y1-i,x3-i,y3-i) for j in range(len(bian)) : tuxing.append(bian[j]) tuxing = list(set(tuxing)) if x1 == x3 : if y3 > y1 : #测试无误 for i in range(y3-y1+1): bian = huaxian(x2+i,y2+i,x1,y1+i) print(x2-i,y2+i,x1,y1+i) for j in range(len(bian)) : tuxing.append(bian[j]) tuxing = list(set(tuxing)) if y1 > y3 : #测试无误 for i in range(y1-y3+1): bian = huaxian(x2+i,y2-i,x1,y1-i) for j in range(len(bian)) : tuxing.append(bian[j]) tuxing = list(set(tuxing)) tuxing.sort() for i in range(len(tuxing)) : np[tuxing] = (1,2,3) np.write() 在这里我画了3个三角形分别是填充和不填充的 接下来就是画方形了 from machine import Pin from neopixel import NeoPixel import time p5 = Pin(5,Pin.OUT) np = NeoPixel(p5,256) r = g = b = 0 tuxing = [] ### 一个变换的点阵图像必须要有以下几个要素 ## 图形 : 每个点阵必须有整个图形存储的空间 ## 当前页 : 当前刷新的页的参数 包括 当前亮的灯 背景颜色 灯颜色 ## 颜色 : 所有包含的颜色列表 ## 过渡 : 是一个过渡列表 # yanse = [] # tuxing = [] # ye = [] def dian(x,y) : #画点函数 任何图形必定是由点组成的 if x == 1 : return 16 - y if x == 2 : return 15 + y if x == 3 : return 48 - y if x == 4 : return 47 + y if x == 5 : return 80 - y if x == 6 : return 79 + y if x == 7 : return 112 - y if x == 8 : return 111 + y if x == 9 : return 144 - y if x == 10 : return 143 + y if x == 11 : return 176 - y if x == 12 : return 175 + y if x == 13 : return 208 - y if x == 14 : return 207 + y if x == 15 : return 240 - y if x == 16 : return 239 + y def huaxian(x1,y1,x2,y2) : xian = [] x3 = y3 = 0 if x1 == x2 : if y1 == y2 : xian.append(dian(x1,y1)) if y1 > y2 : for i in range(y1-y2+1) : xian.append(dian(x1,y2+i)) if y1 < y2 : for i in range(y2-y1+1) : xian.append(dian(x1,y1+i)) if x1 > x2 : x3 = x1 x1 = x2 x2 = x3 y3 = y1 y1 = y2 y2 = y3 if x1 != x2 : if y1 == y2 : for i in range(x2-x1+1) : xian.append(dian(x1+i,y1)) if y1 > y2 : if y1 - y2 == x2 - x1 : for i in range(x2-x1+1): xian.append(dian(x1+i,y1-i)) if y1 < y2 : if y2 - y1 == x2 - x1 : for i in range(x2-x1+1): xian.append(dian(x1+i,y1+i)) return xian #方形的两个对角点确定一个方形 t = 0 时画框 t = 1 时填充 def fangxing (x1,y1,x2,y2,t=0) : global tuxing bian = [] x3 = y3 = 0 if x1 == x2 : tuxing = huaxian(x1,y,x2,y2) if x1 > x2 : x3 = x1 y3 = y1 x1 = x2 y1 = y2 x2 = x3 y2 = y3 if x1 != x2 : if y1 == y2 : tuxing = huaxian(x1,y,x2,y2) if y1 > y2 : for i in range(y1-y2+1): bian = huaxian(x1,y1-i,x2,y1-i) for j in range(len(bian)) : tuxing.append(bian[j]) if y2 > y1 : for i in range(y2-y1+1): bian = huaxian(x1,y1+i,x2,y1+i) for j in range(len(bian)) : tuxing.append(bian[j]) tuxing = list(set(tuxing)) tuxing.sort() for i in range(len(tuxing)) : np[tuxing] = (1,2,3) np.write() 画方形 这里画了一个(5,7)(7,13) 今天太累了  有什么提问就在下面留言吧    爱你们呦   回家睡觉了 

  • 2020-09-22
  • 回复了主题帖: 求一款音频频谱芯片

    huo_hu 发表于 2020-9-22 10:56 有这种芯片吗? 你要做几个灯的频谱?少的话用模电搭也行.灯多或者深度要求高还是单片机来的方便,都是现成 ...
    有这种芯片的,在淘宝上做好的成品,但是我想自己DIY一个,灯的数量我想有100个以上。现在不太想用单片机。

  • 发表了主题帖: 求一款音频频谱芯片

    自己想DIY一个蓝牙音箱,带有led频谱显示,限制于成本与时间的问题不太想使用单片机,所以在这里求一个音频频谱芯片,能直接驱动LED的那种。若有合适的推荐,我会发DIY音箱全过程的帖子,并在帖子上特别感谢。

  • 回复了主题帖: 【测评入选名单公布】兆易GD32307E-START开发板测评

    已确认个人信息,确定能按时完成测评计划

  • 2020-09-21
  • 回复了主题帖: EEWorld "搜器件"小程序上线啦,随手查阅器件数据,让选芯更轻松

    加鸡腿

  • 回复了主题帖: 强占发帖位,ESP32---WS2812 16*16点阵 画点线面

    知道你肚子饿了 ,吃完饭回来继续敲啊

  • 发表了主题帖: 强占发帖位,ESP32---WS2812 16*16点阵 画点线面

    强占发帖位,ESP32---WS2812 16*16点阵  画点线面

  • 2020-09-19
  • 回复了主题帖: ESP32学习笔记2---WS2812 16*16 点阵

    那个灯全部变红的我一不小心忘记贴代码了,现在代码如下 from machine import Pin from neopixel import NeoPixel import time p5 = Pin(5,Pin.OUT) np = NeoPixel(p5,256) r = g = b = 0 yanse = [] zhongjian = [] #保存颜色的缓存中间列表 def shuzu(): #数组,保存和改变颜色的缓存区 global r,g,b for i in range (256) : if i < 32 : r = r + 1 if i >= 32 and i < 64 : g = g + 1 if i >= 64 and i < 96 : r = r - 1 if i >= 96 and i < 128 : b = b + 1 if i >= 128 and i < 160 : g = g - 1 if i >= 160 and i < 192 : r = r + 1 if i >= 192 and i < 224 : g = g + 1 if i >= 224 : r = r - 1 g = g - 1 b = b - 1 yanse.append((r,g,b)) def bianhuan(): #变换队列的函数 for i in range (16) : #先把前面16位颜色数据保存起来 zhongjian.append((yanse[i])) j = 16 #第一排已经保存下来了 ,第二排要向前一排,所以从第16位开始 for i in range(15) : #一共要进行15排的变化 for k in range (1,33,2) : #第16->15,17->14,18->13以此类推 yanse[j-k] =yanse[j] j = j + 1 for i in range (16) : #把最后排颜色更改 yanse[255-i] = zhongjian[i] for i in range(256) : np[i] = yanse[i] shuzu() while 1 : bianhuan() np.write()  

  • 发表了主题帖: ESP32学习笔记2---WS2812 16*16 点阵

    距离上一次发帖也有好长时间了,因为工作比较忙所以就把学习进度缓了缓。之后呢 我会努力的更细自己的学习状况和经验分享。 之前买过一条WS2812的灯带,觉得很好玩,就想自己焊一个点阵来玩。就在淘宝上搜了一下这个灯珠,然后无意间看到了这个16*16的点阵。如果是自己做的话这个PCB钱就很贵,然后焊接起来点阵有256个,估计眼睛都能焊花,淘宝上价格也不贵一块板子才55块,所以直接买来玩了。   然后尝试着点亮一些灯源代码如下 from machine import Pin from neopixel import NeoPixel import time p5 = Pin(5,Pin.OUT) ###定义引脚 np = NeoPixel(p5,256)###定义灯的个数 r = g = b = 0 yanse = [] ###缓存区 for i in range (256): ###缓存区赋值 if i < 80 : r = r + 1 if i >= 80 and i < 160 : r = 0 g = g + 1 if i >= 160 : g = 0 b = b + 1 yanse.append ((r,g,b)) for i in range (256): np = yanse np.write() ###写入 简单的定义了一些颜色 就开始想着能不能让点阵动起来呢,形成一个跑马灯 from machine import Pin from neopixel import NeoPixel import time p5 = Pin(5,Pin.OUT) np = NeoPixel(p5,256) r = g = b = 0 yanse = [] for i in range (256): if i < 80 : r = r + 1 if i >= 80 and i < 160 : r = 0 g = g + 1 if i >= 160 : g = 0 b = b + 1 yanse.append ((r,g,b)) while 1 : for i in range (256): np= yanse np.write() a = yanse[0] #保存第一个颜色 for i in range (256): #把每一种颜色在列表里面向前挪一位 if i <255: yanse = yanse [i+1] else : yanse = a #把第一个颜色放在255位上 形成一个循环 现在呢完成了跑马灯测试,但是灯的颜色还是很少,这个灯说是有256*256*256种颜色,那么我就多写几种颜色吧 from machine import Pin from neopixel import NeoPixel import time p5 = Pin(5,Pin.OUT) np = NeoPixel(p5,256) r = g = b = 0 yanse = [] for i in range (256) :#添加多一点颜色 if i < 32 : r = r + 1 if i >= 32 and i < 64 : g = g + 1 if i >= 64 and i < 96 : r = r - 1 if i >= 96 and i < 128 : b = b + 1 if i >= 128 and i < 160 : g = g - 1 if i >= 160 and i < 192 : r = r + 1 if i >= 192 and i < 224 : g = g + 1 if i >= 224 : r = r - 1 g = g - 1 b = b - 1 yanse.append((r,g,b)) while 1 : for i in range (256): np= yanse np.write() a = yanse[0] for i in range (256): if i <255: yanse = yanse [i+1] else : yanse = a 我这个没有加延时,可以看出来如果是刷新起来的话256个灯还是有点慢的,最起码肉眼可以看得到的   那么继续往下走,能不能一排一排的变换呢 因为这个灯的排列方式是蛇形排列的,所以呢要一排一排的变化要有在代码上做点改变   如图这么做有一个bug,就是最后所有颜色都会变成第一排的红色,我仔细看了一下我的源代码,发现我保存列表     zhongjian  的时候使用的是全局变量,所以会导致最后都变红。修改后的代码如下: from machine import Pin from neopixel import NeoPixel import time p5 = Pin(5,Pin.OUT) np = NeoPixel(p5,256) r = g = b = 0 yanse = [] def shuzu(): global r,g,b for i in range (256) : if i < 32 : r = r + 1 if i >= 32 and i < 64 : g = g + 1 if i >= 64 and i < 96 : r = r - 1 if i >= 96 and i < 128 : b = b + 1 if i >= 128 and i < 160 : g = g - 1 if i >= 160 and i < 192 : r = r + 1 if i >= 192 and i < 224 : g = g + 1 if i >= 224 : r = r - 1 g = g - 1 b = b - 1 yanse.append((r,g,b)) def bianhuan(): zhongjian = [] #改成了局部变量 for i in range (16) : zhongjian.append((yanse)) j = 16 for i in range(15) : for k in range (1,33,2) : yanse[j-k] =yanse[j] j = j + 1 for i in range (16) : yanse[255-i] = zhongjian for i in range(256) : np = yanse shuzu() while 1 : bianhuan() np.write() 这一期我就先做到这里了,下一期我会做汉字的显示和一些动态的小游戏 末尾彩蛋   圣诞之夜  中间绿色的是一颗圣诞树,然后飘着雪花,雪花可是能堆满消减的。   如果大家喜欢的话,就点个赞发个品论吧

  • 2020-09-18
  • 回复了主题帖: 强行占一个帖子位,明天分享学习ESP32控制WS812 16*16点阵变换的经验

    那你就别玩手机啦  ,赶紧起来敲代码

  • 发表了主题帖: 强行占一个帖子位,明天分享学习ESP32控制WS812 16*16点阵变换的经验

    强行占一个帖子位,明天分享学习ESP32控制WS812  16*16点阵变换的经验

  • 2020-09-16
  • 回复了主题帖: 【DIY创意LED】参考设计(原理图+PCB)

    表示第一时间就看到了,点赞  

  • 2020-09-15
  • 回复了主题帖: 【我与雅特力】DIY个AT32板子,好感度爆满

    好牛啊    

  • 2020-09-14
  • 回复了主题帖: Digi-Key KOL视频来袭~带你进入MicroPython的奇妙世界

    每天都要有进步  

  • 加入了学习《Digikey KOL系列:欢迎进入MicroPython的奇妙世界》,观看 欢迎进入MicroPython的奇妙世界

  • 2020-09-10
  • 回复了主题帖: 原与源

    我觉得两个字寓意都不错  最起码不是圆

  • 回复了主题帖: 三极管做开关时电阻匹配问题!

    我也想知道  持续关注中  

  • 2020-09-08
  • 回复了主题帖: 论坛里面是不是没人了?

    我每天就来看一眼

  • 回复了主题帖: 国产芯之 TLSR8285 / TLSR8278 多协议无线芯片

    我也是比较讨厌这一点,国产芯片给我弄个全英文文档,真是够够了

最近访客

< 1/1 >

统计信息

已有8人来访过

  • 芯币:15
  • 好友:1
  • 主题:6
  • 回复:20
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言