Moin Leute,
ich nutze an meiner Wetterstation (ca. 2000 Zeilen Code in 13 Tabs daher wirds schwer das richtige zu Posten) ein Nextion HMI 3,5" Display.
Jetzt bekomme ich im Code die Wetterdaten von 5 Funkstationen und will diese Daten auf dem Display ausgeben lassen.
Als Hilfe zum ersten inbetriebnehmen nutzte ich dieses Video hier.
In einem Tab für die Nextion funktionen hab ich folgendes stehen:
void nextionTemp()
{
memset(buffer, 0, sizeof(buffer));
itoa(t1, buffer, 10);
tempDisplay1.setText(buffer);
memset(buffer, 0, sizeof(buffer));
itoa(t2, buffer, 10);
tempDisplay2.setText(buffer);
memset(buffer, 0, sizeof(buffer));
itoa(t3, buffer, 10);
tempDisplay3.setText(buffer);
memset(buffer, 0, sizeof(buffer));
itoa(t4, buffer, 10);
tempDisplay4.setText(buffer);
memset(buffer, 0, sizeof(buffer));
itoa(t5, buffer, 10);
tempDisplay5.setText(buffer);
}
void nextionHum()
{
memset(buffer, 0, sizeof(buffer));
itoa(h1, buffer, 10);
humDisplay1.setText(buffer);
memset(buffer, 0, sizeof(buffer));
itoa(h2, buffer, 10);
humDisplay2.setText(buffer);
memset(buffer, 0, sizeof(buffer));
itoa(h3, buffer, 10);
humDisplay3.setText(buffer);
memset(buffer, 0, sizeof(buffer));
itoa(h4, buffer, 10);
humDisplay4.setText(buffer);
memset(buffer, 0, sizeof(buffer));
itoa(h5, buffer, 10);
humDisplay5.setText(buffer);
}
void buttonHomePushCallback(void *ptr)
{
page1.show();
nexPage = 2;
}
void buttonBackPushCallback(void *ptr)
{
page0.show();
nexPage = 1;
}
Zur definierung dieses
// Nextion
//--------------------------------------------------------------------------------------
NexPage page0 = NexPage(0, 0, "page0");
NexPage page1 = NexPage(1, 0, "page1");
// Erstellt ein Objekt (SeitenID: 0, ObjektID: 2, ObjektName: ""
NexText tempDisplay1 = NexText(0, 1, "tempDisplay1");
NexText tempDisplay2 = NexText(0, 2, "tempDisplay2");
NexText tempDisplay3 = NexText(0, 3, "tempDisplay3");
NexText tempDisplay4 = NexText(0, 4, "tempDisplay4");
NexText tempDisplay5 = NexText(0, 5, "tempDisplay5");
NexText humDisplay1 = NexText(0, 1, "humDisplay1");
NexText humDisplay2 = NexText(0, 2, "humDisplay2");
NexText humDisplay3 = NexText(0, 3, "humDisplay3");
NexText humDisplay4 = NexText(0, 4, "humDisplay4");
NexText humDisplay5 = NexText(0, 5, "humDisplay5");
NexButton buttonHome = NexButton(0, 26, "buttonHome");
NexButton buttonBack = NexButton(1, 2, "buttonBack");
int nexPage = 1;
char buffer[10] = {0};
NexTouch *nex_listen_list[] =
{
&tempDisplay1,
&tempDisplay2,
&tempDisplay3,
&tempDisplay4,
&tempDisplay5,
&humDisplay1,
&humDisplay2,
&humDisplay3,
&humDisplay4,
&humDisplay5,
&buttonHome,
&buttonBack,
NULL
};
Der Loop sieht (gekürzt) wie folgt aus:
void loop()
{
nexLoop(nex_listen_list);
nextionTemp();
nextionHum();
recieve();
}
Bei recieve(); werden nur die Daten via Funk empfangen und in ints gesteckt.
Mein Problem ist folgendes:
Ich bin auf der Ersten Seite (page0) des Displays. Alle Daten werden korrekt angezeigt.
Wechsle ich jetzt auf page1 des Displays, "hängt" das Display und ich muss mehrfach auf "zurück" hämmern bevor überhaupt (wenn überhaupt) was passiert.
Meistens kommt dann nur noch ein Restart des Arduinos in frage.
Im Serial monitor bekomme ich auf Page0 "recvRetCommandFinished ok" zurück.
Auf page1 kommt dann permanent "recvRetCommandFinished err".
Kann mir jemand helfen?