sensor data hangs when going through if/then statements

I'm having a problem with sensor data. when reading it through the serial monitor, it freezes for a few seconds when the if statement arguments are met.

help? suggestions?

boolean compare = true; 
const int pingPin = 7;
 int avRead;
int ledPin = 9; 
int ledPin2 = 10;
int ledPin3 = 11;
// LED connected to digital pin 9
int fadeValue;
void setup()  { 
  Serial.begin(9600); // nothing happens in setup 
 
   pinMode (ledPin, OUTPUT);
   pinMode (ledPin2, OUTPUT);
  pinMode (ledPin3, OUTPUT); // ADD THIS
} 

void loop()  { 
 

  long duration, inches, cm;

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);

  // The same pin is used to read the signal from the PING))): a HIGH
  // pulse whose duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  pinMode(pingPin, INPUT);
  duration = pulseIn(pingPin, HIGH);

  // convert the time into a distance
  inches = microsecondsToInches(duration);
  cm = microsecondsToCentimeters(duration);
  
  Serial.print(inches);
  Serial.print("in, ");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();
  
  delay(100);
  avRead = cm;
  
  
  
  

  if(avRead == 5 && compare == true){ // fade up if avRead is >15 and fade down has run
    for (int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
      analogWrite(ledPin, fadeValue);
      delay(10);
    }
    compare = false;  // set compare for fade down when avRead goes 15 or lower next pass thru loop
  }
  if (avRead==7 && compare == false ){
    for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {  
      analogWrite(ledPin, fadeValue);
      
      delay(10);
    }
    compare = true;
  }
  
   if(avRead == 12 && compare == true){ // fade up if avRead is >15 and fade down has run
    for (int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
      analogWrite(ledPin2, fadeValue);
      
      delay(10);
    }
    compare = false;  // set compare for fade down when avRead goes 15 or lower next pass thru loop
  }
  if (avRead==20 && compare == false ){
    for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {  
      analogWrite(ledPin2, fadeValue);
        
      delay(10);
    }
    compare = true;
}



 if(avRead == 27 && compare == true){ // fade up if avRead is >15 and fade down has run
    for (int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
      analogWrite(ledPin3, fadeValue);
       
      delay(10);
    }
    compare = false;  // set compare for fade down when avRead goes 15 or lower next pass thru loop
  }
  if (avRead==35 && compare == false ){
    for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {  
      analogWrite(ledPin3, fadeValue);
    
      delay(10);
    }
    compare = true;
    
  
  }}
  
long microsecondsToInches(long microseconds)
{
  // According to Parallax's datasheet for the PING))), there are
  // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
  // second).  This gives the distance travelled by the ping, outbound
  // and return, so we divide by 2 to get the distance of the obstacle.
  // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
  return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;

}

Your fade functions have 1.5 seconds worth of delays in them.

so they should extend longer? i don't understand how that can cause the sensor data in the serial monitor to momentarily stop

If the condition to do one of the fades is met, the fade loop will now take ~500ms to execute. During that time, nothing is being sent to the serial port, so you see a pause in the output.

the serial monitor is showing the numbers fluctuate even when the distance is controlled, and remains the same. something with the sensor data is not giving consistent number readings, rather fluctuating readings despite your logic.

when reading it through the serial monitor, it freezes for a few seconds when the if statement arguments are met.

says that you have one problem.

the serial monitor is showing the numbers fluctuate even when the distance is controlled, and remains the same. something with the sensor data is not giving consistent number readings, rather fluctuating readings despite your logic.

This says you have a different problem.

When you make up your mind what your problem is let us know. (I think you are the one with the logic problem.)

PaulS: to clarify, when i read the sensor data through the serial monitor, it freezes when the if statements are met. in addition, the numbers fluctuate from extremes from 34 to 5 to 1 to 17 (those are random numbers to clarify, just giving an example oh how much fluctuation there is). sorry for the confusion.

danieljay:
PaulS: to clarify, when i read the sensor data through the serial monitor, it freezes when the if statements are met.

What do you define as "freezes"?

As pointed out, when your if-statements are met, you have 500ms of delays (50 times through the loop, 10ms at a time). During that time, your Arduino is effectively frozen (in a loop).

danieljay:
in addition, the numbers fluctuate from extremes from 34 to 5 to 1 to 17 (those are random numbers to clarify, just giving an example oh how much fluctuation there is). sorry for the confusion.

As Paul points out, this may be a seperate issue. So isolate it. Take out your fading code. Since your code to read the Ping sensor is (exactly?) the same as the example Arduino code, one would expect it to work stand alone. If it works by itself then you know it is related to your fading code.

all understood, and tested prior to fading code. since i want to use the fading code, id hope for a solution or suggestion that I'm missing thats a workaround for this issue.

danieljay:
all understood, and tested prior to fading code. since i want to use the fading code, id hope for a solution or suggestion that I'm missing thats a workaround for this issue.

If the sensor "seems" random with your fading code, it is likely because of all your delays(). It is probably reading correctly, however you (the human) just can't tell when it is actually reading.

You might have to consider spending some time re-structuring your code to use a state-machine with millis() rather than delay().

great. do you have an example of this aside from the arduino example? I'm not understanding how they use it really.

all understood, and tested prior to fading code.

Go back to this code and retest (or comment out the fade stuff). It sounds to me as though your test environment is causing you issues - try pointing the sensor at a featureless section of wall, midway up it. Does that give consistent results?