Hey Leute,
es geht um folgendes, da beim Nextion Display die Waveform Komponente jedes mal wieder zurück gesetzt wird und da man dies wohl nicht umgehen kann laut Recherche, bin ich auf eine Idee gekommen wie man das eventuell umgehen könnte.
Folgendes im Bild seht Ihr die Waveform Komponente, diese soll die Feuchtigkeit im Verlauf von 1 Woche darstellen. Sie ist 240px lang und zeigt 7 Tage an wobei für 1 Tag 40px stehen also 40 Messpunkte ( alle 36min), so kommt man auf insg. 240 Messpunkte. ( ist von der Größe der Waveform her so)
[url=http://[!(https://s17.directupload.net/images/190919/mtrmtbo9.jpg)](https://www.directupload.net)]
Ich hatte es erst zum laufen bis ich merkte das nach dem Seitenwechsel er von vorne Anfängt, nach wie gesagt stundenlanger Suche dann ohh kann man so nicht ändern, na toll, damit wolle ich mich aber nicht Zufrieden geben.
Nun kommt meine Idee ins spiel die bisher aber nur so Semi Gut klappt:
Angedacht war es die Daten vom Sensor in ein Array zu schreiben, das wenn man die Seite mit der Waveform aufruft, er diese wieder herstellt. Was auch klappt. aber er überträgt die nicht Belegten Plätze im Array auch mit also die Nullen welche dann natürlich in der Waveform auch geschrieben werden.
Gibt es eine Möglichkeit es so zu machen das man das Array überpüft, die Werte bis zur 1. Null dann verschickt bis wieder ein neuer Wert hinzu gekommen ist ?
Ich häng mal meinen Test Code an bisher, hab jetzt natürlich die Zeit auf 100ms zum testen in diesem Skript also nicht wundern:
int Messwerte[240];
byte Zeiger = 0;
unsigned long startZeit; // Startzeit des Millis Timers
const int CP1 = A0; // Capacitiver Sensor 1
int CP1SW = 0; // Reiner Sensor Wert (0-1023)
int CP1AW; // Sensor Wert der Benutzt oder Ignoriert werden kann
int CP1PW; // Prozent Wert basieren auf dem Sensor Wert (0-1023 / 0-100%)
int DiagrammVoll = 0;
int Messung = 100;
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
pinMode(CP1, INPUT);
}
void loop() {
// Sensor 1--------------------------------------------------------------------------------------------------------------
CP1AW = analogRead(CP1);
if (abs(CP1SW - CP1AW) > 10) { // Dies ist damit der Wert nicht ständig herum springt
CP1SW = CP1AW;
}
CP1PW = map(CP1SW, 1023, 0, 100, 0);
Serial1.print("n2.val=");
Serial1.print(CP1PW);
Serial1.write(0xff);
Serial1.write(0xff);
Serial1.write(0xff);
// Daten ins Array Speichern-----------------------------------------------------------------------------------------------
if (millis() - startZeit >= Messung) {
startZeit = millis();
Messwerte[Zeiger] = CP1PW;
Zeiger++;
if (Zeiger >= 240) Zeiger = 0;
}
// Array Daten nacheinander Übertragen------------------------------------------------------------------------------------
for (int i = 0; i<240;) {
Serial.println(Messwerte[i]);
String Tosend = "add ";
Tosend += 4;
Tosend += ",";
Tosend += 0;
Tosend += ",";
Tosend += Messwerte[i];
Serial1.print(Tosend);
Serial1.write(0xff);
Serial1.write(0xff);
Serial1.write(0xff);
i++;
}
}
EDIT: Falls es wichtig ist oder interessiert, das war der Code mit dem es Top lief aber halt nach Seitenwechsel fängt er immer von vorne an:
unsigned long startZeit; // Startzeit des Millis Timers
const int CP1 = A0; // Capacitiver Sensor 1
int CP1SW = 0; // Reiner Sensor Wert (0-1023)
int CP1AW; // Sensor Wert der Benutzt oder Ignoriert werden kann
int CP1PW; // Prozent Wert basieren auf dem Sensor Wert (0-1023 / 0-100%)
int DiagrammVoll = 0;
int Messung = 100;
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
pinMode(CP1, INPUT);
}
void loop() {
// Sensor 1--------------------------------------------------------------------------------------------------------------
CP1AW = analogRead(CP1);
if (abs(CP1SW - CP1AW) > 10) { // Dies ist damit der Wert nicht ständig herum springt
CP1SW = CP1AW;
}
CP1PW = map(CP1SW, 1023, 0, 100, 0);
Serial1.print("n2.val=");
Serial1.print(CP1PW);
Serial1.write(0xff);
Serial1.write(0xff);
Serial1.write(0xff);
// Daten an Diagramm Senden-----------------------------------------------------------------------------------------------
if (millis() - startZeit >= Messung) {
startZeit = millis();
String Tosend = "add ";
Tosend += 4;
Tosend += ",";
Tosend += 0;
Tosend += ",";
Tosend += CP1PW;
Serial1.print(Tosend);
Serial1.write(0xff);
Serial1.write(0xff);
Serial1.write(0xff);
DiagrammVoll++;
Serial.print(DiagrammVoll);
}
if (DiagrammVoll == 240) {
String Toclear = "cle ";
Toclear += 4;
Toclear += ",";
Toclear += 255;
Toclear += "";
Serial1.print(Toclear);
Serial.print(Toclear);
Serial1.write(0xff);
Serial1.write(0xff);
Serial1.write(0xff);
DiagrammVoll = 0;
}
}
MFG Stefan