ich habe mir jetzt mal den sketch + dazugehöriges Youtube Video angesehen und alles wieder nach meinem Verständnis kommentiert.
Das was ich nicht verstehe habe ich versucht in den Kommentaren so gut es geht zu kennzeichnen.
Könnt ihr mich aufklären?
#include <SoftwareSerial.h> //serielle Schnittstelle kann an fast jedem pin verwendet werden
String endChar = String(char(0xff)) + String(char(0xff)) + String(char(0xff));
String ReceivedData = ""; // string zum empfangen der daten
SoftwareSerial nextion(12, 13); // legt die seriellen pins am Arduino fest(RX, TX)
int Data0;
int Data1;
union { // wird benötigt um die Daten umzuwandeln
char charByte[8]; // **er sagt das das charByte 8 Bit groß ist?**
long valLong; // **deklariert valLong als long variable?**
} value;
void setup() {
Serial.begin(9600); // öffnet serielle schnittstelle für seriellen Monitor (Bautrate)
nextion.begin(9600); // öffnet serielle schnittstelle für Nextion Display (Bautrate)
}
void loop() {
if (nextion.available()) { // Abfrage ob Display verfügbar ist
ReceivedData += char(nextion.read()); // wenn ja dann lies es und speichere die daten als char in ReceivedData
if (ReceivedData.length() > 8) ReceivedData = ""; // wenn der inhalt von ReceivedData größer 8 ist dann lösche("") die daten aus ReceivedData
}
if (ReceivedData.length() == 8) { // wenn ide empfangenen daten 8 Stellen lang sind dann *1
//Serial.println(ReceivedData); //
value.charByte[0] = char(ReceivedData[0]); // *1 wandelt die daten um **?? aber von was in was ??**
value.charByte[1] = char(ReceivedData[1]); // *1
value.charByte[2] = char(ReceivedData[2]); // *1
value.charByte[3] = char(ReceivedData[3]); // *1
Data0 = value.valLong; // *1 speichre die oberen 4 **??Bit??** der reine nach (0123) in data0
value.charByte[0] = char(ReceivedData[4]); // *1
value.charByte[1] = char(ReceivedData[5]); // *1
value.charByte[2] = char(ReceivedData[6]); // *1
value.charByte[3] = char(ReceivedData[7]); // *1
Data1 = value.valLong; // *1 speichre die oberen 4 **??Bit??** der reine nach (0123) in data1
Serial.println(Data0); // schreibe die Daten von data0 in den seriellen Monitor mit Zeilenumbruch
Serial.println(Data1); // schreibe die Daten von data1 in den seriellen Monitor mit Zeilenumbruch
ReceivedData = ""; // lösche("") die empfangenen Daten wieder **?? wenn er hier die Daten löscht) wie kann er sie dann noch übertragen??**
nextion.print("n2.val="); // übertrage die Daten an n2 (n2 ich ein Zahlenfeld auf dem Display)
nextion.print(Data0); // **hier weis ich nicht was passiert**
nextion.print(Data1); // **hier weis ich nicht was passiert**
nextion.write(0xFF); // **hier weis ich nicht genau was passiert er überschreibt Daten? aber welche**
nextion.write(0xFF); // **hier weis ich nicht genau was passiert er überschreibt Daten? aber welche**
nextion.write(0xFF); // **hier weis ich nicht genau was passiert er überschreibt Daten? aber welche**
}
if (ReceivedData.endsWith(endChar)) { // Fehlerbehandlung wenn Daten nicht passen z.B. zu große länge oder ungültges Format
Serial.println(ReceivedData);
Serial.println("error");
ReceivedData = "";
}
}
Negative Intervalle machen keinen Sinn, also würde ich unsigned für wichtiger halten.
unsigned int reicht gerade so 1 Minute, Diese Grenze ist für einen Dht_auslesen-Parameter etwas knapp.
Hallo,
ich kenne mich mit dem Nexton Display nicht aus, insofern sollte ich meine Klappe halten aber mit diesen Zeilen willst Du die eingegeben Zeichen zurück schreiben um sie irgendwo am Nexton anzeigen zu können. Normal läuft das ja sicher mit tags im Nexton ab. und vermutlich ist n2.val der Tag Name für die Stelle an der der aktuelle Messzyklus angezeigt werden soll. @HotSystems hats schon geschrieben Lese die Doku von dem Nexton. YouToube ist Quatsch.
Frage in die Runde. Bietet die Nexton lib eine Methode um eine gemachte Eingabe in eine numerische Variable zu legen ?
Wenn nicht könnte man die vom Nexton empfangenen Zeichen in einer C Zeichenkette ablegen , das ist ja im Wesentlichen das Array in der Struct. Dann eine 0 mit dran und den mit atoi wandeln und in value.valLong ablegen.
nextion.print(Data0); // **hier weis ich nicht was passiert**
nextion.print(Data1);
ich habe 2 Tastenfelder auf dem Dislpay auf denen ich die Zahlen eingeben kann. Diese eigegeben Zahlen werden dann auch auf den Feldern angezeigt. Das wird das sicher ein.
nextion.print("n2.val=");
n2 Ist ein Zahlenfeld auf dem Nextion dort werden die Zahlen die eingetippt habe auch angezeigt. Das könnte es sein.
nextion.write(0xFF); // **hier weis ich nicht genau was passiert er überschreibt Daten? aber welche**
nextion.write(0xFF); // **hier weis ich nicht genau was passiert er überschreibt Daten? aber welche**
nextion.write(0xFF);
Ich bilde mir ein mal was gelesen zu haben das diese Zeiten dafür da sind alles wieder zu bereinigen.
es gibt ja auch eine Nextion libeary aber soll extrem umständlich sein.
wenn ich den Wert im Code ändere dann Verschiebt sich auch der Balken.
Doch sobald ich bei nextion.print("temp.val=50"); anstatt der 50 das t (für ausgelesene Temperatur) eingebe reagiert der Balken nicht. Hat jemand eine Ahnung warum das so ist?
#include "DHT.h" // fügt DHT Bibliothek ein
#define DHTPIN 2 // PIN2 am Arduino ist der Datenpin am DHT11
#include <SoftwareSerial.h> // Serielle Schnittstelle (RX/TX) kann selbst gewählt weerden
#define DHTTYPE DHT11 // legt fest welcher DHT Sensor angeschlossen ist
unsigned long altmillis_Dht, neumillis_Dht, intervall_Dht = 2000; // sagt das altmillis_Dht, neumillis_Dht, intervall_Dht in einem Bereich zwischen 0 und 4,294,967,295 liegen kann !! intervall_Dht habt aber den festen wert 2000
DHT dht(DHTPIN, DHTTYPE); // DHT wird in Code jetzt mit dht und weist die vorher definierten Parameter fest
SoftwareSerial nextion(12, 13); // sagt das der Dislpay am Seriellen Port RxPin_12 und TxPin_13 hängt
void setup() { // alles bis (*1) läuft nur beim ersten Start EINMMALIG durch
Serial.begin(9600); // legt die Bautrate fest (muss gleich zum Seriellen Monitor sein)
nextion.begin(9600); // Serielle Schnittstelle vom Display
Serial.println("DHT11 Testprogramm\n"); // gibt den Text DHT11 Testprogramm aus
dht.begin(); // startet den dht11 Sensor
altmillis_Dht = 0; // altmillis_Dht wird auf den Wert 0 gesetzt
} //(*1)
void loop() { // Dieser Loop soll nur in weitere Loops weiterleiten
Dht_auslesen(intervall_Dht); // springt zum loop Dht_auslesen (ein Wert der der in (*4) geschrieben wird)
} // ende des "weiterleiten" loop
void Dht_auslesen(int intervall) { //loop Dht_auslesen ( (*4))
neumillis_Dht = millis(); // Beispiel loop_1: neumills_Dht = 4000 | Beispiel loop_2 (es sind 10 Sekunden vergangen): neumills_Dht = 14000
if ( (neumillis_Dht - altmillis_Dht) >= intervall) { // wenn 4000 - 0 größer oder glech 2000 | wenn 14000 - 4000(=6000) größer oder glech 2000
altmillis_Dht = neumillis_Dht; // dann setze 0 auf 4000 | dann setze 4000 auf 14000
// und führe den den code bis (*2) aus | und führe den den code bis (*2) aus
float h = dht.readHumidity(); //Dht11 liest Luftfeuchtigkeitswert(h)
int t = dht.readTemperature(); //Dht11 liest Temperaturwert(t)
if (isnan(h) || isnan(t)) { //(*3)wenn (h) und/oder (t) nicht gelesen werden können (z.b. kaben an PIN2 ab)
Serial.println("Fehler beim auslesen des Sensors!"); //dann schreibe "Fehler beim auslesen des Sensors!"
return; // und springe zm Anfang(*3) ansonsten einfach weiter
}
Serial.print("Luftfeuchtigkeit: ");
Serial.print(h); // Ausgeben der Luftfeuchtigkeit
Serial.print("%\n"); // Neue Zeile(\n) im Seriellen Monitor
Serial.print("Temperatur: ");
Serial.print(t); // Ausgeben der Temperatur
Serial.print("°"); // Schreiben das ° Zeichen
Serial.print("C\n\n"); // lässt eine Zeile Platz
nextion.print("temp.val=50");
nextion.write(0xff);
nextion.write(0xff);
nextion.write(0xff);
} //*2
}