Nextion - Übergabe von Werten mit dem printh-Befehl

Hallo,
ich hänge i.M. am Datenaustausch zwischen dem Arduino und einem Nextion-Display.
Dafür hab ich mich für die EasyNextionLibrary von Athanasios Seitanis entschieden.

Über den Befehl z.B:

printh 23 02 4C 00

werden die Daten verschickt, die ich mit dem Arduino auswerte. Die zweite Stelle, hier die 02, gibt die Anzahl der folgenden Bytes an. Solange ich den Befehl 'hart' eingebe, funktioniert das soweit auch ganz gut.

Ich weiße einer Variablen mehrere Werte aus verschiedenen Feldern zu, die mit einem Semikolon getrennt sind. Die Anzahl der Felder können variieren, z.B:

varText=t0.txt+";"+t1.txt+";"+t2.txt

-> Inhalt der Variablen z.B.: 1;30;4

Mein Problem ist nicht das Zerlegen der Variablen, sondern wie übergebe ich, da die Anzahl unterschiedlich sein können, die Werte in HEX dem printh-Befehl.

Danke

mfg
Tom

In welcher Sprache bist du da unterwegs?
(noch nicht mal das kann ich erkennen)

Er ist auf dem Nextion unterwegs.
Ich habe so meine Zweifel ob man das "Programmiersprache" nennen sollte.

@Tom69
Ich weiß gerade nicht auswendig, ob es ein strlen()-Äquivalent auf den Displays gibt und ob man die Länge auch aus einer weiteren Variablen ziehen kann.
Fürchte, dass das so nicht gehen wird.

Sorry,
das Ganze spielt sich auf dem Nextion-Display ab.
Die Daten sollen bei einem Click-Ereignis mit dem printh-Befehl an den Arduino übertragen werden.

Die Auswertung auf dem Arduino ist nicht das Problem.

Ja dann, dann bin ich mangels Kompetenz mal raus.

Das Zerlegen des Strings funktioniert mit spstr, das ist nicht das Problem.

Es scheitert am Zusammensetzen des printh-Befehl's.
Erstmal brauche ich HEX-Werte. Wie wandel ich die in Nextion um?

Wenn ich auf mein Beispiel (1;30;4) zurückkomme, muss einmal zB:

printh 23 04 4C 01 1E 04 -> Dezimal: 1 30 4

das nächste mal müssen es zB 2 Bytes mehr sein:

printh 23 06 4C 01 1E 04 FF 60 -> Dezimal: 1 30 4 255 96

Ich habe in den Unterlagen auf Anhieb nichts passendes gefunden. Ich sage mal kühn das geht so nicht, wie Du Dir das vorstellst.
Ich lasse mich gern eines Besseren belehren. Aber der "Befehlssatz" des Nextion gibt dazu kaum etwas her.

Gruß Tommy

Edit: Evtl. könnte man mit modulo etwas stricken aber ich würde die Teilwerte an den MC schicken und sie dort verarbeiten.

Vielleicht geht da was mit Umrechnen von ASCII (txt) in binär und speichern in einem Array.
Kann ich erst heute Abend mal stöbern...

Also:

  • printh vom Nextion kann keine Variablen schicken, nur fest kodierte HEX-Werte.
  • Es gibt eine (deprecated) Funktion cov, die von Text in eine Variable oder umgekehrt konvertieren kann
  • Von einer Variablen kann man mit prints auch nur das erste Byte ausgeben. Das funktioniert (wegen Little Endian) wenn die Zahlen kleiner als 256 sind.

Für das Beispiel sähe der Code auf dem Nextion dann so aus:

cov t0.txt,va0.val,0
cov t1.txt,va1.val,0
cov t2.txt,va2.val,0
printh 23 // start
prints 3,1 // oder Variable mit Anzahl
printh 4C
prints va0.val,1 // erstes Byte von va0
prints va1.val,1
prints va2.val,1

Ausgabe:

23 03 4C 01 1E 04 

Beispiel-HMI-Datei anbei; der Code versteckt sich im TouchReleaseEvent des Hintergrunds.

Für Code, der mit einer veränderlichen Anzahl Werte umgehen kann, bin ich heute zu faul. Wenn die maximale Anzahl bekannt ist, kann man das vielleicht hinbekommen.

Wo eigentlich kommt die 4C her?

Edit: Ausgabe und Beispieldatei angepasst - das Beispiel war ja nicht 0;30;4, sondern 1;30;4. Diese Werte stehen in drei Textfeldern t0...t2.

test.zip (16,3 KB)

Es ist (fast immer) das gleiche:
Da wird munter nach bestimmten Details gefragt ohne den Überblick zu geben.

Ich habe oft genug erlebt: Wenn man den Überblick hat, dann ergeben sich neue Möglichkeiten wie man eine bestimmte Funktionialität erstellen kann.

Also was ist die Gesamtfunktion des "Gerätes" das mit dem Nextion-Display arbeitet?
Wozu werden die Werte an den Arduino gesendet? = was macht dann der Arduino mit den Werten?
Was genau löst das Senden der Werte aus?

  • ist das immer der gleiche Button "Daten senden"?
  • werden die Werte in regelmäßigen Abständen gesendet?

Da das Nextion-Display nicht alleine vor sich hinwerkelt sondern mit einem Micrcontroller zusammenarbeitet ist wirklich die Frage:

  • Welche Aufgaben / Funktionen hat das Display?
  • Welche Aufgaben / Funktion hat der Microcontroller?

Mir scheint das Nextion-DISPLAY soll noch andere Sachen machen außer
Ich wurde "betoucht" und zwar an diesem oder jenem Element Signale senden.
und
"etwas anzeigen"

Aber ohne Beschreibung der Gesamtfunktionalität kann man das nicht sicher sagen.

Hallo @wno158,

genau das war es, so funktioniert's.
Vielen Dank für deine Zeit und Unterstützung.

mfg Tom

PS: Die 4C steht hier für den Buchstaben 'L'. Man kann hier verschiedene Gruppen zum Auswerten anlegen.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.