BVU сделал вполне уместное замечание. Надо увеличить интервал показаний между измерениями.
По поводу сглаживания показаний. В реализации проще будет БИХ фильтр первого порядка. АЧХ что у этого фильтра, что у сглаживания по 5ти отсчётам, с небольшой натяжкой, одинаковые.
Yn = Yn-1 + N*(Xn - Yn-1)где N положительное число, меньшее 1, определяющее частоту среза фильтра (степень сглаживания). Его лучше брать кратным степени 2, N=2^(-m), т.е. эту операцию можно реализовать в МК простым сдвигом
Код
////////////////////////////////////////////////////////////////////////
//
// Альфа фильтр
// БИХ фильтр первого порядка
//
void alfa(unsigned int *hXn, unsigned int *hYn, unsigned int *hYn1)
{
*hYn = (unsigned int)((signed int)*hYn1+(((signed int)*hXn-(signed int)*hYn1)>>1));
*hYn1 = *hYn;
}