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