#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop() {
int ADC_low = ADC_change(A0, 0); // int ADC_low = analogRead(A0);
int ADC_low_map = ADC_low;
Serial.println(ADC_low);
ADC_low_map = map(ADC_low_map, 0, 1023, 0, 100);
lcd.home();
lcd.print("Raw: ");
lcd.print(ADC_low);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("%: ");
lcd.print(ADC_low_map);
lcd.print(" ");
}
uint16_t ADC_change(uint8_t pin, bool HIGH_LOW) {
//DIVISION FACTOR - 128
//TRIGGER - Free Runng Mode
//VOLTAGE REFERENCE - AREF, Internal Vref turned off
if (pin >= 14 && pin <= 19) {
pin -= 14;
}
uint16_t ADC_value = 0;
ADMUX &= ~(1 << REFS0);
ADMUX &= ~(1 << REFS1);
ADCSRA |= (1 << ADEN);
ADCSRA &= ~(1 << ADATE);
ADCSRA |= 0b00000111;
ADCSRA &= ~(1 << ADIE);
ADCSRA &= ~(1 << ADIF);
ADCSRB = 0b00000000;
ADMUX &= 0b11110000;
ADMUX += pin;
if (HIGH_LOW == 0) {
ADMUX &= ~(1 << ADLAR);
}
else {
ADMUX |= (1 << ADLAR);
}
ADCSRA |= (1 << ADSC);
while ((ADCSRA & (1 << ADIF)) == 0);
if (HIGH_LOW == 0) {
ADC_value = ADCL;
ADC_value |= ADCH << 8;
}
else {
ADC_value |= ADCH;
}
ADCSRA &= ~(1 << ADSC);
return ADC_value;
}