【花雕学编程】Arduino动手做(252)---ESP32-S3-RGB-LED 矩阵开发板之循环显示文本字符

在这里插入图片描述

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百五十二:ESP32-S3-RGB-LED矩阵 WiFi蓝牙陀螺仪姿态传感器QMI8658C开发板

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

【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;
}

这段代码的作用是让 WS2812 LED矩阵 按 A-B-C-D-F-G 的顺序循环显示字符。它的主要逻辑如下:

1、初始化LED矩阵:

设置 LED 的引脚和数量 (LED_PIN, LED_COUNT)。

设置 LED 亮度 (BRIGHTNESS)。

strip.begin() 开启 LED 控制。

2、定义要显示的字符:

使用 textArray 存储需要循环展示的字符:{‘A’, ‘B’, ‘C’, ‘E’, ‘F’, ‘G’}。

3、循环显示字符:

每次进入 loop():

清除 LED (strip.clear())。

调用 displayCharacter() 显示当前字符。

更新索引 (textIndex) 以显示下一个字符,确保循环。

4、显示字符逻辑:

displayCharacter(char character) 让 LED 矩阵展示某个字符。

shouldLightUp(char character, int ledIndex) 计算哪些 LED 需要点亮,展示不同字符。

5、优化点:

shouldLightUp() 只是个简单示例,实际应用中需要定义具体 LED 点亮位置,使字符更清晰。

你可以修改 delay(1000) 调整字符切换速度。

可以增加颜色变换效果,让显示更丰富。

实验场景图 动态图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值