漂移菌 发表于 3 天前

ESP32-C5 连载系列之我心永恒哈哈

前些日子忙碌的不要不要的,平时下班回家也没精力折腾了,周末在家整理电子垃圾的时候,突然翻出来一个很久以前使用的RGB 8x8 的点阵,手里正好还有ESP32-C5 这块板子,结合IO底板那是非常的适合去点亮我的RGB,让它不再蒙尘,再现世间~

于是乎,说干就干,迅速找到一些杜邦线,然后就开始硬件连连看了~



接线方式文本版如下:
8x8 RGB 点阵          ESP32-C5
VCC                           3V3
GND                        GND
CLK                            23/SCLK
CE                              3
MOSI                         24/MO

然后创建sketch:
arduino-cli sketch new matrix_8x8
cd matrix_8x8/
vim matrix_8x8.ino添加代码:
#include <SPI.h>

// 定义点阵的引脚
#define CLK_PIN 23 // 时钟线引脚
#define MOSI_PIN 24 // 数据线引脚
#define CS_PIN 3 // 片选线引脚

static uint8_t data = {0x0, 0x0,0x0,0x0};

// 定义大心图案的数组
void heartbig()
{
int j;
static uint8_t heart = {0x00, 0x66, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};

for ( j = 0; j < 8; j++)
{
    // data = ~heart;
    data = ~heart;
    // data = heart; //蓝色
    data = 0xFF;
    data = 0xFF;
    data = 0x01 << j ;
    digitalWrite(CS_PIN, LOW);
    delayMicroseconds(1); // 确保片选信号稳定
    SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
    SPI.transfer(data);
    SPI.transfer(data);
    SPI.transfer(data);
    SPI.transfer(data);
    SPI.endTransaction();
    digitalWrite(CS_PIN, HIGH);
    delayMicroseconds(10); // 确保数据传输完成
}
};

void heartsmall()
{
int j;
static uint8_t heart = {0x00, 0x00, 0x24, 0x7E, 0x7E, 0x3C, 0x18, 0x00};
for ( j = 0; j < 8; j++)
{
    data = ~heart;
    data = 0xFF;
    data = 0xFF;
    data = 0x01 << j ;
    digitalWrite(CS_PIN, LOW);
      delayMicroseconds(1);
      SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
    SPI.transfer(data);
    SPI.transfer(data);
    SPI.transfer(data);
    SPI.transfer(data);
      SPI.endTransaction();
    digitalWrite(CS_PIN, HIGH);
      delayMicroseconds(10);
}
};

void matrixoff()
{
int j;
static uint8_t heart = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
for ( j = 0; j < 8; j++)
{
    data = ~heart;
    data = 0xFF;
    data = 0xFF;
    data = 0x01 << j ;
    digitalWrite(CS_PIN, LOW);
      delayMicroseconds(1);
      SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
    SPI.transfer(data);
    SPI.transfer(data);
    SPI.transfer(data);
    SPI.transfer(data);
      SPI.endTransaction();
    digitalWrite(CS_PIN, HIGH);
      delayMicroseconds(2);
}

};


void setup() {
    Serial.begin(9600); // 初始化串口通信
    Serial.println("Starting...");
    // 初始化 SPI
    SPI.begin(CLK_PIN, -1, MOSI_PIN, CS_PIN); // 初始化SPI,指定MISO为-1,因为不使用
    // 初始化片选引脚
    pinMode(CS_PIN, OUTPUT);
    digitalWrite(CS_PIN, HIGH); // 片选默认为高电平,不选中
}

void loop() {
      int m = 10;
      for (m=1000; m>0; m--){
                heartbig();
      };
      delay(100);
      matrixoff();
      for (m=1000; m>0; m--){
                heartsmall();
      };
      delay(100);
      matrixoff();
}

保存退出后,直接编译上传:
arduino-cli compile -b esp32:esp32:esp32c5:CDCOnBoot=cdc -p /dev/ttyACM0 --upload
上传效果:
看视频吧~哈哈
https://www.bilibili.com/video/BV1jxsBzjEeu/?vd_source=bdff96c7413b9836f4a9c717176dc2da
页: [1]
查看完整版本: ESP32-C5 连载系列之我心永恒哈哈