Moin Stefan,
sieht so aus als wäre der Fetzen doch zu klein gewesen ;).
Hardware:
Wir haben ein Nextion und einen Rechner (bei Dir Arduino Mega, bei mir ESP32 - egal). Unser Setup ist also äquivalent.
Die sind verbunden über eine serielle Schnittstelle, auf der Anweisungen zum Display (z.B. "page 1" FF FF FF) gesendet werden oder Daten vom Display empfangen werden (das, was Du mit 'print' auf die Reise schickst).
Software:
disp.getReceiveBuffer(receiveData.buf, 0, 12); // Ich gehe davon aus das hier die Daten eingelesen werden im Nextion
Nein, nicht im Nextion, sondern vom Nextion.
Ich habe an anderer Stelle einen geheimen Puffer, in den ich die vom Display kommenden Daten zeichenweise einlese (der Code ist gerade 25km entfernt). Da man nicht erwarten kann, bei einem Aufruf alle Daten schon in einem Rutsch zu bekommen, muss man sich auf teilweises Lesen einstellen und erst dann mit den Daten weiterarbeiten wenn alles komplett ist.
Wenn genug Futter da ist, hole ich mir die mit getReceiveBuffer() ab. Dahinter verbirgt sich eigentlich nur ein memcpy() vom Geheimpuffer ab einer bestimmten Stelle (0) mit einer gewissen Länge (12).
Wenn Du inzwischen ein wenig über 'union' gelesen hast:
Die Variable, in die die Daten eingelesen werden, heißt receiveData. Das ist halt kein einfacher Datentyp, sondern unwesentlich komplizierter aufgebaut - am Ende ist es aber eigentlich nur eine Variablendefinition wie jede andere auch. Die kannst Du lokal in einer Funktion oder global aufführen.
union {...} receiveData;
Auf den davon belegten Speicherplatz kannst Du entweder über buf (Array aus 12 char) oder aber über die Struktur values mit ihren drei einzelnen, jeweils vier Byte langen Integern zugreifen.
Das erste verwende ich beim Abholen der Daten, der volle Name ist dann receiveData.buf.
Das zweite nutze ich beim Schreiben der Werte. Die drei Variablen, die Du Dir im Eingangspost gewünscht hast, heißen dann receiveData.values.value1 (bis 3).