十分Funny的点阵显示器
周日闲暇时光,无意间发现这个有趣的点阵显示器:9行16列的256级PWM型灰度显示器,十分有趣,竟然玩了几个小时!
使用4线接口,2根电源线,2根I2C串行通讯接口线。采用标准的I2C接口,按说明书找到I2C从地址为0x74。自己依然保存着这个显示器模块配套的4芯线,与LinkIoT的扩展底板完全兼容。硬件连接如下图:
LinkIoT和LED9x16灰度阵列显示器的连接
接下来就用Arduino IDE和LinkIoT BSP实现几个有趣的想法。
DIY的几种显示效果
先上动图,看效果再评论我的创意!
波浪翻滚
设计一幅波浪翻滚的模拟图案,实际的算法是咋样?真的让我脑痛了还一阵子,在草稿纸上画了很多种方案,终于找到一种3层嵌套循环的简单思路!
模拟地上鞭炮爆炸的效果
这算是今天最得意的作品吧!只是没有在春节期间做出来玩一玩。
滚动显示文本
路边的广告牌就是这个道理:小模块+小模块+..+小模块,然后用这个滚屏显示的思路,神马信息都能如此show。
算法分享
- 波浪翻滚的算法
#include <LED9x16Matrix_ESP.h>
LED9x16Matrix ledmatrix;
void setup() {
ledmatrix.begin();
ledmatrix.clear();
}
void loop() {
uint8_t incr=0, x=7, y=4;
uint8_t sweep[] = {1, 2, 4, 8, 15, 30, 60, 60, 30, 15, 8, 4, 2, 1};
for (incr = 0; incr < 14; incr++) {
for (x = 0; x < 16; x++) {
for (y = 0; y < 9; y++) {
ledmatrix.drawPixel(x, y, sweep[(x+y+incr)%14]);
}
}
}
}
- 鞭炮爆炸的模拟算法
#include <LED9x16Matrix_ESP.h>
LED9x16Matrix ledmatrix;
void setup() {
ledmatrix.begin();
ledmatrix.clear();
}
void loop() {
uint8_t xc, yc, dt;
// 模拟放鞭炮的效果,中心点最亮,依次越来越暗,中心点最先消失
// 中心点的位置是随机的,持续时间也是随机的
xc = random(2, 14); yc = random(2, 7);
dt = random(20, 41);
ledmatrix.drawPixel(xc, yc, 127);
delay(dt+10);
ledmatrix.drawCircle(xc, yc, 1, 64);
delay(dt);
ledmatrix.clear();
ledmatrix.drawCircle(xc, yc, 2, 8);
ledmatrix.drawCircle(xc, yc, 3, 2);
delay(60-dt);
ledmatrix.clear();
delay(10);
}
- 滚动显示字符串
#include <LED9x16Matrix_ESP.h>
LED9x16Matrix ledmatrix;
void setup() {
ledmatrix.begin();
ledmatrix.showText("Hello World");
}
void loop() {
static uint8_t c=0;
ledmatrix.showNumber(c);
delay(10);
}
安装Arduino依赖库
如果你已经安装了Arduino IDE,实现上述的效果需要安装LinkIoT BSP依赖库
,这个依赖库具有上述示例所依赖的开源代码,我们可以直接使用。