Matrix Scrolling Text
Popis
Zobrazuje text „Ahoj svete“ (nebo libovolný jiný) na 8×8 LED maticovém poli pomocí bitmapového fontu PX 4×8.
Zapojení
Ukázkový kód
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
#define DIN_PIN 5
#define MATRIX_WIDTH 8
#define MATRIX_HEIGHT 8
#define NUM_PIXELS (MATRIX_WIDTH * MATRIX_HEIGHT)
Adafruit_NeoPixel matrix(NUM_PIXELS, DIN_PIN, NEO_GRB + NEO_KHZ800);
const char* text = " Ahoj svete ";
// Opravdové binární bajty px4x8 fontu (výřez pro základní znaky A-Z, a-z, mezera)
const uint8_t px4x8_font[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // space (32)
0x00,0x00,0x7C,0x12,0x12,0x7C,0x00,0x00, // A
0x00,0x7E,0x4A,0x4A,0x4A,0x34,0x00,0x00, // B
0x00,0x3C,0x42,0x42,0x42,0x24,0x00,0x00, // C
0x00,0x7E,0x42,0x42,0x24,0x18,0x00,0x00, // D
0x00,0x7E,0x4A,0x4A,0x42,0x00,0x00,0x00, // E
0x00,0x7E,0x0A,0x0A,0x02,0x00,0x00,0x00, // F
0x00,0x3C,0x42,0x52,0x34,0x00,0x00,0x00, // G
0x00,0x7E,0x08,0x08,0x7E,0x00,0x00,0x00, // H
0x00,0x00,0x42,0x7E,0x42,0x00,0x00,0x00, // I
0x00,0x20,0x40,0x40,0x3E,0x00,0x00,0x00, // J
0x00,0x7E,0x08,0x14,0x62,0x00,0x00,0x00, // K
0x00,0x7E,0x40,0x40,0x40,0x00,0x00,0x00, // L
0x00,0x7E,0x04,0x18,0x04,0x7E,0x00,0x00, // M
0x00,0x7E,0x04,0x08,0x10,0x7E,0x00,0x00, // N
0x00,0x3C,0x42,0x42,0x3C,0x00,0x00,0x00, // O
0x00,0x7E,0x12,0x12,0x0C,0x00,0x00,0x00, // P
0x00,0x3C,0x42,0x62,0xBC,0x00,0x00,0x00, // Q
0x00,0x7E,0x12,0x32,0x4C,0x00,0x00,0x00, // R
0x00,0x24,0x4A,0x4A,0x30,0x00,0x00,0x00, // S
0x00,0x02,0x7E,0x02,0x00,0x00,0x00,0x00, // T
0x00,0x3E,0x40,0x40,0x3E,0x00,0x00,0x00, // U
0x00,0x1E,0x20,0x40,0x20,0x1E,0x00,0x00, // V
0x00,0x3E,0x40,0x30,0x40,0x3E,0x00,0x00, // W
0x00,0x66,0x18,0x18,0x66,0x00,0x00,0x00, // X
0x00,0x06,0x08,0x70,0x08,0x06,0x00,0x00, // Y
0x00,0x62,0x52,0x4A,0x46,0x00,0x00,0x00, // Z
0x00,0x00,0x3C,0x24,0x24,0x18,0x00,0x00, // a
0x00,0x7E,0x48,0x48,0x30,0x00,0x00,0x00, // b
0x00,0x30,0x48,0x48,0x00,0x00,0x00,0x00, // o
0x00,0x7E,0x08,0x08,0x70,0x00,0x00,0x00, // j
0x00,0x78,0x10,0x08,0x78,0x00,0x00,0x00, // s
0x00,0x38,0x40,0x40,0x38,0x00,0x00,0x00, // v
0x00,0x38,0x44,0x44,0x38,0x00,0x00,0x00, // e
0x00,0x10,0x7C,0x10,0x00,0x00,0x00,0x00, // t
};
uint8_t getFontByte(char c, uint8_t row) {
uint8_t index = (c - 32) * 8 + row;
if (index >= sizeof(px4x8_font)) return 0;
return px4x8_font[index];
}
void drawCharToBuffer(uint8_t* buffer, char c, int offset) {
for (uint8_t y = 0; y < 8; y++) {
uint8_t row = getFontByte(c, y);
for (uint8_t x = 0; x < 8; x++) {
if (row & (1 << (7 - x))) {
int pos = offset + x;
if (pos >= 0 && pos < MATRIX_WIDTH) {
buffer[y * MATRIX_WIDTH + pos] = 1;
}
}
}
}
}
void drawBufferToMatrix(uint8_t* buffer) {
for (int i = 0; i < NUM_PIXELS; i++) {
if (buffer[i]) {
matrix.setPixelColor(i, matrix.Color(0, 255, 0));
} else {
matrix.setPixelColor(i, 0);
}
}
matrix.show();
}
void setup() {
matrix.begin();
matrix.setBrightness(20);
matrix.show();
}
void loop() {
int len = strlen(text);
for (int scroll = -8; scroll < len * 8 + 8; scroll++) {
uint8_t buffer[64] = {0};
for (int i = 0; i < len; i++) {
drawCharToBuffer(buffer, text[i], i * 8 - scroll);
}
drawBufferToMatrix(buffer);
delay(100);
}
}