【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百五十二:ESP32-S3 RGB-LED矩阵开发板 Matrix陀螺仪QMI8658C模块
项目之六:ESP32S3矩阵Matrix开发板之循环显示文本字符
实验开源代码
- /*
- 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
- 实验二百五十二:ESP32-S3 RGB-LED矩阵开发板 Matrix陀螺仪QMI8658C模块
- 项目之六:ESP32S3矩阵Matrix开发板之循环显示文本字符
- */
-
- #include <Adafruit_NeoPixel.h>
-
- #define LED_PIN 14
- #define LED_COUNT 64 // 8x8矩阵,共64个LED
- #define BRIGHTNESS 50 // 设置亮度
-
- Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_RGB + NEO_KHZ800);
-
- // 定义 A-B-C-E-F-G 的 LED 点阵(正常显示)
- const uint8_t alphabet[][8] = {
- {0x3E, 0x09, 0x09, 0x09, 0x3E, 0x00, 0x00, 0x00}, // A
- {0x3F, 0x25, 0x25, 0x25, 0x1A, 0x00, 0x00, 0x00}, // B
- {0x1E, 0x21, 0x21, 0x21, 0x12, 0x00, 0x00, 0x00}, // C
- {0x3F, 0x21, 0x21, 0x21, 0x1E, 0x00, 0x00, 0x00}, // E
- {0x3F, 0x09, 0x09, 0x09, 0x01, 0x00, 0x00, 0x00}, // F
- {0x1E, 0x21, 0x29, 0x29, 0x3A, 0x00, 0x00, 0x00} // G
- };
-
- char textArray[] = {'A', 'B', 'C', 'E', 'F', 'G'};
- int textIndex = 0;
-
- void setup() {
- strip.begin();
- strip.setBrightness(BRIGHTNESS);
- strip.show();
- }
-
- void loop() {
- strip.clear();
- displayCharacter(textArray[textIndex]); // 显示当前字符
- textIndex = (textIndex + 1) % 6; // 循环切换字符
- delay(1000); // 延时
- }
-
- void displayCharacter(char character) {
- int index = getCharacterIndex(character);
- if (index == -1) return;
-
- for (int row = 0; row < 8; row++) {
- uint8_t line = alphabet[index][row]; // 获取当前行数据
- line = reverseBits(line); // **镜像翻转行数据**
-
- for (int col = 0; col < 8; col++) {
- if (line & (1 << col)) { // 判断该像素是否应该亮起
- int ledIndex = row * 8 + col;
- strip.setPixelColor(ledIndex, strip.Color(255, 255, 255)); // 显示白色
- }
- }
- }
- strip.show();
- }
-
- // **新增:左右翻转位数据**
- uint8_t reverseBits(uint8_t b) {
- uint8_t reversed = 0;
- for (int i = 0; i < 8; i++) {
- reversed <<= 1;
- reversed |= (b & 1);
- b >>= 1;
- }
- return reversed;
- }
-
- int getCharacterIndex(char character) {
- for (int i = 0; i < 6; i++) {
- if (textArray[i] == character) return i;
- }
- return -1;
- }
复制代码
|