#include <avr/interrupt.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
volatile uint16_t adcValue;
volatile uint16_t previousAdcValue;
volatile bool changeFlag=true;
void setup() {
//start lcd
lcd.begin(16, 2);
// Initialize ADC
// Use AVcc as the reference
//and A0 pin as ADC input
ADMUX = 0b00000000;
// Enable ADC, Enable ADC Interrupt, and set prescaler to 128
ADCSRA = 0b11001111;
sei(); // Enable global interrupts
}
ISR(ADC_vect){
adcValue = ADC; // Read the ADC value
if(adcValue!=previousAdcValue)changeFlag=true;
previousAdcValue=adcValue;
}
int main() {
init();
setup();
while(true) {
// If conversion is done, process value
if(changeFlag) {
lcd.clear();
lcd.print((adcValue/1023.0)*5.0);
lcd.print("V");
changeFlag=false;
lcd.setCursor(0, 1);
}
// Re-enable conversion with interrupts
ADCSRA|=1<<ADSC;
}
}