Ardunio und Nextion Display

Hallo zusammen,

bin ein Einsteiger und möchte etwas automatisieren.
Arduino alleine funktionert schon, nur habe ich keine Ahnung wie ich das Display einbinden soll.

Display bekommt 8 Nummernfelder (n0-n7) und diese Werte möchte ich in der Steuerung übernehmen…

Kann mir da jemand weiterhelfen??

Code im Arduino:

int VSchubser = 200; //Delay von erkennen der Wurst bis zur passenden Länge. 
int TRelais1 = 200; //Zeit für Magnetventil zum ausfahren
int TRelais2 = 200; //Zeit für Magnetventil zum einfahren
int VFirstRound = 700; //Delay bis zur ersten Drehrichtungsumkehr
int VZwischen = 750; //Wechselzeit
int PWM = 255; //Drehzahl
int Wieder = 3; //Wiederholungen
int PWM_L = 100; // Langsame Geschwindikeit




void setup() {
// put your setup code here, to run once:


pinMode(36,OUTPUT); //Schubser ausfahren
pinMode(38,OUTPUT); //Schubser einfahren
pinMode(11,OUTPUT); //Drehrichtungswechsel
pinMode(2,INPUT); // Eingang Lichtschranke
pinMode(13,OUTPUT); //PWM für Drehzahl
}

void loop() {
// put your main code here, to run repeatedly:

int i = 0;


analogWrite(13,PWM);
digitalWrite(11,HIGH);

if (digitalRead(2)==LOW) {
// Anweisungsblock für wahr


delay(VSchubser);
digitalWrite(36,HIGH);
delay(TRelais1);
digitalWrite(36,LOW);
digitalWrite(38,HIGH);
delay(TRelais2);
digitalWrite(38,LOW);
delay(VFirstRound);
analogWrite(13,PWM_L);

while (i<Wieder)
{
digitalWrite(11,LOW);
 delay(VZwischen);

 digitalWrite(11,HIGH);
  delay(VZwischen);

  
i++;
}
} else {
}




}

Die 8 Int Werte am Anfang möchte ich über das Nextion Display eingeben können…

Kann mir da bitte jemand weiterhelfen???

DANKE

Das Nextion-Display musst Du auch programmieren. Lade Dir dazu den Nextion-Editor runter und baue Deine Oberfläche.
Die Arduino-Nextion-Lib ist nicht unbedingt notwendig, da der Datenaustausch sehr gut dokumentiert ist.
Hier gibt es ein Tutorial dazu.

Gruß Tommy

Danke für deine Antwort!

Das Display habe ich schon programmiert und funktioniert.

Nur die Daten bekomme ich nicht in den Arduino :frowning:

Gruß
Thomas

Hallo,
suche hier im Forum mal nach Nextion, steht alles gut erklärt da.
Gruß und Spaß
Andreas

Ich habe mir auch schon angesehen… aber sobald ich Beispiele mit <Nextion.h> versuche, bekomme ich immer Fehlermeldung

… is Not declared in the scope

Bei den nextion befehlen

Hallo,
das ist auch richtig!
Die "aktuellsten" Beiträge laufen NICHT- mit der "Nextion.h"
In Deiner Stelle würde ich die in die Tonne klobben und es ohne Lib machen.
Das ist sehr viel einfacher.
Gruß und Spaß
Andreas
P.S. hier wird fast nur mit der Nextion.h gearbeitet.

Du musst einen Pin des Arduino zur SoftSerial machen, passend einstellen (9600 ... ?) und dann darüber mit dem Nextion kommunizieren.

Aufpassen, das Display ist offiziell für 3,3V-Logik ... keine Ahnung, ob es auch 5V aushält. Mit Due oder Wemos gibts da keine Probleme, die sind selber 3,3V ...

Hallo,
"nur habe ich keine Ahnung wie ich das Display einbinden soll"

Ich gehe ja mal davon aus, das die Hardware richtig "steht"!?

Schreibe doch einmal, was für ein Arduino, was für ein Nextion, wie ist das alles verdrahten.
Ist der obige Sketch, das Original welches das Nextion anspricht?
Wenn es nicht zu viel Mühe macht, dann komme mal mit mehr Informationen rüber.
Gruß und Spaß
Andreas

qualidat:
Aufpassen, das Display ist offiziell für 3,3V-Logik ... keine Ahnung, ob es auch 5V aushält. Mit Due oder Wemos gibts da keine Probleme, die sind selber 3,3V ...

Das ist falsch.
Das Nextion arbeitet mit 5V Betriebsspannung. Es erkennt 3,3 V als High (aber auch 5 V) und liefert 3,3 V als High, so dass es ohne Anpassungen auch am ESP8200 arbeiten kann.

Gruß Tommy

Danke für die vielen Antworten.

1.) hardware steht und ist richtig verdrahtet
2.) Arduino Mega2560 wobei RX2 (Pin17) und TX2(Pin 16) für das Display verwendet werden
3.) Nextion NX4832T035_11 wird verwendet und da habe ich schon 8 Nummerenfelder (n0-n8) erzeugt
4.) oben angeführter Quellcode ist nur die Steuerung der Maschine, diese funktioniert Soft- sowie
Hardwaretechnisch

5.) nun meine Herausforderung:

int VSchubser = 200; //Delay von erkennen der Wurst bis zur passenden Länge. 
int TRelais1 = 200; //Zeit für Magnetventil zum ausfahren
int TRelais2 = 200; //Zeit für Magnetventil zum einfahren
int VFirstRound = 700; //Delay bis zur ersten Drehrichtungsumkehr
int VZwischen = 750; //Wechselzeit
int PWM = 255; //Drehzahl
int Wieder = 3; //Wiederholungen
int PWM_L = 100; // Langsame Geschwindikeit

diese Werte will ich vom Display auslesen (n0-n8).
Dann werden diese Variablen (im ersten Post von mir ist der gesamte code) weiterverarbeitet.

Habe mit diesem Code die Komunikation (natürlich eine andere TFT Datei fürs Display) getestet.
Counter zählt hinauf.

#include <SoftwareSerial.h>
SoftwareSerial NexSerial(16,17);// RX, TX on pins 10 and 11

int counter;
int char1,char2,char3;
int charflag=0;

void setup()  
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  NexSerial.begin(9600);
  pinMode(13,OUTPUT); // Arduino LED
}



void loop() {
  counter=++counter;  // increment counter
  NexSerial.print("c0.txt=");   // write counter value in c0 
  NexSerial.write(0x22); // "
  NexSerial.print(counter); //  
  NexSerial.write(0x22); //"    for "counter"
  NexSerial.write(0xff);
  NexSerial.write(0xff);
  NexSerial.write(0xff);
}

Nur kann ich keine Werte auslesen und dann gibt es noch das Problem mit den verschieden verschiedenen Variablen. Benötige INT und bekomme “const char” vom Ardunino…

Vielleicht könnte mir jemand einen Kurzen Tipp geben, wie der richtige Code fürs auslesen und weiterverarbeiten ist.

Danke

Gruß
Thomas

Hallo,
also ein Mega mit angeschlossenen Nextion?

Dann werfe erst einmal die "SoftwareSerial.h" aus dem Sketch

Das

SoftwareSerial NexSerial(16,17);// RX, TX on pins 10 and 11

auch raus.

Dann das

void setup() 
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  NexSerial.begin(9600);
  pinMode(13,OUTPUT); // Arduino LED
}

ändern- in

void setup() 
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600); // für Ausgabe im seriellen Monitor
  Serial2.begin(9600); // für Ausgabe an das Nextion
  pinMode(13,OUTPUT); // Arduino LED
}

dann das

NexSerial.print("c0.txt=");   // write counter value in c0
  NexSerial.write(0x22); // "
  NexSerial.print(counter); // 
  NexSerial.write(0x22); //"    for "counter"
  NexSerial.write(0xff);
  NexSerial.write(0xff);
  NexSerial.write(0xff);
}

ändern in

Serial2.print("c0.txt=");   // write counter value in c0
  Serial2.print(counter); // das sollte txt sein
  Serial2.write(0xff);
  Serial2.write(0xff);
  Serial2.write(0xff);
}

Wenn Dein "counter" ursprünglich eine Zahl/Ziffer ist, dann mache aus dem "c0.txt=" Feld im Nextion
ein NummernFeld ("MeinWert.val="). Dann überträgst Du "counter" als int.

Gruß und Spaß
Andreas
P.S. lasse Dir alle Ausgaben Deines Sketch erst einmal im seriellen Monitor anzeigen.
Wenn alles richtig ist, dann sendest Du es an das Nextion.

Du bekommst vom Nextion immer Text, den Du auseinander nehmen musst.
Wie der Aussieht, hängt von Deinem Nextion-Programm ab, das wir nicht kennen.

Hast Du "Send Component ID" eingeschaltet? In welchen Event sendest Du die Daten der Nummernfelder? Wie füllst Du die Nummernfelder? Feste Werte oder mit einer virtuellen Tastatur?

Soll beim Touch dann einfach der Wert des Nummernfeldes übertragen werden?

Überigens, wenn Du vom Nextion lesen willst, brauchst Du Serial1.read() Das sehe ich in Deinem Testsketch nicht.
Lies doch einfach mal alles vom Nextion und schreibe es auf den seriellen Monitor.

Gruß Tommy

Hallo,
"brauchst Du Serial1.read()"

Verstehe da etwas nicht falscht. Zum Lesen und Schreiben reicht eine serielle Schnittstelle des Mega.
Du hast die Wahl Serial1, oder Serial2, oder Serial3.
Suche Dir EINE davon aus.
Gruß und Spaß
Andreas

Er hatte weiter oben schon Serial1 benutzt. Es ging aber eigentlich um read(), wenn er etwas lesen will. Das war in seinem Testsketch nicht drin.

Gruß Tommy

PS: Leider gibt es keinen Text-Export aus dem Nextion-Editor. Das würde manchen Thread stark vereinfachen.

Hallo,
"Leider gibt es keinen Text-Export"

was meinst Du damit?

Er kann doch eine Variable definieren? Geht doch als Number oder String durch.

Mit print var.val=20 sendet er "20", mit print var.val="Test" sendet er "Test" vom Nextion.
Mit "get" kann er es holen.
Gruß und Spaß
Andreas

Wenn er den Wert erst zum Arduino sendet, braucht er ihn von dort nicht wieder holen, dann kennt er den Wert ja schon.

Ich blicke noch nicht richtig, was er überhaupt machen will. Ob er verschiedene Werte auf Feldern hat und bei einem Touch darauf den Wert übertragen will oder irgend was anderes.

Ich warte jetzt erst mal, dass der TO mal genauer beschreibt, was er wann warum lesen will.

Gruß Tommy

So im Anhang die Nextion Bilder. Mit “+” und"-" verändere ich die Werte im Nummernfeld und das ist mit dem Slider verbunden (nur zur Visualisierung)

Ich will keine Werte an das Nextion schicken, sondern nur lesen.

Habe jetzt mal den Code von SkobyMobil versucht. jetzt bekomme ich nur Fehlermeldungen. Es funktioniert read nicht und getauch nicht :-((

void setup() {
  // put your setup code here, to run once:
 // Open serial communications and wait for port to open:
  Serial.begin(9600); // für Ausgabe im seriellen Monitor
  Serial2.begin(9600); // für Ausgabe an das Nextion
}

void loop() {
  // put your main code here, to run repeatedly:
  

Serial2.read("n0.val=");  
Serial2.get("n0.val=");  

  
Serial.print(9600);

  

}

Fehlermeldung:

Arduino: 1.8.1 (Windows 8.1), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

C:\Users\Thomas\Desktop\MAi_Neu\MAi_Neu.ino: In function 'void loop()':

MAi_Neu:12: error: no matching function for call to 'HardwareSerial::read(const char [8])'

 Serial2.read("n0.val=");  

                       ^

C:\Users\Thomas\Desktop\MAi_Neu\MAi_Neu.ino:12:23: note: candidate is:

In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:232:0,

                 from sketch\MAi_Neu.ino.cpp:1:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:126:17: note: virtual int HardwareSerial::read()

     virtual int read(void);

                 ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:126:17: note:   candidate expects 0 arguments, 1 provided

MAi_Neu:13: error: 'class HardwareSerial' has no member named 'get'

 Serial2.get("n0.val=");  

         ^

exit status 1
no matching function for call to 'HardwareSerial::read(const char [8])'

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Was habe ich da falsch gemacht??

Danke

Gruß
Thomas

Hallo,
sollte mich wundern, wenn ich diesen Code veröffentlich habe…

Ich verstehe da so richtig?

Du stellst auf dem Nextion bestimmte Werte ein- und möchtest diese an den Arduino senden?

Wenn der Arduino diese Werte empfangen hat, dann sollen diese vom Arduino verarbeitet werden?

Vom Arduino zum Nextion soll nichts gesendet werden?

Gruß und Spaß
Andreas

danke für deine schnelle Rückmeldung SkobyMobil.

Du hast nicht genau diesen Code veröffentlicht. Nur den Vorschlag, das ich die "softwareSerial.h" weglassen soll und das NexSerial auch.

Da war noch mein Bespiel mit dem counter...

"Du stellst auf dem Nextion bestimmte Werte ein- und möchtest diese an den Arduino senden?

Wenn der Arduino diese Werte empfangen hat, dann sollen diese vom Arduino verarbeitet werden?

Vom Arduino zum Nextion soll nichts gesendet werden?
"

genau so..

Danke

Gruß
Thomas

Hallo,
"Nur den Vorschlag, das ich die "softwareSerial.h" weglassen soll und das NexSerial auch."

Das ist der beste weg zum neuen Anfang...

"Das Display habe ich schon programmiert und funktioniert.
Nur die Daten bekomme ich nicht in den Arduino :-("

Wie sendest Du den Wert vom Nextion zum Arduino?
Was hast Du da im Nextion wo programmiert?

Gruß und Spaß
Andreas