#include #include #include 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 }