hi all..
i need help to convert ADC value to ppm (part per million) , it is my sketch :
#include <Wire.h>
#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
byte SpecialChar0[8]={
B00000,
B00010,
B00110,
B01010,
B01111,
B00010,
B00010,
B00000
};byte SpecialChar1[8]={
B00000,
B11110,
B10001,
B11110,
B10000,
B10000,
B00000,
B00000
};byte SpecialChar2[8]={
B00000,
B10001,
B11011,
B10101,
B10001,
B10001,
B00000,
B00000
};const int interval = 10*100;
long lastReadTime = 0;unsigned int ADCValue1, ADCValue2;
double vrl1,vrl2 ;
double Vcc;long readVcc() {
long result;
// Read 1.1V reference against AVcc
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1125300L / result; // Back-calculate AVcc in mV
return result;
}void setup() {
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.createChar(0, SpecialChar0);
lcd.createChar(1, SpecialChar1);
lcd.createChar(2, SpecialChar2);
}void loop() {
long currentTime = millis();
if (currentTime > lastReadTime + interval){Vcc = readVcc()/1000.0;
ADCValue1 = analogRead(0);
ADCValue2 = analogRead(1);
vrl1 = (ADCValue1 / 1023.0) * Vcc;
vrl2 = (ADCValue2 / 1023.0) * Vcc;lcd.setCursor(0, 0);
lcd.print("CH");
lcd.write((byte)0);
lcd.setCursor(4, 0);
lcd.print(vrl1);
lcd.print("V");
lcd.setCursor(0, 1);
lcd.print("CO ");
lcd.setCursor(4, 1);
lcd.print(vrl2);
lcd.print("V");
lcd.setCursor(10, 0);
lcd.print(ADCValue1);
lcd.setCursor(17, 0);
lcd.write((byte)1);
lcd.write((byte)1);
lcd.write((byte)2);
lcd.setCursor(10, 1);
lcd.print(ADCValue2);
lcd.setCursor(17, 1);
lcd.write((byte)1);
lcd.write((byte)1);
lcd.write((byte)2);
lastReadTime = millis();
}
}