Você pode filtrar isso digitalmente usando um filtro passa-baixo:
int valueFilt = (1-0.99)*value + 0.99*valueFilt;
Altere 0,99 para alterar a frequência de corte (mais próximo de 1,0 é a frequência mais baixa). A expressão real para esse valor é exp (-2 * pi * f / fs), em que f é a frequência de corte desejada e fs é a frequência em que os dados são amostrados.
Outro tipo de "filtro digital" é um filtro de eventos. Funciona bem em dados com outliers; por exemplo 9,9,8,10,9,25,9. Um filtro de eventos retorna o valor mais frequente. Estatisticamente, este é o modo.
As médias estatísticas, como Média, Modo etc. podem ser calculadas usando a Biblioteca Média do Arduino .
Um exemplo retirado da página da Biblioteca do Arduino se refere 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);
}