LED Matrix - Fonts wechseln?

Hallo,

ich nutze eine 32x8 RGB Matrix mit

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

Ein Zeichen belegt aktuell 5x7 Pixel.

Kann ich andere Schriftarten verwenden um eine andere Auflösung zu erhalten?

Aktuell kann ich zb nicht "100:100" darstellen, da das Display zu schmal ist. Bei zb 4x7 oder 4x8 würde es ggf gehen.

Gruß

Zu Fonts hat Adafruit etwas: Using Fonts | Adafruit GFX Graphics Library | Adafruit Learning System

Kann sein, das du für 4x7 einen eigenen Font generieren musst.

Wobei hier gibts noch einen 4x7 Font: GitHub - robjen/GFX_fonts: A collection of fonts compatible with Adafruit GFX library mostly small many fixed format

Wenn du Zeichen variabler Breite hättest, bräuchte ':' nur 2 pixel breit zu sein, und wenn die Werte nur bis 199 gehen, braucht die Hunderter-Stelle nur 2 oder 3 pixel. "100:100" wäre dann 26..28 pixel breit und die richtigen Ziffern mit 5 pixel (1px Abstand zum nächsten Zeichen) besser lesbar.
Aber selbst bei "888:888" sind es genau 6*5 + 2 pixel, wenn du zweimal 3 Ziffern separat ausgibst. und den ':' von Hand malst. Sparst du dir das Font (er)finden.

Wenn es nur um diesen Text geht, ist die Ausgabe sowieso schöner, wenn sie zentriert ist, der : nicht hin und her hüpft und die Zahlen je nach Größe (< 10 / < 100) unterschiedlich positioniert werden.

Es kommt ja aktuell immer noch der Abstand (1 Leerzeichen) zwischen den Zeichen dazu.

Worst Case:

8 8 8 : 8 8 8
5(1)5(1)5(1)1(1)5(1)5(1)5 -> 37 Pixel

(1) = Leerzeichen

1 0 0 : 1 0 0
würde mir aber aktuell reichen. Wenns nicht anders geht, muss ich die 1 "malen" mit 3 Pixel Breite

3(1)5(1)5(1)1(1)3(1)5(1)5 -> 33 Zeichen (!)

Ich war davon ausgegangen, dass in dem 5x7 Feld schon eine Leerspalte drin ist.
Z.B. 8 =

 XX
X  X
X  X
 XX
X  X
X  X
 XX

Das ist also nach deiner Definition ein 4x7 Font. Dann ziehe ich meinen Vorschlag zurück und geb dir Recht. Sorry.

Ich würde mir an dieser Stelle einen kleinen Renderer für Ziffern selber schreiben. Ungefähr so:


constexpr uint8_t digits[10][4] = {
  {
    0b01111110,
    0b10000001,
    0b10000001,
    0b01111110,
  },
  {
    0b10000100,
    0b10000010,
    0b11111111,
    0b10000000,
  },
  {
    0b11100110,
    0b10010001,
    0b10001001,
    0b10000110,
  },
  {
    0b01000010,
    0b10000001,
    0b10001001,
    0b01110110,
  },
  {
    0b00001111,
    0b00001000,
    0b00001000,
    0b11111111,
  },
  {
    0b01001111,
    0b10001001,
    0b10001001,
    0b01110001,
  },
  {
    0b01111100,
    0b10001010,
    0b10001001,
    0b01110001,
  },
  {
    0b00000011,
    0b11100001,
    0b00010001,
    0b00001111,
  },
  {
    0b01110110,
    0b10001001,
    0b10001001,
    0b01110110,
  },
  {
    0b10000110,
    0b10001001,
    0b01001001,
    0b00111110,
  },
};

void drawDigit(uint8_t x, uint8_t value, uint16_t colorOn, uint16_t colorOff){
  if(value >= 10){
    return;
  }
  for( int dx = 0; dx < 4; dx++){
    auto p = digits[value][dx];
    for( int dy = 0; dy < 8; dy++){
      auto color = bitRead(p, dy) ? colorOn : colorOff;
      matrix.drawPixel(x+dx, dy, color);
    }
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.