In dem Beitrag will ich kurz auf den Dual State Button und den normalen Button eingehen. Programmbeispiel für den Arduino und Funktionsweise.
Was ist ein Dual State Button?
Ein Dual State Button ist so zu sagen ein Taster mit Rastfunktion oder auch Schalter genannt. Sprich beim betätigen des Button bleibt er gedrückt bis man Ihn noch einmal drückt. Dann geht er wieder in seine Ausgangsstellung zurück.
Software zum erstellen der Nextionoberfläche findet Ihr hier. https://nextion.tech/nextion-editor/ Auf der Nextion Seite findet Ihr noch weitere nützliche Infos über das Display.
Einstellungen in der Nextion Software:
Als erstes erstellen wir uns eine Normalen Button und einen Dual State Button.
![]() |
In den Attributen kann man den Unterschied zwischen den beiden Buttons sehen. Der Dual State Button hat ein Attribut mehr, den val-Wert. Dieser gibt den Schaltzustand des Buttons an. 0=nicht gedrückt und 1=gedrückt. Alle grün Markierten Werte können mit dem Arduino verändert werden. |
![]() |
Im letzten Schritt geben wir den beiden Buttons noch den print befehl in das jeweilige Touch Press Event. Das ist dafür da um den Button über den Arduino abfragen zu kommen. Das habe ich im Tutorial 3 schon einmal erklärt. |
![]() ![]() |
Der Programmcode
#include <softwareserial.h> SoftwareSerial nextion(6, 5); // RX, TX String daten_display = ""; int btn_state = 0; int valdsb = 0; unsigned int led1=9; unsigned int led2=12; void setup() { nextion.begin(9600); pinMode(led1,OUTPUT); pinMode(led2,OUTPUT); } void loop() { if (nextion.available() > 0) { daten_display += char (nextion.read()); } if (daten_display == "Button" && (!btn_state)) { btn_state = 1; digitalWrite(led1, HIGH); nextion.print("b1.bco=1024"); nextion.write(0xFF); nextion.write(0xFF); nextion.write(0xFF); daten_display=""; } else if (daten_display == "Button" && (btn_state)) { btn_state = 0; digitalWrite(led1, LOW); nextion.print("b1.bco=50712"); nextion.write(0xFF); nextion.write(0xFF); nextion.write(0xFF); daten_display=""; } if (daten_display == "DSButton" && (!valdsb)) { valdsb = 1; digitalWrite(led2, HIGH); nextion.write(0xFF); nextion.write(0xFF); nextion.write(0xFF); daten_display=""; } else if (daten_display == "DSButton" && (valdsb)) { valdsb = 0; digitalWrite(led2, LOW); nextion.write(0xFF); nextion.write(0xFF); nextion.write(0xFF); daten_display=""; } }
|
|
Folgende Bauteile wurden verwendet:
1x Nextion 3.5″ Discovery Touch Display 480×320 HMI – NX4832F035 - https://ap-url.de/nextion35d1x Nextion 3.5″ Enhanced Touch Display 480×320 HMI – NX4832K035 - https://ap-url.de/nextion35e
1x FTDI Adapter FT232RL USB zu TTL - https://ap-url.de/ftdi
1x UNO R3 ATmega328P Board mit USB Kabel Arduino Uno R3 kompatibel - https://ap-url.de/arduinouno
8 Kommentare
Hallo Patrice,
ich weiß jetzt nicht was du schon alles probiert hast. Im Normalfall würde ich die Ausgänge im Setupteil erstmal alle auf LOW setzten.
Gruß
Tobias
Hallo
Danke für die tollen Infos.
Funktioniert alles so weit. Das einzige Problem ist, wenn der Arduino eingeschaltet wird, sind die Ausgänge
eingeschaltet (HIGHT). Diese sollten bei meiner Anwendung jedoch ausgeschaltet sein.
Habe vieles schon probiert, leider ohne Erfolg.
Hast du eine Idee, wie ich das $ändern kann?
Liebe Grüsse
Patrice
Hallo Tino,
das kann ich Dir so nicht sagen, schick mir mal eine Daten und dann guck ich es mir an.
Gruß
Tobias
Hallo,
soweit funktioniert das alles ganz gut. Wenn ich aber beim nextion die Seite wechsle weden keine Daten mehr übertragen. Was kann das sein?
Hallo Björn,
eine automatische Abschaltung gibt es hier im Beispiel nicht. Das kann man aber in den Code mit einbringen.
Gruß
Tobias