#include <SoftwareSerial.h>
SoftwareSerial Serial(PB0, PB1);
bool volatile adc_done=0;
int volatile adc_Reading = 0;
void adc_setup(){
ADCSRA |= bit(ADEN); // Enable the ADC but does not start it.
ADCSRA |= bit (ADPS0); // ADC clock prescalar = 2
ADMUX = 0; // reset ADMUX, it will sample ADC0 (PB5) by default with VCC as voltage reference..
ADMUX |= bit (MUX1); // Sample PB4
ADCSRA |= bit(ADIE); // Enable ADC interrupt on completion. This requires global interrupt enable (I-bit in SREG, i.e., sei())
// Optional Enable Auto Trigger Enable. This will automatically start an ADC conversion at every trigger event.
ADCSRA |= bit(ADATE);
ADCSRB = 0; // Initialise ADCSR. Default trigger is Free Running mode.
}
void adc_start(){
ADCSRA |= bit(ADSC); // Starts the conversion.
}
void setup(){
Serial.begin(9600); // Must be 9600
adc_setup();
adc_start();
}
ISR (ADC_vect)
{
// Handle ADC interrupt
adc_Reading = ADC;
adc_done = 1;
} // end of ADC_vect
void loop() {
if (adc_done){
Serial.print("ADC reading on PB4 is: ");
Serial.println(adc_Reading);
adc_done = 0;
}
}