Wie kann man in C aus z.B. 20 vergangenen Messwerten einen Mittelwert errechnen?
Also die Messwerte sollen nirgendwo fest gespeichert werden sondern nur dazu benutzt werden einen Mittelwert zu bilden - bzw. um das Messergebnis zu glätten.
Der älteste Messwert soll dann praktisch bei der nächsten Messung raus fallen.
Es geht dabei um eine Helligkeitsmessung für eine Minisolaranlage. Die habe ich so programmiert, dass bei einer Unterschreitung einer Mindest-Helligkeit die Nachführung ausgesetzt wird und die Anlage in eine Neutralstellung fährt.
Jetzt möchte ich natürlich nicht, dass die Anlage in dem Moment wo der Schwellenwert erreicht wird, die Anlage hin und her tanzt.
Also habe ich mir gedacht, das ich den Messzeitraum auf 20 Minuten ausdehne und jede Minute einmal messe.
Nun bin ich aber im Abbilden von Algorithmen besser als im Programmieren und bräuchte für meinen Arduino mal ein Codeschnipsel mit dem ich die Messwerte effektiv durch den Stapel laufen lassen kann.
Hat jemand eine Idee oder Vorlage?
3 Antworten
Man nehme ein Array der Größe 20 und einen Positionszähler, den man modulo 20 erhöht und lege so die Meßwerte ab. Das arithmetische Mittel wird wie bekannt errechnet. Einziger Knackpunkt wird die für den Zweck geeignete Initialisierung des Arrays sein.
Mehr brauchts eigentlich nicht.
Ich habe inzwischen eine einfachere Lösung bekommen (siehe Antwort von Tanibi) das reicht an Genauigkeit für den Zweck.
Entweder 20 variablen anlegen und "füttern"... Oder ein Array mit 20 Werten anlagen und dieses füttern. Dabei kannst Du ja einen Zähler jede Minute mit zählen, der Dir den Speicherplatz im Array mit hoch zählt und die jeweils aktuelle Position überschreibt. Oder du kopierst immer das Array durch. Also Wert 2 auf 1, Wert 3 auf 2 und den letzten speichsert Du immer den neusten... Dann anschließend noch mal alle Werte addieren lassen und durch die Anzahl der Werte teilen... Pack das dann in ein Unterprogramm welches Du aufrufst, wenn Du es benötigst... Und schon ist alles schick..
Hallo.
Genauso wie du es von Hand machen würdest. Alle Werte zusammenaddieren und durch die Anzahl der Werte teilen.
LG