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);
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?
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.
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.
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.
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 ?
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 ?
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…
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.
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.
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
?
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.
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
PROGMEMconstunsignedcharwidtbl_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.
Option: Zahl immer mit führenden Nullen anzeigen und überschreiben
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.