While loop - integer value of 0

I have a simple while loop set up in the Setup routine.

I want it to execute a loop until the value of startpoint is changed to 1. The initial value is set to 0.

If I code the loop as "while (startpoint=0)" the loop does not execute. However, if I change the condition to "while (startpoint !=1)" the loop executes as expected.

Can anyone explain why the latter works and the former doesn't? I expect it has something to do with the precision of the value 0.

Thanks

// ---------------------------------------------------------------------------
// Ultrasouind motion control - using an ultrasound HC-SR04 to control a servo based on hand positions
// ---------------------------------------------------------------------------

#include <NewPing.h>
#include <Servo.h>

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 20 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

Servo myservo;
int iterations=7;
int pos = 90;
int prevpos = 90;
int currpos = 0;
int posdelta = 0;
int midpoint = 0;
unsigned int startpoint = 0;
float duration, distance, prevdistance;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(9600); // Open serial monitor at 9600 baud to see ping results.
  myservo.attach(9); //attach servo to pin 9
  // zero servos
  myservo.write(prevpos);  // set default position (neutral) 
// hold hands in position approx 4" away for 4 seconds to set midpoint; turn on green light when stable
  Serial.println ("");
  Serial.println ("RED");
  Serial.println (startpoint);
  
  while (startpoint != 1)
  {
    duration = sonar.ping_median (iterations); // read duration
    distance = (duration/2)*0.0343;  // calculate distance
    Serial.print ("Setup distance: ");
    Serial.println (distance);
    delay (2000);
    if (distance >= 8 && distance <= 12) // in start position
    {
      // turn on yellow light; wait
      Serial.println ("YELLOW");
      delay (4000);
    }
    if (distance >= 8 && distance <= 12) // still in start position
    {
      Serial.println ("GREEN");
      startpoint = 1;      // turn on green light; set start position
    }
  }
  

}
void loop ()
{
}

  
while (startpoint=0)

That sets startpoint to zero rather than testing its value

Did you mean to use

while (startpoint==0)

or alternatively

while (!startpoint)

Of course! Brain cramp here. Thanks.

I think you don't mean = but ==

I did. Stared at it for so long I couldn't see the problem. Thanks.

Happens to us all, don't worry.

1 Like

Speaking for myself, it happens to all of us. :expressionless:

That's what compiler warnings are for. Have you turned them up/on in the IDE preferences?

sketch_feb09c.ino:8:9: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   if (a = b) printf("\nhello world.\n");

Turn on warnings, pay heed.

a7

1 Like

No, but they're turned on now. Thanks.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.