前言
通过之前的学习,我们学会如何点亮BPI-BIT开发板上面的全彩LED矩阵,在本节中,我们利用之前学过的知识用全彩LED矩阵来制作从10~1的倒计时数字灯。
操作环境
- 测试使用的开发板: bpi-bit v1.4
- 应用到的外设: WS2812b
- 测试使用的软件: vscode上的插件platformIO
代码示例
以上红框内的四个函数是我在main.cpp内封装好的函数,我们需要在<Arduino.h>文件中声明才能在主函数中使用。(函数的含义在代码中会解释)
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
#define PIN 4
Adafruit_NeoPixel strip = Adafruit_NeoPixel(25,PIN,NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
strip.setBrightness(35);//设置亮度
strip.show();
}
void loop() {
for(int i=10;i>=1;i--)//循环控制全彩LED矩阵显示从数字10~1
{
Number(i);//Number()函数内的参数i表示LED矩阵显示的数字
delay(1000);
clean();//清屏
}
delay(1000);
}
void Led(int a,int b,int c,int d,int e )//控制每列小灯(总共五列)
{
if(a==1)
{
for(int i =0;i<=4;i++)
{
Single(i);
delay(20);
}
}
if(b==1)
{
for(int i =5;i<=9;i++)
{
Single(i);
delay(20);
}
}
if(c==1)
{
for(int i =10;i<=14;i++)
{
Single(i);
delay(20);
}
}
if(d==1)
{
for(int i =15;i<=19;i++)
{
Single(i);
delay(20);
}
}
if(e==1)
{
for(int i =20;i<=24;i++)
{
Single(i);
delay(20);
}
}
}
void Single(int x)//点亮小灯的函数
{
strip.setPixelColor(x, 0,0,255);
strip.show();
}
void Number(int y)//函数的形参为几,LED矩阵就显示数字几。
{
switch(y)
{
case 10:
Led(1,0,1,0,1);
Single(5);
Single(9);
delay(20);
break;
case 9:
Led(0,1,0,0,0);
Single(10);
Single(12);
Single(14);
Single(19);
for(int i = 15;i<=17;i++)
{
Single(i);
}
delay(20);
break;
case 8:
Led(0,1,0,1,0);
Single(10);
Single(12);
Single(14);
delay(20);
break;
case 7:
Led(0,1,0,0,0);
Single(10);
Single(15);
delay(20);
break;
case 6:
Led(0,0,0,1,0);
Single(5);
Single(10);
Single(12);
Single(14);
for(int i = 7;i<=9;i++)
{
Single(i);
}
delay(20);
break;
case 5:
Number(6);
strip.setPixelColor(18,0,0,0);
strip.show();
break;
case 4:
Led(0,0,1,0,0);
for(int i=2;i<=22;i+=5)
{
Single(i);
}
Single(16);
delay(20);
break;
case 3:
Led(0,1,0,1,0);
Single(10);
Single(12);
Single(14);
strip.setPixelColor(16, 0,0,0);
strip.setPixelColor(18, 0,0,0);
strip.show();
delay(20);
break;
case 2:
Led(0,1,0,1,0);
Single(10);
Single(12);
Single(14);
delay(20);
strip.setPixelColor(8, 0,0,0);
strip.setPixelColor(16, 0,0,0);
strip.show();
break;
case 1:
Led(0,0,1,0,0);
delay(20);
break;
}
}
void clean()//清屏
{
for(int i = 0;i<=24;i++)
{
strip.setPixelColor(i, 0,0,0);
strip.show();
}
}