Nextion-Graphen stürzen ab

Hallöle.
Seit etlichen Stunden sitze ich jetzt dran: mir stürzen die beiden Graphen (in Wirklichkeit sind es zwei, aber so wie hier gezeigt, mit einem, funktionierts schon nicht) ab.

Folgendes funktioniert "scheinbar":

void zeichneGraphenKomplett()// ****************** erste Ausgabe der kompletten Graphen *********************************************
{                            
  int i=0;
  while(i<graphZeiger)
  {
    Serial1.print("add 2,0,");
    Serial1.print(baroGraph[i]);
    Serial1.write(displayEnde,3);
    i++;
   }
 
}

Scheinbar deshalb, weil ich mit endlosen Testreihen ziemlich sicher bin, dass genau dort der Hund begraben liegt.
Hier wird erstmal der Graph bis zum "aktuellen" Punkt gezeichnet, und das klappt auch.
Jedoch wird später dann das aufgerufen:

void aktualisiereGraphen()
{
  Serial1.print("add 2,0,");                // Barograph
  Serial1.print(baroGraph[graphZeiger]);
  Serial1.write(displayEnde,3);
}

Nun startet der Graph wieder von vorne.
Die Daten, die er ausgibt (Wert), sind aber korrekt!

Lasse ich den ersten Codeteil weg, funktionierts.

Der Graph ist 240px lang und 50 hoch, und ich hab sichergestellt, dass keine Daten kommen können, die ausserhalb der Bereiche liegen:

-baroGraph ist begrenzt auf Werte zwischen 1 und 49-> hab ich auch überprüft, indem ich mir hab das gesamte Array ausgeben lassen
-graphZeiger wir aus der aktuellen Uhrzeit so berechnet:

graphZeiger=((stunde*10)+(minute/6)) ;       // Zeiger für die Arrays berechnen

Auch das funktioniert (auch überprüft).

Ich hab endlos herumprobiert-nix klappt. Hat jemand eine Idee, was ich übersehen hab?
Falls es wichtig ist: das Nextion (bzw. die Kommunikation damit) läuft mit 57600 Baud und funktioniert auch.
Im selben Bildschirm wird die Uhrzeit (mit Sekunden) ausgegeben, die kommt einwandfrei an.

Es scheint so, als würde am Schluss von zeichneGraphenKomplett() einfach nur der Graph abschmieren, und quasi neu starten (spätere Ausgaben von aktualisiereGraphen() sind ja im Prinzip korrekt- nur die Position (y=0, statt y=graphZeiger) stimmt nicht mehr.
Nach diesem "Neustart" wird der Graph übrigens dann durchaus korrekt weitergeführt.
Auch das deutet darauf hin, dass der Hund im ersten Teil begraben liegt....

Probehalber hatte ich auch versucht, den ersten Teil der Graphen mit addt() zu zeichnen, das haut auch nicht hin.
Da werden "frei erfundene Werte" (nicht nachvollziehbare, unterschiedliche) ausgegeben und der Graph schmiert genauso ab. Vor dem ersten Zeichnen wird das Array natürlich befüllt- mit lauter 5en.
Auch das haut hin (überprüft).

Irgendwas hab ich offenbar übersehen- nur was?

Hallo,
keine Ahnung was Du da machst…
Zeiger für die Arrays kenne ich nur ohne Komma.

(minute/6)

2/6 = 0,333

Wenn Du hier:

Serial1.print("add 2,0,");
    Serial1.print(baroGraph[i]);
    Serial1.write(displayEnde,3);
    i++;

ins Nextion schreibst, dann könnte das "zu schnell" sein.

Wenn Du ein "Graph" auf dem Nextion darstellen willst, dann nutze doch die
Komponenten des Nextion.

Ich habe das zeichnen von "Graphen" immer dem Nextion überlassen. Du sendest
also nur Y, den Rest macht das Nextion.

Was willst Du eigentlich darstellen, wie soll das denn optisch aussehen?
Gruß und Spaß
Andreas

Hm, ok, Ergänzung: graphZeiger ist natürlich INT.
Somit ohne Komma.
Das funktioniert ja auch.
Zudem wird graphZeiger nur alle sechs Minuten überhaupt berechnet (und die sechs Minuten werden beim Startup "genullt")- es ist also ohnehin sicher, dass hier keine Float-Ergebnisse erscheinen können.
Das passt schon....

baroGraph[] ist ein Array mit 240 BYTE-Werten.
Das ist nötig, um die bereits vorhandenen Werte für 24 Stunden (alle sechs Minuten ein neuer Wert) zu speichern, nur so kann der Graph gelegentlich neu aufgebaut werden.
Vorsichtshalber fülle ich das Ding beim ersten Start komplett mit 5en, um ganz sicher zu gehen, dass da nicht "irgendwas" drinstehen kann.

dass add-Kommando benutzt die Waveform-Komponente des Nextion...was sonst?

"add 2,0," macht daraus
füge Komponente 2 (das ist die Welle), Kanal1 (heisst 1, muss aber den Wert 0 bekommen) folgendes hinzu...

dann wird der Wert aus dem Array gesendet, der grade aktuell ist:

Serial1.print(baroGraph*);*
i ist auch ne INT, und wird benötigt, um, beim Seitenaufruf, den Graphen aufzubauen.
Nextion kann Graphen nicht speichern, also müssen die, beim Seitenaufruf, immer neu geschrieben werden.
Genau das macht zeichneGraphenKomplett().
Die Graphen sollen auf der Skala von links nach rechts laufen, um 0.00 Uhr sind die ganz links, um 23.59 ganz rechts.
Wenn jetzt "irgendwann" die Seite mal aufgerufen wird, muss zuerst rausgefunden werden, wie weit der Graph schon sein müsste.
Dazu wird graphZeiger berechnet.
Und nun, von Anfang, bis zur Position graphZeiger, gezeichnet.
Soweit klappts auch.
Nun aber soll, anhand von graphZeiger, der Graph einfach nur fortgesetzt werden.
Und das klappt nicht- er beginnt wieder links, läuft dann jedoch (nach weiteren sechs Minuten) ganz normal weiter.
Nachtrag: das Verhalten ist auch im Simulator vorhanden:
ich kann an Waveform2 beliebig oft senden:
* *add 2,0,5* *
dann wird der Graph artig fortgeschrieben.
Aber so wie ich danach den Wert ändere:
* *add 2,0,12* *
beginnt der Graph von vorne!
sende ich folgendes genauso:
add 2,0,5
add 2,0,5
add 2,0,5
add 2,0,6
werden alle Punkte an Position 5 nacheinander schön von links nach rechts gezeichnet, jedoch erscheint der letzte Punkt wieder links.
Sende ich den ganzen Block mehrmals, ergibt das nen Sägezahn, immer die ersten klappen (es ist egal, wie oft ich "5" schicke, das funktioniert immer), aber so wie ein anderer Wert gesendet wird, kommt Murks raus.
Nachtrag 2:
Langsam wird mir klar, was da abgeht: das Nextion schiebt den gesamten Graphen jedesmal eins weiter. Das konnte mir nicht auffallen, weil zuerst alles mit dem selben Wert gefüllt wird.
Tolle Wurst, da muss ich wohl komplett umbauen.
Bisher ging ich davon aus, dass der Graph einfach von links nach rechts (so ist er eingestellt) mit weiteren Punkten ergänzt wird, aber das stimmt nicht.
Es zeichnet jedes Mal den gesamten Graphen neu-um ne Stelle nach rechts verschoben. :frowning: