Per Button am Nextion-Dispaly einen Ausgang am Arduino Mega schalten

Liebes Arduino Forum,
Ich habe letzten erst mit dem Programmieren angefangen und stehe schon wieder vor einem Problem. Ich kann nämlich nicht den Button, den ich zuerst auf dem Nextion display hinzugefügt habe am Arduino anzeigen lassen (Serial Monitor).
Ich hoffe ihr könnt mir helfen, hier die Daten: Ich benutze ein Nextion Intelligent 5 Zoll Display NX8048P050-011C Kapazitiver Touchscreen, in Kombination mit einem Arduino Mega 2560

#include <SoftwareSerial.h>

SoftwareSerial nextion(14, 15); // RX, TX
String daten_display = "";

void setup() 
{
  Serial.begin(9600);
  nextion.begin(9600);

}

void loop() 
{
  if (nextion.available() > 0)
  {
    daten_display += char (nextion.read());
  }

  if (daten_display == "Button1")
  {
    
    Serial.println("Button1");
    daten_display="";
  }
  if (daten_display == "Button2")
  {
    Serial.println("Button2");
    daten_display="";
  }
}

Beim Mega brauchst Du kein SoftwareSerial, der hat 4 HardwareSerial.
Schau Dir mal die Tutorials bei Böcker an.
Die Kommunikation läuft anders, als Du Dir das vorstellst. Da musst Du schon mal etwas dazulernen

Gruß Tommy

ok! Danke.

Ich habe mir die Seiten durchgelesen, aber verstehe immer noch nicht ganz, wie ich einen Ausgang am Arduino Mega schalten kann. Hier der Code. Brauche bitte Hilfe :sweat_smile:



String daten_display = "";

void setup() 
{
  Serial.begin(9600);
  Serial3.begin(9600);
  Serial.print("Los");

}

void loop() 
{
  if (Serial3.available())
  {
    char c = Serial2.read();
    Serial.print(c,HEX);
    Serial.print(" ");
  }

  if (daten_display == "Button1")
  {
    
    Serial3.println("Button1");
    daten_display="";
  }
  if (daten_display == "Button2")
  {
    Serial3.println("Button2");
    daten_display="";
  }
}

Geht das vielleicht sogar ohne hex. dez. auslesen (Also einfacher)

Sieh dir doch mit dem seriellen Monitor an, was dein Display sendet, wenn du einen Button drückst.

65 0 1 1 FFFFFFFF FFFFFFFF FFFFFFFF das wird angezeigt, wenn ich den Button drücke

Dann funktioniert deine Übertragung nicht.
Schau mal hier, ob du was dazu findest.

const int led = 43;
int daten_display;
void setup() 
{
  Serial.begin(9600);
  Serial2.begin(9600);
  Serial.print("Los");

}

void loop() 
{
  if (Serial2.available())
  {
    char c = Serial2.read();
    Serial.print(c,HEX);
    Serial.print(" ");
  }

  if (daten_display == "1")
  {   
    digitalWrite(led,HIGH);
  }

}

Nein ich habe das extra gemacht, dass ich es in Hex ausgeben lasse, weil ich eben nicht weiß, wie ich sonst anders ein Signal bekomme.

Ich möchte aber, dass ich das umwandeln kann in ein High oder Low, damit das Ganze einfacher wird.

Da du deinen Sketch offensichtlich aus einem Tutorial abgetippt hast, verstehe ich nicht, warum du den nicht genau so nimmst, wie er da steht.

Oder möchtest du uns hier nur beschäftigen ?

Nein

Nein eigentlich nicht. Ich möchte nur um Hilfe fragen, den Code zu ändern, weil er sehr Komplex ist.

Ok, dann bau es doch mal genau so, wie im Tutorial auf.
Zeige den aktuellen Sketch und beschreibe was da funktioniert.

Ok.Danke :grinning:

Der Anfang ist richtig, dann kommen zu viele 0xFF.

aus Nextion Instruction Set

Gruß Tommy

Im Grunde genommen, möchte ich ja nur eine Led an und ausschalten mit dem Nextion, aber wie oben schon angeführt gibt der Nextion immer die Hex zahlen an. Muss ich da was im Programm machen oder in der Nextion App? denn ich steh gerade echt auf dem Schlauch.

Deswegen solltest du ja auch den Sketch wie im Tutorial zum Laufen bringen.
Den Rest zeig ich dir dann. Das ist dann nicht mehr aufwändig.

Aber bitte mit serial2 oder 3. Nicht mit SoftwareSerial.

Das Nextion sendet in der Standardkonfiguration immer die Kombination
Kennbyte
Inhalt
3 Mal 0xFF als Endekennung

Das hat der Hersteller so fest gelegt.

Gruß Tommy

const byte anzPuffer = 4;
char puffer[anzPuffer];
byte idx = 0;
bool fertig = false;
const byte led = LED_BUILTIN;

void setup() {
  Serial.begin(9600);
  Serial2.begin(9600);
  Serial.println("Start Sketch");
  
}

void loop() {
  if (Serial2.available()) {
    char c = Serial2.read();
    if (c == 0xff) {
      fertig = true;
    }
    else if (idx < anzPuffer) puffer[idx++] = c;
    // Serial.print(c,HEX);
    // Serial.print(" ");
  }
  if (fertig && puffer[0] == 0x65) digitalWrite(led,HIGH);
}

Das ist der Code aus dem Tutorial, aber es passiert nichts, wenn ich den Button betätige.

Kann man vielleicht auch etwas anderes Printen lassen, wie z.B print"Button1", damit ich im Programm den State wechsle, wenn der Button berührt wird.