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() |