Arduino TFT Lib -> Font tauschen?

Ich verwende mit einem Uno ein 1,8" TFT Display mit 128x160 Pixeln.

Als Library verwende ich die original "Arduino TFT". Diese baut zwar auf den Adafruit_gfx und Adafruit_ST7735 Libraries auf, aber in der Arduino-TFT-Lib ist jedoch im Gegensatz zu den Adafruit-Libs "setFont" nicht implementiert.

Der einzig vorhandene Font ist sehr "pixelig". Wenn ich das richtig blicke, dann verwendet die Arduino-TFT-Lib den Font "glcdfont.c"

Ich benötige bei meiner Anwendung eigentlich nur einen Font und würde gerne diesen Adafruit-Font "FreeSansBold12pt7b.h" verwenden. Kann ich die irgendwie "tauschen"?

In einem anderen Thema habe ich ein Beispiel gezeigt, wie ein Font eingebunden werden kann:

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#define FONT FreeMono18pt7b
#include "Fonts/FreeMono18pt7b.h"

Das sollte auch bei Dir gehen.

Nachtrag: Habe es gerade mal mit FreeSansBold12pt7b probiert, geht auch :slight_smile:

Mit Adafruit-Bibliotheken habe ich es es ja laufen. Ja, dass funzt.

Ich möchte aber die Arduino-TFT-Library verwenden ... (damit lassen sich recht simpel Bilder laden und sie ist recht klein).

Mit Deinem Vorschlag funktioniert es so nicht. Lade ich die Adafruit_GFX, dann erkennt der Compiler nicht mehr die KeyWords der Arduino-TFT-Library.

Ich dachte, es lässt sich vielleicht ein Zeichensatz mit einem anderen "tauschen" !?

Trotzdem Danke !!!

Asche auf mein Haupt, ich habe die Fragestellung gänzlich mißverstanden, sorry!

Schau mal, ob Dir Arduino TFT display and font library weiterhilft. Da sehe ich mehrere Dateien, die Fontdefinitionen enthalten.

gj99:
... (damit lassen sich recht simpel Bilder laden und sie ist recht klein).

Jeder Font benötigt Platz, Schönheit ist Luxus!

Ein Vergleich mit der Adafruit-Bibliothek würde mich schon interessieren.

Vielleicht habe ich mich ja auch blöd ausgedrückt ..... :frowning:

Den von Dir geposteten Link kenne ich. Hier werden zwei Libraries (Adafruit_GFX_AS und Adafruit_ST7735_AS) angeboten. Bringt mich aber nicht weiter, da könnte ich auch die originalen Libraries nehmen.

Die Arduinio-TFT-Library passt ja eigentlich, nur der Font könnte es etwas "fülliger" sein.
Der von dieser Library verwendete Font steht wohl in der Datei "glcdfont.c" und nennt sich dort "Standard ASCII 5x7 font".
Ich dachte, dieser Font wäre halt austauschbar ..... (Ist er sicherlich auch, nur ich weiß nicht wie)

gj99:
Ich dachte, dieser Font wäre halt austauschbar ..... (Ist er sicherlich auch, nur ich weiß nicht wie)

Das ist er. Für eine 8x8-Matrix habe ich einen Font auch schonmal angepaßt.

Der Font ist in dem Feld font[] definiert. Wenn Du das Feld änderst, ändert sich die Anzeige. Habe ich noch nicht gemacht, denke ich aber. Den Inhalt kannst Du mittels Fonteditor ermitteln. Ich habe Arduino_Char_Gen.exe installiert, hat jemand aus dem Forum zur Verfügung gestellt. Display - Balken - Spielerei - Demos

Könnte kompfortabler sein: about GLCD displays and Programming

Habe mal glcdfont.c geändert. Im Sketch steht

tft.println("Zaehler!");

Also am Ende ein Ausrufezeichen. In glcdfont.c habe ich die Zeile
"0x00, 0x00, 0x5F, 0x00, 0x00," geändert in
"0x7D, 0x00, 0x5F, 0x00, 0x7D,". Dadurch sieht die Anzeige dann so aus:

glcdfont.png
Wie man sieht, läßt sich der Font leicht ändern.

Klar, wenn Du die Bytes veränderst, änderst Du auch die Darstellung. Aber so einfach ist es leider nicht.

Die Bytes für meinen "Wunsch-Font" habe ich ja. Die Datei mit den Byte-Mustern für diesen Font ist ja im Verzeichnis Fonts der Adafruit-Library hinterlegt.

Hier ein Auszug:

const uint8_t FreeSansBold12pt7bBitmaps[] PROGMEM = {
0xFF, 0xFF, 0xFF, 0xFF, 0x76, 0x66, 0x60, 0xFF, 0xF0, 0xF3, 0xFC, 0xFF,
0x3F, 0xCF, 0x61, 0x98, 0x60, 0x0E, 0x70, 0x73, 0x83, 0x18, 0xFF, 0xF7,
usw.

Einfach austauschen geht aber nicht. Dies hängt wohl mit der "Grund"-Größe des Fonts zusammen. Der Standard-Font besteht aus 5x7 Pixel - der Wunsch-Font aus 12x7 Pixel.

Da ich aber nicht weiß, wie ich das dem TFT bzw. Arduino "beibringen" kann, komme ich nicht weiter.

gj99:
Einfach austauschen geht aber nicht. Dies hängt wohl mit der "Grund"-Größe des Fonts zusammen. Der Standard-Font besteht aus 5x7 Pixel - der Wunsch-Font aus 12x7 Pixel.

Vollkommen richtig.

gj99:
Da ich aber nicht weiß, wie ich das dem TFT bzw. Arduino "beibringen" kann, komme ich nicht weiter.

Dann mußt Du die Bibliothek, mindestens Adafruit_GFX::drawChar verändern.

Der Font FreeSansBold12pt7b ist aber, wenn ich das richtig sehe, ein Proportionalfont, während der Standardfont das nicht ist. Das paßt dann sowieso nicht. Du müßtest einen Monofont als Vorlage wählen.

Also ich kehre zurück zu den Adafruit-Libraries ...

Für mein Projekt brauche ich zwar nur eine einzige ("große") Schriftart, aber das wird mir jetzt alles zu schwierig. So weit bin ich nicht im Umgang mit dem Arduino.

Ich danke Dir herzlich für Deine Beiträge !

gj99:
Also ich kehre zurück zu den Adafruit-Libraries ...

Ich denke mal, Du verlierst dadurch nichts. Denn das, was Du vor gehabt hast, hätte zumindest in die Nähe dessen geführt, was die Adafruit-Bibliothek schon macht.

gj99:
Für mein Projekt brauche ich zwar nur eine einzige ("große") Schriftart, ...

Nur die von Dir eingebundenen Schriftarten benötigen auch Speicher.

Brauchst Du den kompletten Zeichensatz?

Eigentlich brauche ich nur (Groß-)Buchstaben, die Zahlen und den Punkt.

Dann könntest Du Deinen Wunschfont kürzen, wenn Du Speicher sparen möchtest oder mußt. Habe ich schonmal gemacht.

Wäre das eine Option für Dich? Welcher Font?

Das ist mein Wunsch-Font (gehört zu Adafruit_GFX - Library)

#include <Fonts/FreeSansBold12pt7b.h>

Jetzt muss ich mal sehen, was es für einen "Speicher kostet" ein Bild auf dem TFT auszugeben. Dann kann ich mehr sagen, was an Speicher eventuell fehlt.

Ich habe den Wunschfont hauptsächlich um die kleinen Buchstaben gekürzt und in das Verzeichnis vom Sketch kopiert. Im Sketch einbinden:

#define FONT FreeSansBold12pt7b_kurz
#include "FreeSansBold12pt7b_kurz.h"

FreeSansBold12pt7b_kurz.h (12.7 KB)

Merci ! Noch bastel ich am Sketch ... ich werde berichten ...

Die 1.543 Bytes des Fonts könnte man eventuell auch im EEPROM ablegen.