//// ОПРЕДЕЛЕНИЕ СКОЛЬЗЯЩЕГО СРЕДНЕГО
// В кольцевом массиве содержаться отдельные значения
int Array[ARRAY_SIZE];
// Индекс элемента массива, в котор будет записано очередное значение
signed char index;
// Значение суммы отдельных значений,
// Правильное значение бывает только
// после суммирования ARRAY_SIZE значений
int summ;
// Скользящее значение суммы ARRAY_SIZE отдельных значений,
// всегда правильное значение
int skolz_summ;
// Скользящее среднее ARRAY_SIZE отдельных значений, всегда правильное значение
int skolz_sred;
void calc_skolz_sred (void)
{
int tmp;
tmp = read_adc(ADC_IN);
summ += tmp; // вычисляем временную сумму
// К правильному значению суммы последних
// ARRAY_SIZE отдельных значений
// прибавляем самое свежее и вычитаем самое старое
skolz_summ += tmp - Array[index];
// заменяем самое старое значение самым свежим
Array[index] = tmp;
// вычисляем скользящее среднее
skolz_sred = skolz_summ / ARRAY_SIZE;
// находим очередное значение индекса
if (--index < 0) {
index = ARRAY_SIZE - 1; // Закольцовываем
skolz_summ = summ; // Юстируем скольз сумму
summ = 0;
}
}