#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>

volatile float ADC_reading[5] = {0,0,0,0,0};

void initADC(void)
{
    ADMUX = 1 << REFS0 | 0 << REFS1; //Select external Vref
    ADCSRA = _BV(ADEN) | _BV(ADIE); // enable adc, enable interrupt
    ADCSRA |= 1 << ADPS2 | 1 << ADPS1 | 1 << ADPS0; // set clock-prescaler to 128
    ADCSRA |= 1 << ADSC; // start conversion
}

void adc_set_channel(uint8_t ch){
    ADMUX = (ADMUX & 0xE0) | (ch & 0x1F);
}

ISR(ADC_vect)
{
    static uint8_t ch = 0;
    //Reading 10bit conversion result
    uint16_t tmp = ADCL;       //copy the first LSB bits
    tmp |= ADCH << 8; //copy remaing byte

    ADC_reading[ch] = (((float)tmp * 0.3));
    //ADC_reading[ch] = (((float)tmp * 0.03)/0.092)-2.3;

    ch = (ch + 1)%5;
    adc_set_channel(ch);

    ADCSRA |= (1 << ADSC); //Start next conversion
}
