bei zehn Messwerten klingt mir das schwer nach rauschunterdrückung..
da würd ich immer tatsächlich zehn Ablesungen nehmen
(also das komplette array vollschreiben)
Aber nundenn, wenn Du immer nur einen Messwert aktualisieren möchtest
geht das natürlich auch;
da Du für den Mittelwert keinen UNterschied bei der Reihenfolge machen
musst am einfachsten in etwa so:
1 | int buffer[10]={0}; // das array, zunächst null gefüllt
|
2 | int arpt = 0; // array_pointer für später
|
3 | float mean =0; // der Mittelwert
|
4 |
|
5 | void readSensor()
|
6 | {
|
7 | // int value = analogRead(SensorPin);
|
8 | // oder wie auch immer Du den WErt liest
|
9 | buffer[arpt] = value;
|
10 | arpt = (arpt+1)%10 ; // zähle hoch von 0-9 und wiederhole; dies nur ein einzelschritt natürlich
|
11 | }
|
12 |
|
13 | void setup ()
|
14 | {
|
15 | // buffer schonmal mit werten füllen um ein Anfangsmittelwert zu haben
|
16 | for(int i=0, i<10; i++)
|
17 | readSensor();
|
18 | // und was auch immer Du sonst so brauchst
|
19 | }
|
20 |
|
21 | void loop()
|
22 | {
|
23 | // readSensor();
|
24 | // und wann immer Du den Mittelwert brauchst
|
25 | int sum;
|
26 | for(int i=0; i<10; i++)
|
27 | sum += buffer[i];
|
28 | mean = sum/10.0; // .0 zwingt den compiler die dezimalstelle zu beachten
|
29 | // was immer Du mit dem mittelwert tun möchtest
|
30 |
|
31 | // willst Du unbedingt "ersten" und "letzten" Wert gesondert behandeln
|
32 | // wird es nur minimal komplizierter:
|
33 | for (int i =0; i<10; i++)
|
34 | {
|
35 | if((arpt > 0 && i == arpt-1)|| (arpt==0 && i==9))
|
36 | {
|
37 | // der erste 'älteste' Wert
|
38 | sum += 5; // was auch immer
|
39 | }
|
40 | else if (arpt==i)
|
41 | {
|
42 | // der letzte 'neueste' Wert
|
43 | sum += 2* buffer[i]; // was auch immer
|
44 | }
|
45 | else
|
46 | {
|
47 | // alle Anderen Werte
|
48 | sum += bugger[i]; // was auch immer
|
49 | }
|
50 | // wie Du hier addierst ist Dir überlassen
|
51 | }
|
52 | // mean ist summe durch 10kommanull du weisst schon ;)
|
53 | }
|
So in etwa jdf.. hab's jetzt nur hingespuckt,
könnten also Tippfehler und sogar logikfehler drin sein
geht ja nur um's Prinzip, gell?
Achso, ich weiss jetzt nicht wie gross deine values sind, oder von
welchem Typ (ich gehe von 10bit integer aus.. dann ist alles gut)
solltest du floats brauchen, oder besonders grosse Werte addieren, musst
Du natürlich die Typen anpassen.
'sid