Forum: Mikrocontroller und Digitale Elektronik Leerzeichen im Code Libary anpassen


von Daniel E. (everyday_fun69)


Angehängte Dateien:

Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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"

von Daniel E. (everyday_fun69)


Lesenswert?

> 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 ?

von Egon (egon12345)


Lesenswert?

So, und habe ich die vorhergehende Zahl nicht verfügbar, wie soll’s dann 
weiter gehen, wenn Leerzeichen und Rechteck Scheise sind ?

Danke

von J. S. (jojos)


Lesenswert?

Die Canvas Funktion nutzen: Zeichen in Canvas zeichnen und dann den 
Canvas an das Display schicken.

von Falk B. (falk)


Lesenswert?

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?

von Daniel E. (everyday_fun69)


Lesenswert?

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 ?

von Daniel E. (everyday_fun69)


Lesenswert?

> 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

von J. S. (jojos)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

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.

von Daniel E. (everyday_fun69)


Lesenswert?

> 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 
?

von Daniel E. (everyday_fun69)


Lesenswert?

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.
von Falk B. (falk)


Lesenswert?

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
> ?

von Rainer W. (rawi)


Lesenswert?

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
von J. S. (jojos)


Lesenswert?

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
von Daniel E. (everyday_fun69)


Lesenswert?

>> 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

von Harald K. (kirnbichler)


Lesenswert?

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.

von Harry L. (mysth)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

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.

von J. S. (jojos)


Lesenswert?

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
Noch kein Account? Hier anmelden.