Puoi filtrarlo digitalmente usando un filtro passa basso:
int valueFilt = (1-0.99)*value + 0.99*valueFilt;
Cambiare lo 0.99 per cambiare la frequenza di taglio (più vicino a 1.0 è la frequenza più bassa). L'espressione effettiva per quel valore è exp (-2 * pi * f / fs) dove f è la frequenza di taglio desiderata e fs è la frequenza con cui vengono campionati i dati.
Un altro tipo di "filtro digitale" è un filtro eventi. Funziona bene su dati che hanno valori anomali; ad es. 9,9,8,10,9,25,9. Un filtro eventi restituisce il valore più frequente. Statisticamente questa è la modalità.
Medie statistiche come Media, Modalità ecc. Possono essere calcolate utilizzando la Libreria media di Arduino .
Un esempio tratto dalla pagina della Libreria Arduino riferito a:
#include <Average.h>
#define CNT 600
int d[CNT];
void setup()
{
Serial.begin(9600);
}
void loop()
{
int i;
for(i=0; i<CNT; i++)
{
d[i] = random(500);
}
Serial.print("Mean: ");
Serial.print(mean(d,CNT),DEC);
Serial.print(" Mode: ");
Serial.print(mode(d,CNT),DEC);
Serial.print(" Max: ");
Serial.print(maximum(d,CNT),DEC);
Serial.print(" Min: ");
Serial.print(minimum(d,CNT),DEC);
Serial.print(" Standard deviation: ");
Serial.print(stddev(d,CNT),4);
Serial.println("");
Serial.println("");
delay(5000);
}