跳到主要内容

LED 点阵

开发板正面是一块 12 列 × 8 行、共 96 颗红色 LED 的点阵。点阵由 RA4M1 以 Charlieplexing 方式驱动,使用独立引脚,不占用排针资源,可在运行其它程序的同时显示内容。

准备工作​

点阵驱动库 Arduino_LED_Matrix 随 UNO R4 核心一起安装,无需单独下载。需要显示滚动文字时,另在库管理器中安装 ArduinoGraphics。

包含顺序

同时使用两个库时,ArduinoGraphics 必须在 Arduino_LED_Matrix 之前包含,否则编译报错。

显示内置图案​

库中预置了表情与动画帧,可直接加载。

#include "Arduino_LED_Matrix.h"

ArduinoLEDMatrix matrix;

void setup() {
Serial.begin(115200);
matrix.begin();
}

void loop() {
matrix.loadFrame(LEDMATRIX_EMOJI_BASIC);
}

把 LEDMATRIX_EMOJI_BASIC 换成其它常量即可显示不同内容,例如 LEDMATRIX_HEART_BIG、LEDMATRIX_EMOJI_HAPPY。

需要播放动画序列时,使用 loadSequence() 配合 play():

#include "Arduino_LED_Matrix.h"

ArduinoLEDMatrix matrix;

void setup() {
Serial.begin(115200);
matrix.loadSequence(LEDMATRIX_ANIMATION_STARTUP);
matrix.begin();
matrix.play(true);
}

void loop() {
}

自定义图案​

用二维数组描述每一颗 LED 的亮灭,1 点亮、0 熄灭,再交给 renderBitmap() 显示:

#include "Arduino_LED_Matrix.h"

ArduinoLEDMatrix matrix;

uint8_t frame[8][12] = {
{ 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0 },
{ 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0 },
{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

void setup() {
Serial.begin(115200);
matrix.begin();
}

void loop() {
matrix.renderBitmap(frame, 8, 12);
delay(500);
}

数组按 frame[行][列] 访问,第 0 行在最上方,第 0 列在最左侧。renderBitmap() 的两个参数依次是行数和列数,顺序不要写反。修改数组中的某个元素后重新调用 renderBitmap() 即可更新画面。

滚动文字​

需要 ArduinoGraphics 库支持:

#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"

ArduinoLEDMatrix matrix;

void setup() {
Serial.begin(115200);
matrix.begin();
}

void loop() {
matrix.beginDraw();
matrix.stroke(0xFFFFFFFF);
matrix.textScrollSpeed(50);

const char text[] = " Hello World! ";
matrix.textFont(Font_5x7);
matrix.beginText(0, 1, 0xFFFFFF);
matrix.println(text);
matrix.endText(SCROLL_LEFT);

matrix.endDraw();
}

文字开头和结尾各留几个空格,滚动衔接会更自然。textScrollSpeed() 的数值越大滚动越慢。

显示效果不理想时​

现象检查方向
编译提示找不到 Arduino_LED_Matrix.h板型未选择 Arduino UNO R4 WiFi,或 UNO R4 核心未安装完成
图案方向反了frame 数组的行、列顺序写反,或数组维度与 renderBitmap() 的参数不一致
文字不滚动未调用 matrix.endDraw(),或缺少 ArduinoGraphics 库
点阵常亮或闪烁异常程序在 loop() 中反复初始化点阵,把 matrix.begin() 移回 setup()