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
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
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.
Der Anfang ist richtig, dann kommen zu viele 0xFF.
0x65 0x00 0x01 0x01 0xFF 0xFF 0xFF
Returned when Touch occurs and component’s
corresponding Send Component ID is checked
in the users HMI design.
0x00 is page number,
0x01 is component ID,
0x01 is event (0x01 Press and 0x00 Release)|
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.