
#define ADC_BUFFER_SIZE 8

static volatile unsigned char __adc_buffer[ADC_BUFFER_SIZE];
static volatile unsigned char __adc_buffer_ptr;
static volatile unsigned int  __adc_sum;

extern void InitAdcReader() {
    for ( __adc_buffer_ptr = 0;
          __adc_buffer_ptr < ADC_BUFFER_SIZE;
          __adc_buffer_ptr++ ) {
        __adc_buffer[__adc_buffer_ptr] = 0;
    }
    __adc_buffer_ptr = 0;
}

extern unsigned char  ReadAdc(unsigned char adc_value) {
    __adc_sum -= __adc_sum[__adc_buffer_ptr]; // Subtract the oldest value
    __adc_buffer[__adc_buffer_ptr] = adc_value; // Insert the newest value
    __adc_sum += __adc_buffer[__adc_buffer_ptr]; // Add the newest value
    __adc_buffer_ptr++; // Advance the pointer
    if (__adc_buffer_ptr >= ADC_BUFFER_SIZE ) {
        __adc_buffer_ptr = 0;
    }

    adc_value = __adc_sum / ADC_BUFFER_SIZE; // Calculate the average

    return (adc_value);
}

