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

Tato stránka byla naposledy upravena 2025-12-30 12:53

Běží na Wiki|Docs

This page was last edited on 2025-12-30 12:53

Eduingo
info@eduingo.com

Běží na Wiki|Docs