tft.print: Text mit Sonderzeichen mischen

Hi,

bräuchte mal wieder eure Hilfe.

Ich will auf ein GLCD eine Zeichenkette aus einem float, einem Sonderzeichen, und normalen Text ausgeben. Soll so aussehen:

123,1 °C

Ich hab schon eine Lösung, aber die ist so was von zu Fuss....

tft.print(val,1); tft.print (" "); tft.print(char(0xf7)); tft.println ("C  ");

das kann man doch sicher irgendwie vereinfachen.

Ich hätte noch im Inet diese Variante gefunden, aber das klappt nur, wenn ich nach dem Sonderzeichen ein Leerzeichen einsetze. kann ich aber da nicht brauchen.

tft.print(val,1); tft.println(" \xF7 C  ");

So:

tft.print("\xF7""C");

oder:

tft.print("\xF7" "C");

Das Splitten ist nötig weil der Parser sonst versucht 0xF7C als eine Hex-Zahl zu interpretieren. Was erstens nicht gewünscht ist und zweitens nicht in 8 Bit passt

Hi Serenifly,

danke wieder einmal.

Das mit der Überlange beim zusammenschreiben hat mir mein Compiler auch schon gemeldet.
Wusste nicht, dass man innerhalb der Klammer einfach Textfragmente hintereinander schreiben kann.
Habs gerade probiert. Das geht auch mit mehr als 2 Teiltexten.

Super!

EDIT:
Die Variable bring ich aber nicht auch noch in einen Print-Befehl? Ich meine ohne "Streaming"

hk007:
EDIT:
Die Variable bring ich aber nicht auch noch in einen Print-Befehl? Ich meine ohne "Streaming"

Natürlich nicht. Man kann lediglich String Literale trennen. Dabei geht es vor allem darum dass man sie über mehrere Zeilen schreiben kann (die Anwendung hier ist eher ein Nebeneffekt):

char *str = "Zeile 1"
            "Zeile 2";

Serenifly:

tft.print("\xF7" "C");

Hallo,

jetzt muß ich mal fragen. Was hat der Backslash für eine Funktion? Bei der Seriellen kann man ja mit SerialWrite statt Print arbeiten ohne dem Backslash.

Wenn du den Backslash weglässt wird xF7C gedruckt. Das ist ja nicht was du willst. Oder wenn du ein LF willst: \n. Genauso muss man verschiedene Zeichen wie ' oder " maskieren da die vom Compiler verwendet werden.
Das Fragezeichen ist auch in der Liste. Das kommt von Trigraphen. Ist auf dem Arduino aber nicht nötig, da der gcc Compiler zum Glück Trigraphen deaktiviert hat.

write(0xF7) geht natürlich, aber da wird write(int) aufgerufen. Es geht hier aber darum genau diesen Aufwand zu umschiffen und das Zeichen direkt in ein String-Literal zu packen.

Hallo,

mir sowas dauerhaft zu merken fällt mir immer noch schwer. Dir wird hier nicht langweilig. :slight_smile:
Danke.