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[i] = yanse[i]
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[i]= yanse[i]
np.write()
a = yanse[0]
for i in range (256):
if i <255:
yanse [i] = yanse [i+1]
else :
yanse[i] = a
现在呢完成了跑马灯测试,但是灯的颜色还是很少,这个灯说是有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[i]= yanse[i]
np.write()
a = yanse[0]
for i in range (256):
if i <255:
yanse [i] = yanse [i+1]
else :
yanse[i] = 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[i]))
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[i]
for i in range(256) :
np[i] = yanse[i]
shuzu()
while 1 :
bianhuan()
np.write()
这一期我就先做到这里了,下一期我会做汉字的显示和一些动态的小游戏
末尾彩蛋 圣诞之夜
中间绿色的是一颗圣诞树,然后飘着雪花,雪花可是能堆满消减的。
如果大家喜欢的话,就点个赞发个品论吧
|