Mega mit Nextion und eine led

Hallo kann mir jemand helfen?
Ich möchte auf meinem Mega eine led über das Nextion Steuern.

Ich bekomme es nur nicht hin.

Ich hab ein Button mit on/off

Page0
Button heißt b0
Id ist 1
Hex ist 65 00 01 01 FF FF FF

Touch Press Event ist ein Haken
Touch Release Event ist kein Haken

Es fehlt mir ein funktionierendes Sketch.
Ich hab soviel versucht aber irgendwie hat es nicht geklappt.

Mega2560
NX4832T035_011

Pinout ist.
Led gnd = gnd

  • mit 220ohm = pin6
    Nextion
    5v und gnd am externen Strom
    Tx = RX pin17
    RX =TX pin16
    Ich würde mich um jeden funktionierenden Sketch freuen.

10s Google Suche.
>Link<
Gruß
DerDani

Super idee aber das funktioniert irgendwie nicht bei mir. Hatte schon irgendwie alles probiert.
Sitze schon geschlagene 4 Tage daran.
Und ich hab nichts hinbekommen

Hast Du dieses Tutorial schon durchgearbeitet?

Gruß Tommy

Dann musst dem Sketch auch sagen das du Serial2 nutzt. Mehr können wir dir nicht sagen da du dein Testsketch hier nicht anhängst.
Denn
Tx = RX pin17
RX =TX pin16
sind Serial.Port2
Kuckst du hier

Gruß
DerDani

Ja hab ich.
Ich muss auch sagen bin ich nicht so der Theoretiker. Ich brauch erst mal immer etwas was funktioniert um es richtig zu verstehen.
Ich hab hier bestimmt 10 sketch gefunden mit Video oder Anleitungen.
Aber es funktioniert nicht. Hat einer ein Sketch der funktioniert?

Bin auch ganz neu mit diesem Thema.
Alles andere was ich bis jetzt gemacht habe,hab ich irgendwie hinbekommen.
Aber die Kommunikation zwischen den beiden Geräten ist nicht so leicht. Ich hab viel Geduld bei sowas. Aber ich hab soviel gelesen und gesehen das ich das alles gar nicht mehr zuordnen kann.

Hast Du auch das Nextion selbst mit dem Nextioneditor programmiert?

Gruß Tommy

volvodani:
Dann musst dem Sketch auch sagen das du Serial2 nutzt. Mehr können wir dir nicht sagen da du dein Testsketch hier nicht anhängst.
Denn
Tx = RX pin17
RX =TX pin16
sind Serial.Port2
Kuckst du hier

Gruß
DerDani

Ich hab jetzt alle Sketch vom Laptop geschmissen und wollte von neu anfangen.

Tommy56:
Hast Du auch das Nextion selbst mit dem Nextioneditor programmiert?

Gruß Tommy

Ja Tommy hab ich. Hab auch vorgefertigte genommen und da hat auch immer irgendwas nicht hingehauen

Dann schau doch erst mal, ob überhaupt was an Serial 2 vom Nextion ankommt, wenn Du dort den Button drückst:

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

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

Wenn Du Dein Nextion an Serial2 angeschlossen hast und nichts kommt, wenn Du den Button auf dem Nextion betätigst, dann hast Du dieses nicht richtig programmiert.
Wenn etwas kommt, dann stelle die Hex-Zeichenfolge hier vor.

Gruß Tommy

Geht schon gut los

Ich habs korrigiert (Klammern vergessen).

Fehlermeldungen sind Text. Text als Bilder anzuhängen ist keine gute Idee.
Den Meldungstext einfach in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *) als Text einfügen.

Gruß Tommy

Tommy56:
Ich habs korrigiert (Klammern vergessen).

Fehlermeldungen sind Text. Text als Bilder anzuhängen ist keine gute Idee.
Den Meldungstext einfach in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *) als Text einfügen.

Gruß Tommy

Wo hast die klammern vergessen?

Ich hab gerade ein alten Laptop. Da hat heute das Internet den Geist aufgegeben.
Der neue kommt erst die Tage

Bei if (Serial2.available()) {

Gruß Tommy

so das ist dabei herausgekommen

65 0 1 1 FFFFFFFF FFFFFFFF FFFFFFFF

Das sieht doch schon fast gut aus. (Ein paar FF zuviel)

65  = Kennung für ein Touch-Event
  0  = Page 0
  1  = Component-ID
  1  = Press (0 wäre Release)
FFFFFFF = Endekennung (3 Mal FF)

Das alles kannst Du in den Dokus des Herstellers z.B. Instruction Set
7 – Format of Nextion Return Data und dann die laufende Nummer 19

Wenn Du das auswerten willst, kannst Du z.B. schreiben:

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);
}

Als Anregung für eigene Experimente mal quick & dirty. Eigentlich müsstest Du auch noch die anderen Bytes auswerten, wenn Du mehrere Ereignisse hast.

Gruß Tommy

aber jetzt sollte die Led in der therorie doch angehen wenn ich den button drücke richtig?

if (fertig && puffer[0] == 0x65) digitalWrite(led,HIGH); //led =pin 6

Tommy56:
Wenn Du das auswerten willst, kannst Du z.B. schreiben:

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);
}



Als Anregung für eigene Experimente mal quick & dirty. Eigentlich müsstest Du auch noch die anderen Bytes auswerten, wenn Du mehrere Ereignisse hast.

Ist wirklich sehr krude und überschreibt nach der ersten Nachricht den Restspeicher
kann nur eine einzige Nachricht empfangen, idx wird nirgends zurückgesetzt.

wie müsste ich es schreiben das ich mit dem button die led an und aus schalten könnte?
müsste ich im nextioneditor was ändern?
touch press ist ja jetzt an
touch release auch anmachen?

Ja, würde ich machen.

  1. Press = an - releasemerker = false
    warten auf release = ok, der hat losgelassen - releasemerker = true
  2. Press = aus - releasemerker = false
    warten auf release = ok, der hat losgelassen - releasemerker = true

Und dann kannst Du das immer so weiter machen.

Gruß Tommy