Hallo zusammen ich habe Folgendes Problem:
Ich habe habe in loop eine einen Kleinen Jobverteiler, des nach unterschielichen Zeiten diverse Funktionen aufrufen soll.
void loop() {
now = millis();
/*Aufgaben die im Normalen Zyklus abgearbeitet werden*/
if (now > lastNormalCycle + (Zyklus1 * 1000)) {
lastNormalCycle = now;
printBME280Data(&Serial);
Serial.println("Zylus Datenlesen");
Zyklus1 = NormalZyklus;
}
/*Zyklus in dem die Temperaturanzeige aktuallisiert wird*/
if (now > lastAnzeigeCycle + (Zyklus2 * 1000)) {
lastAnzeigeCycle = now;
DatenAnzeigen();
Serial.println("Zylus Datenanzeige");
Zyklus2 = AnzeigeZyklus;
}
/*Zyklus in dem das Array für den Graphen aktualisiert wird*/
if (now > lastArrayCycle + (5 * 1000)) {
lastArrayCycle = now;
//WriteArray();
Serial.println("Zylus Array");
Zyklus3 = ArrayZyklus;
}
}
Das Funktioniert auch Wunderbar wie man an der Seriellen Ausgabe sieht:
21:50:18.486 -> Zylus Datenlesen
21:50:18.486 -> Zylus Datenanzeige
21:50:18.738 -> Zylus Array
21:50:20.473 -> Temp: 19.40°C Humidity: 58.43% RH Pressure: 996.25hPa
21:50:20.473 -> Zylus Datenlesen
21:50:22.477 -> Temp: 19.40°C Humidity: 58.44% RH Pressure: 996.23hPa
21:50:22.477 -> Zylus Datenlesen
21:50:23.749 -> Zylus Array
21:50:24.483 -> Temp: 19.41°C Humidity: 58.43% RH Pressure: 996.27hPa
21:50:24.483 -> Zylus Datenlesen
21:50:26.494 -> Temp: 19.41°C Humidity: 58.43% RH Pressure: 996.21hPa
21:50:26.494 -> Zylus Datenlesen
21:50:28.513 -> Temp: 19.40°C Humidity: 58.42% RH Pressure: 996.26hPa
21:50:28.513 -> Zylus Datenlesen
21:50:28.746 -> Zylus Array
21:50:30.480 -> Temp: 19.41°C Humidity: 58.43% RH Pressure: 996.21hPa
21:50:30.480 -> Zylus Datenlesen
21:50:32.512 -> Temp: 19.41°C Humidity: 58.43% RH Pressure: 996.25hPa
21:50:32.512 -> Zylus Datenlesen
21:50:33.725 -> Zylus Array
21:50:34.497 -> Temp: 19.41°C Humidity: 58.41% RH Pressure: 996.19hPa
21:50:34.497 -> Zylus Datenlesen
21:50:36.521 -> Temp: 19.41°C Humidity: 58.38% RH Pressure: 996.17hPa
21:50:36.521 -> Zylus Datenlesen
21:50:38.497 -> Zylus Datenanzeige
Wenn ich jetzt die Funktion WriteArray() mit dazu neheme, dann wird diese Ständig ausgeführt ohne auf das Ablaufen der zeit zu warten.
void WriteArray() {
Serial.println ("Array FiFo für Graph wird geschrieben");
Serial.print ("Startzeit: ");
Serial.println (millis());
for (int i = 240; i >= 1; i--) {
tempArray[i] = tempArray[i - 1];
Serial.print (i);
Serial.print ( "-" );
Serial.println ( tempArray[i]);
}
tempArray[0] = temp;
Serial.print ("Aktuelle Temp für Array: ");
Serial.println (tempArray[0]);
Serial.print ("Endzeit: ");
Serial.println (millis());
delay(200);
}
Hier das ergebniss der Seriellen ausgabe, es ist lediglich die Funktion WriteArray einkomentiert.
21:53:11.832 -> Zylus Datenlesen
21:53:11.832 -> Zylus Datenanzeige
21:53:12.092 -> Array FiFo für Graph wird geschrieben
21:53:12.092 -> Startzeit: 5001
21:53:12.092 -> 240-0.00
...
21:53:12.284 -> 2-0.00
21:53:12.284 -> 1-0.00
21:53:12.284 -> Aktuelle Temp für Array: 19.44
21:53:12.284 -> Endzeit: 5197
21:53:12.509 -> Zylus Array
21:53:12.509 -> Array FiFo für Graph wird geschrieben
21:53:12.509 -> Startzeit: 5397
21:53:12.509 -> 240-0.00
...
21:53:12.697 -> 2-0.00
21:53:12.697 -> 1-19.44
21:53:12.697 -> Aktuelle Temp für Array: 19.44
21:53:12.697 -> Endzeit: 5595
21:53:12.877 -> Zylus Array
21:53:12.877 -> Array FiFo für Graph wird geschrieben
21:53:12.877 -> Startzeit: 5795
21:53:12.877 -> 240-0.00
...
21:53:13.121 -> 2-19.44
21:53:13.121 -> 1-19.44
21:53:13.121 -> Aktuelle Temp für Array: 19.44
21:53:13.121 -> Endzeit: 5993
21:53:13.306 -> Zylus Array
21:53:13.306 -> Array FiFo für Graph wird geschrieben
21:53:13.306 -> Startzeit: 6193
21:53:13.306 -> 240-0.00
....
21:53:13.494 -> 2-19.44
21:53:13.494 -> 1-19.44
21:53:13.494 -> Aktuelle Temp für Array: 19.44
21:53:13.494 -> Endzeit: 6391
21:53:13.703 -> Zylus Array
21:53:13.703 -> Array FiFo für Graph wird geschrieben
21:53:13.703 -> Startzeit: 6591
21:53:13.703 -> 240-0.00
....
21:53:13.893 -> 2-19.44
21:53:13.893 -> 1-19.44
21:53:13.893 -> Aktuelle Temp für Array: 19.44
21:53:13.893 -> Endzeit: 6789
21:53:14.109 -> Zylus Array
21:53:14.109 -> Temp: 19.43°C Humidity: 58.44% RH Pressure: 996.20hPa
21:53:14.109 -> Zylus Datenlesen
21:53:14.109 -> Array FiFo für Graph wird geschrieben
21:53:14.109 -> Startzeit: 6991
21:53:14.109 -> 240-0.00
....
21:53:14.296 -> 2-19.44
21:53:14.296 -> 1-19.44
21:53:14.296 -> Aktuelle Temp für Array: 19.43
21:53:14.296 -> Endzeit: 7195
21:53:14.471 -> Zylus Array
21:53:14.471 -> Array FiFo für Graph wird geschrieben
21:53:14.520 -> Startzeit: 7395
21:53:14.520 -> 240-0.00
....
21:53:14.712 -> 2-19.44
21:53:14.712 -> 1-19.43
21:53:14.712 -> Aktuelle Temp für Array: 19.43
21:53:14.712 -> Endzeit: 7593
21:53:14.879 -> Zylus Array
21:53:14.879 -> Array FiFo für Graph wird geschrieben
21:53:14.879 -> Startzeit: 7793
21:53:14.879 -> 240-0.00
21:53:15.071 -> 2-19.43
21:53:15.111 -> 1-19.43
21:53:15.111 -> Aktuelle Temp für Array: 19.43
21:53:15.111 -> Endzeit: 7991
21:53:15.291 -> Zylus Array
21:53:15.291 -> Array FiFo für Graph wird geschrieben
21:53:15.291 -> Startzeit: 8191
21:53:15.291 -> 240-0.00
....
21:53:15.492 -> 2-19.43
21:53:15.492 -> 1-19.43
21:53:15.492 -> Aktuelle Temp für Array: 19.43
21:53:15.492 -> Endzeit: 8389
21:53:15.664 -> Zylus Array
21:53:15.698 -> Array FiFo für Graph wird geschrieben
21:53:15.698 -> Startzeit: 8590
Dabei ist die Funktion WriteArray() eigentlich nur eine Forschleife die einen Ringpuffer beschreibt.
Woran kann das denn liegen?