After several tries, i was successful with reading stable battery voltage using internal voltage reference of 1.1v, now the issue i face is that i cannot read stable sensor voltage, could you please let me know how can i read my sensor voltage? or do i need additional voltage divider (my sensor goes directly to A0 and GND pin).
void setup(){
Serial.begin(9600);
}
void loop() {
//REFS1 AND REFS0 to 1 1 -> internal 1.1V refference
ADMUX |= B11000000;
//We read A1 (MUX0) for battery voltage
ADMUX |= B00000001;
//We read A0 for sensor voltage
ADMUX |= B00000000; // for my sensor
// Start AD conversion
ADCSRA |= B11000000;
// Detect end-of-conversion
while (bit_is_set(ADCSRA,ADSC));
float val = ADCL | (ADCH << 8);
val = val * 5.7; // Using 4.7k and 1k voltage divider
Serial.println(val);
}
Something like the code below must workout but unfortunately it does not help!
int sensorValue = analogRead(A0);
voltage = ((sensorValue/ val) * 1023.);
delay(1000);
Serial.println("voltage: ");
Serial.print(voltage);
if (voltage<=215){
digitalWrite (led, HIGH);
}
else if (voltage>=215){
digitalWrite (led, LOW);
}
I cannot find the issue, it should work, i believe.
//////////////////////new edit/////////////////////////////////////
const long internalReference = 1078L; //measured AREF to be 1.078 ~ 1.078*1000= 1078V
void setup() {
// put your setup code here, to run once:
Serial.begin (115200);
}
void loop() {
analogReference (INTERNAL);
ADMUX |= B00000000;
ADCSRA |= B11000000; //ADEN and ADSC equal to 1 (Start conversion)
while(bit_is_set(ADCSRA, ADSC)); //Wait for conversion to end
long val = ADCL | (ADCH << 8); //Get analog read value
float voltage = (val/internalReference)*1024;
Serial.println (voltage);
}
sensorValue = analogRead(A0)
is a value ranging from 0 to 1023, to convert it to a voltage, the formula isvoltage = (sensorValue/Vref) * 1023
, where Vref is the reference Voltage you are using, in this case, it is 1.1v. Furthermore, you can't get a correctsensorValue
if your input at A0 is HIGHER than the Vref, you will get the wrong value!