Hallo in die Runde, ich benötige noch mal Hilfe zur Adafruit libary. Wenn ich ein altes Zeichen überschreiben will, geht das ja mit einem Rechteck (dauert etwas lange) oder mit einem Leerzeichen. Leider ist das Leerzeichen nicht so breit wie die 8, so dass rechts der Rest stehen bleibt. Wie kann ich das Leerzeichen im Code breiter gestalten? Ich benutze tft.setTextSize(16) sowie tft.setTextSize(4); Danke an alle
Daniel E. schrieb: > Hallo in die Runde, > > ich benötige noch mal Hilfe zur Adafruit libary. Wenn ich ein altes > Zeichen überschreiben will, geht das ja mit einem Rechteck (dauert etwas > lange) oder mit einem Leerzeichen. Nö. Man muss nur den Murks korrigieren und den echten Überschreibmodus aktivieren. Das hatten wir schon mal. > breit wie die 8, so dass rechts der Rest stehen bleibt. Wie kann ich das > Leerzeichen im Code breiter gestalten? Muss man nicht, sollte man auch nicht. Beitrag "Re: Adafruit_ILI9341.h einzelnes Zeichen überschreiben"
> Nö. Man muss nur den Murks korrigieren und den echten Überschreibmodus > aktivieren. Das hatten wir schon mal. Ja ja ja, und wenn ich mich recht erinnere wie folgt: tft.setTextColor(TFT_BLACK, TFT_WHITE); tft.drawNumber(Test, 10, 80, 2); delay zum Zahl gucken :-) tft.setTextColor(TFT_WHITE, TFT_WHITE); tft.drawNumber(Test, 10, 80, 2); Würde sagen ja, weil meine Zahl ist in real auch weg. Korrekt ?
So, und habe ich die vorhergehende Zahl nicht verfügbar, wie soll’s dann weiter gehen, wenn Leerzeichen und Rechteck Scheise sind ? Danke
Die Canvas Funktion nutzen: Zeichen in Canvas zeichnen und dann den Canvas an das Display schicken.
Egon schrieb: > So, und habe ich die vorhergehende Zahl nicht verfügbar, wie soll’s dann > weiter gehen, wenn Leerzeichen und Rechteck Scheise sind ? Das mit dem sinnerfassenden Lesen ist nicht so deine Stärke, was?
Hm, was ist der Unterschied bzw. Vorteil zum Leerzeichen oder weißen Rechteck schreiben ? Vieleicht geht auch jemand mal bitte auf meine Frage ein, ob das Leerzeichen im Code überhaupt und wenn ja wie breiter gemacht werden kann ?
> Das mit dem sinnerfassenden Lesen ist nicht so deine Stärke, was?
Lasse ich mal offen….
Vielleicht machst Du dem Ganzen auch ein Ende indem du mal bitte deine
Vorstellung des „echten Überschreibmodus“ nochmal Idiotensicher
für mich bitte niederschreibst.
Danke
Das Rechteck ist effizienter weil das nicht durch den Zeichengenerator läuft. Position und Größe sind beim fixed size font bekannt, also kann man da ein Rechteck zum löschen drübermalen. Aber wenn sofort danach wieder ein Zeichen kommt, dann flackert es. Mit dem Canvas flackert es nicht und man kann auch die schöneren Fonts verwenden.
Daniel E. schrieb: > Vielleicht machst Du dem Ganzen auch ein Ende indem du mal bitte deine > Vorstellung des „echten Überschreibmodus“ nochmal Idiotensicher > für mich bitte niederschreibst. Was gibt es da noch zu erklären? Der Überschreibmodus überschreibt Vorder- und Hintergrund. Und da die einfachen Schriftsätze der Lib konstante Zeichenbreite haben, bleibt da auch nix an Resten übrig, wenn man immer die gleiche Anzahl BELIEBIGER Zeichen an die gleiche Stelle schreibt. Probelm gelöst.
> Was gibt es da noch zu erklären? Der Überschreibmodus überschreibt > Vorder- und Hintergrund. Und da die einfachen Schriftsätze der Lib > konstante Zeichenbreite haben, bleibt da auch nix an Resten übrig, wenn > man immer die gleiche Anzahl BELIEBIGER Zeichen an die gleiche Stelle > schreibt. Probelm gelöst. Gut, da sind wir uns schon mal einig. 1. Und was nun, wenn die Spannung nicht mehr 10 V beträgt und es nur noch 9 sind und ich mir den vorherige Wert nicht merken kann (Speicher und weis der Geier) oder will ? 2. wenn die Zeichen eine gleiche Breite haben sollen, warum bleibt dann beim Überschreiben mit einem Leerzeichen ein Rest sichtbar stehen. Das widerspricht deiner Aussage der gleichen Breite aller Zeichen oder NICHT ?
J. S. schrieb: > Das Rechteck ist effizienter weil das nicht durch den Zeichengenerator > läuft. Position und Größe sind beim fixed size font bekannt, also kann > man da ein Rechteck zum löschen drübermalen. Aber wenn sofort danach > wieder ein Zeichen kommt, dann flackert es. > Mit dem Canvas flackert es nicht und man kann auch die schöneren Fonts > verwenden. Rechteck dauert 3 ms zum drüber malen pro Zeichen gleiche Schrift mit gleichen Vorder- und Hintergrund zu übermalen dauert 1,4 ms Hab nichts flackern gesehen, kommt vermutlich auch auf die Größe des Rechteckes an… Danke Dir
Beitrag #7557379 wurde vom Autor gelöscht.
Daniel E. schrieb: >> Was gibt es da noch zu erklären? Der Überschreibmodus überschreibt >> Vorder- und Hintergrund. Und da die einfachen Schriftsätze der Lib >> konstante Zeichenbreite haben, bleibt da auch nix an Resten übrig, wenn >> man immer die gleiche Anzahl BELIEBIGER Zeichen an die gleiche Stelle >> schreibt. Probelm gelöst. > > Gut, da sind wir uns schon mal einig. > > 1. Und was nun, wenn die Spannung nicht mehr 10 V beträgt und es nur > noch 9 sind und ich mir den vorherige Wert nicht merken kann (Speicher > und weis der Geier) oder will ? Schon mal was von führenden Nullen bzw. Leerzeichen gehört? Dann hat man immer die GLEICHE Anzahl Zeichen. > 2. wenn die Zeichen eine gleiche Breite haben sollen, warum bleibt dann > beim Überschreiben mit einem Leerzeichen ein Rest sichtbar stehen. Keine Ahnung, vermutlich ein Fehler in deinem Programm. Das > widerspricht deiner Aussage der gleichen Breite aller Zeichen oder NICHT > ?
Daniel E. schrieb: > gleiche Schrift mit gleichen Vorder- und Hintergrund zu übermalen dauert > 1,4 ms Wie schnell guckst du denn und wie schnell reagiert dein Display? 700 Frames pro Sekunde wird es wohl eher nicht schaffen. > Hab nichts flackern gesehen, kommt vermutlich auch auf die Größe des > Rechteckes an… Wenn du sehen willst, ob das Überschreiben funktioniert, nimm dafür eine andere Farbe.
:
Bearbeitet durch User
hier geht es ja nicht mehr um die Adafruit Lib, also muss man sich den Code dieser Lib ansehen. Der Font ist nicht monospaced, daher wohl das Gefummel mit der Einzelausgabe der Ziffern. Den Canvas gibt es in dieser Lib nicht, das war der Ansatz in der Adafruit für die Ausgabe der Zeichen mit variabler Breite. Da bleibt hier nur das Löschen mit dem groben Besen (Rechteck), oder die vorhergehenden Zeichen alle merken und wieder Löschen. Wenn man Zeichen modifizieren will, dann guckt man sich an wie die Fonts aufgebaut sind und passt die entsprechend an. Der RPi Pico kostet keine 5 € und würde diese Würgarounds alle obsolet machen.
:
Bearbeitet durch User
>> 2. wenn die Zeichen eine gleiche Breite haben sollen, warum bleibt dann >> beim Überschreiben mit einem Leerzeichen ein Rest sichtbar stehen. > > Keine Ahnung, vermutlich ein Fehler in deinem Programm. Na endlich 👍 😀, das war schon eine schwere Geburt @alle Zurück zu meiner Eingangsfrage, kann man in diesem Code der Library das Leerzeichen ein paar Pixel breiter machen und wenn ja, wie bitte ? Dankeschön
Daniel E. schrieb: > Zurück zu meiner Eingangsfrage, kann man in diesem Code der Library das > Leerzeichen ein paar Pixel breiter machen und wenn ja, wie bitte ? Nimm einen anderen Font, bei dem alle Zeichen gleich breit sind. Alternativ: Sieh Dir den Aufbau der fonts*.c-Dateien an. Da kommt gleich als erste eine Tabelle mit den Zeichenbreiten, und dann die Definition eines Arrays namens chr_***_20. Das könntest Du Dir natürlich auch mal ansehen.
Daniel E. schrieb: > @alle > Zurück zu meiner Eingangsfrage, kann man in diesem Code der Library das > Leerzeichen ein paar Pixel breiter machen und wenn ja, wie bitte ? augenroll Durch Programmieren - wie denn sonst?
Harald K. schrieb: > a kommt gleich als erste eine Tabelle mit den Zeichenbreiten, und dann > die Definition eines Arrays namens chr_***_20. In der Tat! font7srle.c
1 | // Font size 7
|
2 | //
|
3 | // This font has been 8 bit Run Length Encoded to save FLASH space
|
4 | //
|
5 | // This is a 7 segment font intended to display numbers and time
|
6 | // This font only contains characters [space] 0 1 2 3 4 5 6 7 8 9 : .
|
7 | // All other characters print as a space
|
8 | |
9 | #include <avr/pgmspace.h> |
10 | |
11 | PROGMEM const unsigned char widtbl_f7s[96] = // character width table |
12 | {
|
13 | 12, 12, 12, 12, 12, 12, 12, 12, // char 32 - 39 |
14 | 12, 12, 12, 12, 12, 12, 12, 12, // char 40 - 47 |
15 | 32, 32, 32, 32, 32, 32, 32, 32, // char 48 - 55 |
16 | 32, 32, 12, 12, 12, 12, 12, 12, // char 56 - 63 |
17 | 12, 12, 12, 12, 12, 12, 12, 12, // char 64 - 71 |
18 | 12, 12, 12, 12, 12, 12, 12, 12, // char 72 - 79 |
19 | 12, 12, 12, 12, 12, 12, 12, 12, // char 80 - 87 |
20 | 12, 12, 12, 12, 12, 12, 12, 12, // char 88 - 95 |
21 | 12, 12, 12, 12, 12, 12, 12, 12, // char 96 - 103 |
22 | 12, 12, 12, 12, 12, 12, 12, 12, // char 104 - 111 |
23 | 12, 12, 12, 12, 12, 12, 12, 12, // char 112 - 119 |
24 | 12, 12, 12, 12, 12, 12, 12, 12 // char 120 - 127 |
25 | };
|
Aber sooo variabel sind die Zeichen nicht, da es nur die Zeichen 0-9 gibt (32 Pixel breit), alle anderen sind Leerzeichen mit 12 Pixel Breite. Drei Leerzeichen sind halt breiter als 1 Ziffer. Pech gehabt. Aber auch das ist nebensächlich, denn die Zahlen sind alle gleich breit. 1. Option: Zahl immer mit führenden Nullen anzeigen und überschreiben 2. Option: rechtsbündig anzeigen und die führenden Leerzeichen mittels Rechteck nachbilden und überschreiben. Man muss rein gar nichts an den Zeichensätzen ändern, nur halt bissel was verstehen.
er benutzt aber Font 2, allerdings sind auch da alle Ziffern 8 Pixel breit. Dann gibt es noch eine Funktion textwidth() die die Breite bei gegebenem Font ausrechnet, hilft auch zum Löschen. Und das Ganze ist ein frühes Werk vom Bodmer, in der aktuelleren eTFT_SPI hat er einiges erweitert und verbessert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.