/*
74HC595
DS 25
OE 26
STCP 27
SHCP 14
MR 12
MAX7219
DIN 15
CS 2
CLK 0
*/
#include <MD_Parola.h>
#include <MD_MAX72xx.h> //x要小寫
#include <SPI.h>
// MAX7219 設定
#define MAX7219_DIN 15
#define MAX7219_CS 2
#define MAX7219_CLK 0
#define NUM_MATRICES 1
MD_MAX72XX matrix = MD_MAX72XX(MD_MAX72XX::FC16_HW, MAX7219_DIN, MAX7219_CLK, MAX7219_CS, NUM_MATRICES);
// 74HC595 設定
#define SHIFT_DS 25
#define SHIFT_OE 26
#define SHIFT_STCP 27
#define SHIFT_SHCP 14
#define SHIFT_MR 12
const uint64_t IMAGES[] = {
0x824428b29c780c1e,
0x466428b25c380c1e,
0x462428305c380c1e,
0x2428283418380c1e,
0x2428303c38380c1e,
0x2828303818180c1e,
0x2428181c301c0c1e,
0x2428281c183c0c1e,
0x442428185c3c0c1e,
0x4664289a5c3c0c1e,
0x8244289a947c0c1e
};
const int IMAGES_LEN = sizeof(IMAGES) / 8;
void setup() {
// MAX7219 初始化
matrix.begin();
matrix.clear();
// 74HC595 初始化
pinMode(SHIFT_DS, OUTPUT);
pinMode(SHIFT_OE, OUTPUT);
pinMode(SHIFT_STCP, OUTPUT);
pinMode(SHIFT_SHCP, OUTPUT);
pinMode(SHIFT_MR, OUTPUT);
digitalWrite(SHIFT_OE, LOW);
digitalWrite(SHIFT_MR, HIGH);
Serial.begin(115200);
Serial.println("Hello, ESP32!");
}
void loop() {
// 顯示 8x8 LED 動畫
for (int i = 0; i < 100; i++) { // 100 次 = 5 秒
int imageIndex = i % IMAGES_LEN;
showImage(IMAGES[imageIndex]);
delay(50);
}
// 顯示倒數計時
for (int i = 5; i >= 0; i--) {
show7Segment(i);
delay(1000);
}
}
// MAX7219 顯示圖片函數
void showImage(uint64_t image) {
for (int row = 0; row < 8; row++) {
uint8_t rowData = (image >> (row * 8)) & 0xFF;
matrix.setRow(0, row, rowData);
}
matrix.update();
}
// 7 段顯示器顯示數字函數
void show7Segment(int number) {
static const uint8_t digitToSegments[] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
if (number < 0 || number > 9) return;
uint8_t segments = digitToSegments[number];
for (int i = 0; i < 8; i++) {
digitalWrite(SHIFT_DS, (segments >> i) & 0x01);
digitalWrite(SHIFT_SHCP, HIGH);
digitalWrite(SHIFT_SHCP, LOW);
}
digitalWrite(SHIFT_STCP, HIGH);
digitalWrite(SHIFT_STCP, LOW);
}
/*
//https://asciiart.cc/zh/view/11428
______________
/ \ \
/ \ \
/ _________ \ |
\/ _ \ / |
\ / \ \/_ |
| O_O_/ || \_ \
/ __(_ __ || \ /
/\/___\___\_/ \ /_\
/ __ \/ \
| |\___/
______|________ | \
/ /\ / \
| | \ / \
\______________\ |___/ \
_|___ |_____\ \
/| __| |_|| o \ \
| | \ |_||____\_____/\
\_|____/ / | \_____/____
| // | / \ \
| // |_________\_/\ \ \__ ______
| / | /_ |_/_/ \/_//__/|
| |________// \| \ //_//__/||\_
| no bug | \__// | / | ||__|/_ \
| | | | \_|_/ \
| ___________ | | | / |
\ \|______| / _____ |
\ \ | | \\ _/ / |
\ \_____|______\___ \ -/___/ |
\ ______\_____ /
\ / \ \ /
\__________________ \ | |______/
\ / /
\__/____________/
*/