Arduino Nano send wrong value!!

Hi,

i want to developp a wireless-voc sensor-system. I used tgs2602, arduino Nano and Xbee Pro S1.
This is my arduino-code:

int value ;       
const int gasSensor = A0;

void setup() {

  Serial.begin(9600);

   }

void loop() {
 


  int value = analogRead (gasSensor);



  float volt = (value/1023.0)*5.0 ;    // Rechne die von ADC ausgegebenen Werten in Volt um
  float Rs1 = 10*(5-volt)/volt;        //Rechne den Widerstandswert
  //Serial.print("40B7DEF1");            // Sensorname
  //Serial.print("\t");                  // Tabulator

  
  // Kalibrierungsarray der Länge N = 17
 float Rs [17] = {57.84260516,  2.200081335,  1.606762875,  1.178596714,  0.944910617,  0.865628395,  0.764262648,  0.687566798,  0.626992561,  0.567101091,  0.544815465,  0.496850952,  0.474860336,  0.474860336,  0.442046642,  0.423905489,  0.402219139};
 float ppmValue [17] = {0,  5,  10,  15,  20,  24,  28.25,  32.5,  37.75,  43.25,  48.75,  53.25,  57.75,  62.50,  67.50,  75.5,  77.5};
 
     
if (Rs1 >= Rs [0])
{
    float ppm = ppmValue [0];
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println(ppm);  
    delay(30000);
} 
  // Interpolation: ppm [0;5]
 
  if ( Rs[1] < Rs1 && Rs1 < Rs[0]){

    float ppm = ppmValue [0] + ((-Rs1 + Rs [0])/(Rs[0] - Rs [1] ))*(ppmValue [1] - ppmValue[0]);
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm);  
    delay(30000);
}
// Interpolation: ppm [5;10]
  else if ( Rs[2] < Rs1 && Rs1 < Rs[1]){
   
   float ppm = ppmValue [1] + ((-Rs1 + Rs [1])/(Rs[1] - Rs [2] ))*(ppmValue [2] - ppmValue[1]);
    
    //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);
  } 
  
  // Interpolation: ppm [10;15]
  else if ( Rs[3] < Rs1 && Rs1 < Rs[2]){
   
    float ppm = ppmValue [2] + ((-Rs1 + Rs [2])/(Rs[2] - Rs [3] ))*(ppmValue [3] - ppmValue[2]);
    
    //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);
  }
    // Interpolation: ppm [15;24]
  else  if ( Rs[4] < Rs1 && Rs1 < Rs[3]){
   
 float ppm = ppmValue [3] + ((-Rs1 + Rs [3])/(Rs[3] - Rs [4] ))*(ppmValue [4] - ppmValue[3]);
   
    //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);
  }
  
  // Interpolation: ppm [24;28.25]
  
 else if ( Rs[5] < Rs1 && Rs1 < Rs[4]){
   
   float ppm = ppmValue [4] + ((-Rs1 + Rs [4])/(Rs[4] - Rs [5] ))*(ppmValue [5] - ppmValue[4]);
  
  //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);
  }
  
   // Interpolation: ppm [28.25;32.5]
   else  if ( Rs[6] < Rs1 && Rs1 < Rs[5]){
   
  float  ppm = ppmValue [5] + ((-Rs1 + Rs [5])/(Rs[5] - Rs [6] ))*(ppmValue [6] - ppmValue[5]);
     
     //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);
   }
   
  // Interpolation: ppm [32.5;37.75]
else  if ( Rs[7] < Rs1 && Rs1 < Rs[6]){
   
  float  ppm = ppmValue [6] + ((-Rs1 + Rs [6])/(Rs[6] - Rs [7] ))*(ppmValue [7] - ppmValue[6]);
   
   //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);
  }
  
  // Interpolation: ppm [37.75;43.25]
  else  if ( Rs[8] < Rs1 && Rs1 < Rs[7]){
   
  float  ppm = ppmValue [7] + ((-Rs1 + Rs [7])/(Rs[7] - Rs [8] ))*(ppmValue [8] - ppmValue[7]);
     
     //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);
  }
  
  // Interpolation: ppm [43.25;48.75]
  else if ( Rs[9] < Rs1 && Rs1 < Rs[8]){
   
   float ppm = ppmValue [8] + ((-Rs1 + Rs [8])/(Rs[8] - Rs [9] ))*(ppmValue [9] - ppmValue[8]);
     
     //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);    
  }
   // Interpolation: ppm [48.75;53.25]
  else  if ( Rs[10] < Rs1 && Rs1 < Rs[9]){
   
  float  ppm = ppmValue [9] + ((-Rs1 + Rs [9])/(Rs[9] - Rs [10] ))*(ppmValue [10] - ppmValue[9]); 
  
  //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);
  }
  
 // Interpolation: ppm [53.25;57.75]
 else  if ( Rs[11] < Rs1 && Rs1 < Rs[10]){
   
   float ppm = ppmValue [10] + ((-Rs1 + Rs [10])/(Rs[10] - Rs [11] ))*(ppmValue [11] - ppmValue[10]); 
  
  //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);
  }
 
  // Interpolation: ppm [57.75;62.5] 
 else if ( Rs[12] < Rs1 && Rs1 < Rs[11]){
   
  float  ppm = ppmValue [11] + ((-Rs1 + Rs [11])/(Rs[11] - Rs [12] ))*(ppmValue [12] - ppmValue[11]); 
  
  //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);
  }
 
  // Interpolation: ppm [62.5;67.5]
  
 else  if ( Rs[13] < Rs1 && Rs1 < Rs[12]){
   
  float  ppm = ppmValue [12] + ((-Rs1 + Rs [12])/(Rs[12] - Rs [13] ))*(ppmValue [13] - ppmValue[12]); 
  
  //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);
  }
  
   // Interpolation: ppm [67.5;75.5]
 else  if ( Rs[14] < Rs1 && Rs1 < Rs[13]){
   
   float ppm = ppmValue [13] + ((-Rs1 + Rs [13])/(Rs[13] - Rs [14] ))*(ppmValue [14] - ppmValue[13]); 
  
  //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);
  }

 // Interpolation: ppm [75.5;77.5]

else    if( Rs[15] < Rs1 && Rs1 < Rs[14]){
   
   float ppm = ppmValue [14] + ((-Rs1 + Rs [14])/(Rs[14] - Rs [15] ))*(ppmValue [15] - ppmValue[14]); 
  
  //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);
  }
  
  else    if( Rs[16] < Rs1 && Rs1 < Rs[15]){
   
   float ppm = ppmValue [15] + ((-Rs1 + Rs [15])/(Rs[15] - Rs [16] ))*(ppmValue [16] - ppmValue[15]); 
  
  //PPM Ausgabe
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm); 
    delay(30000);}

    else    if (Rs1 >= Rs [16])
{
    float ppm = ppmValue [16];
  
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm);  
    delay(30000);
} 
  
   else    if (Rs1 < Rs [16])
{
    float ppm = 80;
  
    //Serial.print ("ppm: ");
    Serial.print("1");            // Sensorname
    Serial.print("\t");                  // Tabulator

    Serial.println (ppm);  
    delay(30000);    
} 
delay(3000);    
  }

I don´t know what i´m doing wrong, but the values i´m getting are all wrong. It seems that this value aren´t from the analogpin.
Can someone help me?

Thanks

but the values i´m getting are all wrong

But the values that you get and the values you expect are some kind of secret?

What do your debug prints tell you?

Let me summarize your post:

I was expecting something, but I got something else.

Can anyone explain this?

Your code also needs to be refactored; it's at least 140 200 lines too long.

Hi AWO,
Hi Nick,

Thanks for the answers.

Sorry, i forgot to tell exactly the values i´m getting.

The values i´m getting are 3,0ppm, 3,2ppm....., it doesn´t really change at all.
I check the value from the analogpin and it seems to be alright. (this analogvalue change when i approach an alcohol recipient from the sensor). But the converted value i´m reading at the serial port are wrong.

i will also try to reduce my code ::slight_smile:

thanks

There's a famous axiom in computing "Garbage in, garbage out".

You need to find out what's going in to your algorithm.

Hi,
it works!! i made it.

Thanks a lot!!