So, ich habe inzwischen für alles, was ich für mein Gerät zur Spannungsüberwachung für wichtig erachte, eine gute Lösung gefunden. Das hier ist das derzeitige Programm nur zur Kommunikation mit dem Display. Als nächstes werde ich das Programm in das Spannuns - Überwachungs - Programm einbauen. Und die Kontrolle für das Oled - Display, den Umschalter zur Einstellung der Messschwelle, sowie die beiden Taster, "FRAM Löschen" & "Daten zum PC übertragen" aus dem Programm entfernen.
Code: Alles auswählen
#include <Wire.h>
#include <HardwareSerial.h>
HardwareSerial Nextion(2);
byte NexT[3] = { 255, 255, 255 }; // global deklarieren
const byte bufferSize = 64;
int Abfragezaehler = 0;
byte PW = 0;
byte PC = 0;
byte ME = 0;
byte MeIO = 0;
/*
Wird dann so benutzt:
Serial2.write(NexT, 3);
*/
byte Seite = 0; // Nextion Startseite einstellen
float Messung = 35.44;
float ads_mv0 = 30.33;
unsigned long startzeit = 0;
unsigned long endzeit = 0;
//######################################################################################
//#################################### SETUP ###########################################
//######################################################################################
//
void setup() {
Serial.begin(115200);
Nextion.begin(9600, SERIAL_8N1, 16, 17);
}
//######################################################################################
//#################################### LOOP ############################################
//######################################################################################
//
void loop() {
startzeit = millis();
ESPzuNEXT();
NEXTzuESP();
endzeit = millis();
//Serial.println(endzeit - startzeit);
}
//######################################################################################
//########################## Kommunikation mit dem Nextion #############################
//######################################################################################
//
void ESPzuNEXT() {
Nextion.print("dim=50"); // Display wird etwas gedimmt
Nextion.write(NexT, 3);
//Nextion.print("DatenzumPC.Textfeld1.txt=\"Ein Test\"");
//Nextion.write(NexT, 3);
Nextion.printf("Startseite.Volt1.txt=\"%5.3f\"", Messung);
Nextion.write(NexT, 3);
Nextion.printf("Startseite.Volt2.txt=\"%5.3f\"", ads_mv0);
Nextion.write(NexT, 3);
//Nextion.printf("PasswortAW.t0.txt=\"\""); // Passwort löschen
//Nextion.write(NexT, 3);
//Nextion.print("page 0"); // Display auf Seite 0 umschalten
//Nextion.write(NexT, 3);
/*
Nextion.print("cirs 400,373,20,RED"); // z.B. RED, GREEN, YELLOW, BLUE, GRAY, = 50712
Nextion.write(NexT, 3);
delay(1000);
Nextion.print("cirs 400,373,20,YELLOW"); // RED, GREEN, YELLOW, BLUE, GRAY, = 50712
Nextion.write(NexT, 3);
delay(1000);
Nextion.print("cirs 400,373,20,GREEN"); // RED, GREEN, YELLOW, BLUE, GRAY, = 50712
Nextion.write(NexT, 3);
delay(1000);
Nextion.print("cirs 400,373,20,50712"); // RED, GREEN, YELLOW, BLUE, GRAY, = 50712
Nextion.write(NexT, 3);
delay(1000);
*/
}
//######################################################################################
//########################### Rückmeldung vom Nextion auswerten ########################
//######################################################################################
//
void NEXTzuESP() {
static uint8_t bIndex;
static uint8_t buffer[bufferSize];
if (Nextion.available()) {
if (Abfragezaehler == 0) {
delay(300);
}
uint8_t inChar = Nextion.read();
buffer[bIndex++] = inChar;
if ((buffer[0] == 101) || (buffer[0] == 80) || (buffer[0] == 35)) {
Abfragezaehler = 0;
}
Serial.print(Abfragezaehler);
Serial.print(" Buffer = ");
Serial.println(buffer[0]);
//----------------------------------- Menüseite wurde aufgerufen -------------
if ((Abfragezaehler == 0) && (buffer[0] == 35)) { // page 0 Start
Serial.println(F("Seite Null wurde aufgerufen"));
if (MeIO == 1) {
Nextion.print("Startseite.MessungStart.txt=\"Messungen Stopp\"");
Nextion.write(NexT, 3);
}
}
// -----------------------------FRAM löschen Taste + PW Abfrage --------------
if ((Abfragezaehler == 0) && (buffer[0] == 80)) { // P? für Passwort
PW = PW + 1;
}
if ((Abfragezaehler == 1) && (buffer[0] == 51)) { // 3?
PW = PW + 1;
}
if ((Abfragezaehler == 2) && (buffer[0] == 54)) { // 6?
PW = PW + 1;
}
if ((Abfragezaehler == 3) && (buffer[0] == 57)) { // 9?
PW = PW + 1;
}
if ((Abfragezaehler == 4) && (buffer[0] == 57)) { // 9?
PW = PW + 1;
}
if ((Abfragezaehler == 4) && (PW == 5)) {
Serial.println("Passwort ist korrekt");
Nextion.printf("PasswortAW.t0.txt=\"\""); // Passwort löschen
Nextion.write(NexT, 3);
Nextion.print("page 0");
Nextion.write(NexT, 3);
Nextion.print("Startseite.Meldungen.txt=\"FRAM wird geloescht !!\"");
Nextion.write(NexT, 3);
PW = 0;
}
if ((Abfragezaehler == 4) && (PW < 5)) { // Ist es nicht die FRAM - löschne Taste
PW = 0;
}
//----------------------------------------------------------------------------
// --------------------------------------- Daten zum PC Abfrage --------------
if ((Abfragezaehler == 0) && (buffer[0] == 101)) { // Tasten Event ?
PC = PC + 1;
}
if ((Abfragezaehler == 2) && (buffer[0] == 3)) { // Daten zum PC ?
PC = PC + 1;
}
if ((Abfragezaehler == 7) && (buffer[0] == 50)) { // Taste 2 ?
PC = PC + 1;
}
if ((Abfragezaehler == 7) && (PC < 3)) { // Ist es nicht die Daten zum PC Taste
PC = 0;
}
if ((Abfragezaehler == 7) && (PC == 3)) {
PC = 0;
Serial.println("Daten zum PC übertragen");
Nextion.print("page 0");
Nextion.write(NexT, 3);
Nextion.print("Startseite.Meldungen.txt=\"Daten werden zum PC uebertragen\"");
Nextion.write(NexT, 3);
}
//----------------------------------------------------------------------------
// ----------------------------------------- Messungen Starten Abfrage -------
if ((Abfragezaehler == 0) && (buffer[0] == 101)) { // Tasten Event ?
ME = ME + 1;
}
if ((Abfragezaehler == 2) && (buffer[0] == 2)) { // Taste Messungen IO ?
ME = ME + 1;
}
if ((Abfragezaehler == 7) && (buffer[0] == 49)) { // Taste 1 ?
ME = ME + 1;
}
if ((Abfragezaehler == 7) && (ME < 3)) { // ist es nicht die ME - Taste
ME = 0;
}
if ((Abfragezaehler == 7) && (ME == 3) && (MeIO == 0)) {
ME = 0;
Serial.println("Messungen Starten");
Nextion.print("page 0");
Nextion.write(NexT, 3);
Nextion.print("Startseite.Meldungen.txt=\"Messungen wurden gestartet\"");
Nextion.write(NexT, 3);
Nextion.print("Startseite.MessungStart.txt=\"Messungen Stopp\"");
Nextion.write(NexT, 3);
MeIO = 1;
}
if ((Abfragezaehler == 7) && (ME == 3) && (MeIO == 1)) {
ME = 0;
Serial.println("Messungen Stoppen");
Nextion.print("page 0");
Nextion.write(NexT, 3);
Nextion.print("Startseite.Meldungen.txt=\"Messungen wurden gestoppt\"");
Nextion.write(NexT, 3);
Nextion.print("Startseite.MessungStart.txt=\"Messungen Start\"");
Nextion.write(NexT, 3);
MeIO = 0;
}
}
//----------------------------------------------------------------------------
Abfragezaehler++;
bIndex = 0;
}
Ich gehe später noch auf die verschiedenen Befehle an das Display und die verschiednen Abfragen der Infos vom Display zu meiner CPU ein.
Das Nextion.HMI File ist hier auch noch zum Download angehängt. Das spielt mit dem Programm hier zusammen. Das ist für ein 7" Display angelegt