No dobra, czas napisać, jak to zrobić prosto i efektywnie:
Używamy jednego przerwania - timera, zgłaszanego kilkadziesiąt..kilkaset razy na sekundę (w typ przypadku, o ile nie ma multipleksowania LED, może być np. 100 Hz). żadna pętla główna nie jest do niczego potrzebna. W procedurze obsługi przerwania odczytujemy wynik ADC, "robimy filtr dolnoprzepustowy", wyświetlamy wynik i startujemy następną konwersję ADC.
Z wynikiem ADC robimy coś takiego:
suma = suma - (suma >> FS) + ADC;
Gdzie FS jest niewielką liczbą całkowitą - 3..6.
Bieżący, uśredniony wynik ADC uzsykujemy jako:
suma >> FS,
przy czym najczęściej nie ma potrzeby wykonywania rtakiej operacji, bo możny ją wpleść w przeliczenie wartości odczytanej z ADC na wartość napięcia mierzonego w mV.
Wszystko to da się policzyć bez zmiennego przecinka, a więc szybko i bez zajmowania pamięci na procedury obliczeń z biblioteki.