Nextion Display | benötige Hilfe bei der Abfrage von Buttons

Hallo liebe Arduino-Gemeinde,

ich benötige dringend Hilfe bei meinem Projekt, in dem ich zum ersten Mal ein Nextion Display (NX3224T028_011) benutze!!!
Ich habe totale Probleme meine Buttons abzufragen, die ich mir erstellt habe. Um mein Problem verständlich zu erleutern, habe ich die Programmierung bis auf das betreffende Problem kompremmiert. Der Code wird bei mir auf einen Arduino Mega aufgespielt.

#include <SoftwareSerial.h>
#include <Nextion.h>

SoftwareSerial nextion(14, 15);// Nextion TX to pin 14 and RX to pin 15 of Arduino Mega

Nextion myNextion(nextion, 9600); //create a Nextion object named myNextion using the nextion serial port @ 9600bps

void setup() {
  Serial.begin(9600);
  myNextion.init(); // send the initialization commands for Page 0
}

void loop() {
  String message = myNextion.listen(); //check for message
  
  if (message == "65 02 09 01 FF FF FF") {
    Serial.print("Butten wurde gedrückt");
  }
}

IIch habe das Problem, dass ich die erstellten Buttons einfach nicht abgefragt bekomme. Hierbei gehe ich im Grunde nach folgendem Tutorial vor: Tutorial
und nutze die Nextion.h Bibiliothek

Normalerweise erwarte ich, dass nach dem klicken auf den entsprechenden Button das myNextion Objekt die Adresse an den String "message" schickt, was in einer if-Abfrage ausgewertet wird. Ist diese Abfrage wahr (also exakt die zu erwartende Adresse), so möchte ich einfach nur erst mal ein Serial.print ausgeben, damit ich sicher sein kann, dass ich mit den Buttons etwas anfangen kann. Aber es passiert einfach nichts und ich habe absolut keine Ahnung mehr woran es liegt.

Im Anhnag ist ein Bild beigefügt, auf dem man die Adresse des Buttons "kleiner Schuss" während des Debugens zu sehen ist.

Ich bin wirklich jeder Hilfe dankbar!!! :frowning:

Warum verwendest du auf dem Mega nicht die Hardware Serielle die zusätzlich vorhanden ist ?
Und lies doch erstmal aus, was auf der SoftwareSerial ankommt und zeige das im seriellen Monitor an.

Leider kann ich nicht mehr dazu sagen, da ich die Nextion-Library nicht kenne und nicht nutze.

Problem: Hier arbeitet eigentlich fast keiner mit der Nextion-Lib, weil die ziemlich schlecht ist.
Dazu wirst Du also kaum Hilfe dazu bekommen.

Nutze das Tutorial von Boecker, die Leseroutine nach Whandall

// nach Whandall 05.09.2019 forum.arduino.cc
// https://forum.arduino.cc/index.php?topic=634382.15
const byte bufferSize = 15;
uint8_t buffer[bufferSize];

void setup() {
  Serial.begin(115200);
  Serial2.begin(9600); 
}

bool readNex(Stream &s) {
  static uint8_t bIndex = 0;
  bool allesDa = false;
  if (s.available()) {
    uint8_t inChar = s.read();
    buffer[bIndex++] = inChar;
 // 0x71 bei diesen Paketen können drei 0xFF Bestandteil des Pakets sein,
    // also ergibt es nur Sinn auf die Delimiter hinter dem Wert zu testen
    if (inChar == 0xFF && (bIndex >= (*buffer == 0x71 ? 8 : 3)) &&
        buffer[bIndex - 2] == 0xFF && buffer[bIndex - 3] == 0xFF) {
      allesDa = true;
    } else {
      allesDa = (bIndex == bufferSize);
    }
  }
  if (allesDa) bIndex = 0; // Index zurücksetzen 
  return allesDa;
}

void loop() {

unsigned long varVomNextion =0;
bool fertig = readNex(Serial2);
  if (fertig && buffer[0] == 0x71) { // numerische Daten
    varVomNextion = buffer[1]+buffer[2]*256+buffer[3]*65536+buffer[4]*16777216;
  Serial.println(varVomNextion);
 }
}

die Doku vom Hersteller und die gesammelten Erfahrungen im Forum.

und alles wird gut.

Gruß Tommy

Hey bin absoluter Anfänger was den Arduino betrifft, kenn mich aber etwas mit dem Nextion Display aus. Nur ein Idee, wahrscheinlich aber Quatsch:

In deinem Codebeispiel steht etwas von Page 0, die Hexsignatur von dem Button zeigt als page id jedoch nicht die 00, sondern 02. ( page_id sollte die zweite Stelle nach dem Steuerzeichen sein, steht aber alles in der Doku)

Grundsätzlich macht es aber vmtl. sehr viel mehr Sinn sich wie der Vorredner schrieb mit den tutorials und der Dokumentation von Nextion vertraut zu machen.

Falls Du gar nicht weiterkommst, auf dem raspberry mit python läuft es wunderbar.

PS kenne mich wie gesagt mit cpp noch gar nicht aus, aber bei meinen Versuchen war das Vergleichen von Strings mit == teilweise auch iwie problematisch.

Füge doch mal vor dem if in der loop eine Testausgabe der empfangenen Nachricht auf dem seriellen Monitor ein - dann siehst Du, was das Display tatsächlich schickt und was ggf. an dem Vergleichsstring zu ändern wäre.

if (message != "")  // oder if (message.length())
  Serial.println(message);

hier ist ne recht neue Library:

Könnt auch hier was abschauen:

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