Wie macht ihr es mit den Umlauten auf einem E-Paper Display ? Ich habe schon mehrere Schriftarten getestet und mit keiner werden mir Umlaute dargestellt. Wenn ich die .h Datei im Editor öffne sind dort keine Umlaute hinterlegt. ich habe schon versucht die Umlaute selbst hinzuzufügen indem ich Testeweise das "ä/Ä" selbst neu geizeichnet habe und neu die Schriftart neu erstellt, es klappt leider nicht.
Es muß doch möglich sein ohne das ich aus den Umlauten ae, ue, oe machen muß. Ich habe schon in Netz gesucht, aber nicht die richtige Lösung gefunden, außer eine .ttf mit FontForge eine .bdf datei erstellen und dann mit Fontconvert wieder in eine Adafruit .h datei zu konvertieren.
Bei dieser möglichkeit habe ich aber Probleme die größe richtig anzupassen damit es aussieht wie bei zb. FreeSansBold9pt7b.h.
Habt ihr eine einfachere Lösung ?
Oli Kraus hat in seinen Bibliotheken Fonts mit Umlauten für UTF-8 zur Verfügung gestellt. Du könntest also Adafruit_GFX durch U8g2_for_Adafruit_GFX ersetzen. Die Zeile u8g2_for_adafruit_gfx.print("Hallo äöüßÄÖÜ"); wird auf meinem SSD1306 so dargestellt:
ich habe es damit mal probiert, das Beispiel funktioniert. Bekomme es aber nicht korrekt nicht meinem Google Kalender Sketch eingefügt, es werden mir dann nur Quadrate angezeigt und die Farbeinstellung für die Titel, Events werden nicht angenommen mit " * For U8g2 the color is specified with the setDrawColor() function.". Bin jetzt bei "writeUmlautText" geblieben und konvertiere mir die Schriftart.
void writeUmlautText(const char* text) {
while (*text) {
if (*text == '\xC3') { // UTF-8 Kodierung für Umlaute
text++; // Überspringe das C3
switch (*text) {
case '\xA4': display.write(0xE4); break; // ä
case '\xB6': display.write(0xF6); break; // ö
case '\xBC': display.write(0xFC); break; // ü
case '\x84': display.write(0xC4); break; // Ä
case '\x96': display.write(0xD6); break; // Ö
case '\x9C': display.write(0xDC); break; // Ü
case '\x9F': display.write(0xDF); break; // ß
default: display.write('?'); break; // Unbekanntes Zeichen
}
} else {
display.write(*text); // Normales Zeichen
}
text++;
}
}