Servo stop

Hi,
At school we are doing a paintball project and i am controlling it with arduino. If i push the start button it has to start the for loop and it does that, but i cant make it happen that the servo’s stop immediately when the stop button is pressed. The thing that happens is that the for loop only stop when the stop button is high at the beginning of a new loop. Does anyone know what i am doing wrong?

ps. ( i am only using servo x at the moment to test the code. )

Thanks a lot,
Rolf

Here is my code:

status_s1 = digitalRead(s1);
if (status_s1 == HIGH) // start
{
Serial.println(“start”);
for (int j=1; j<=10; j=j+1)
{
status_s2 = digitalRead(s2);//stop

servo_x.write(0);
servo_y.write(0);
delay(1000);

if (status_s2 == HIGH)
{
Serial.println (“stop”);
j = 0;
break;
}
servo_x.write(50);
servo_y.write(0);
delay(1000);
if (status_s2 == HIGH)
{
Serial.println (“stop”);
j = 0;
break;
}

servo_x.write(100);
servo_y.write(0);
delay(1000);
if (status_s2 == HIGH)
{
Serial.println (“stop”);
j = 0;
break;
}

servo_x.write(150);
servo_y.write(0);
delay(1000);
if (status_s2 == HIGH)
{
Serial.println (“stop”);
j = 0;
break;
}

servo_x.write(180);
servo_y.write(0);
delay(1000);
if (status_s2 == HIGH)
{
Serial.println (“stop”);
j=0;
break;
delay(1000);
}

}
delay(50);
}}

                           status_s2 = digitalRead(s2);//stop
                                 
                                  servo_x.write(0);
                                  servo_y.write(0);
                                  delay(1000);
                                 
                                                             if (status_s2 == HIGH)

See if the stop switch is pressed. If it is, move the servos again, stuff your thumb up your ass for a whole second, and THEN notice that the switch was pressed.

Well, no wonder the switch is not responsive. Get rid of EVERY delay(). That will, of course, necessitate that you scrap the whole program and start over. Do not start again until you have read, understood, and embraced the blink without delay example's philosophy.

Hi,

Can you please post a copy of your sketch, using code tags?
They are made with the </> icon in the reply Menu.
See section 7 http://forum.arduino.cc/index.php/topic,148850.0.html

The delay(1000); causes the sketch to STOP for 1 Second, nothing else happens, the sketch is blocked, any input is ignored.

Look up Blink Without Delay in the examples in the IDE.

Tom… :slight_smile:

Oke thank you tom, here is the code with tags, sorry for that.

#include <Servo.h>
int s1 = 2;
int status_s1 = 0;

int s2 = 3; 
int status_s2 = 0;

int s3 = 4; 
int status_s3 = 0;

Servo servo_x;
Servo servo_y;

/* S1 = start 
   S2 = stop
   S3 = auto/hand
*/



void setup() 
{
  pinMode(s1, INPUT);
  pinMode(s2, INPUT);
  pinMode(s3, INPUT);
  servo_x.attach(11); 
  servo_y.attach(10);
  
 Serial.begin(9600);
}





void loop ()
  {
 status_s3 = digitalRead(s3);
  
  if (status_s3 == HIGH)
  {
  Serial.println ("auto");
  delay(1000);
  

  status_s1 = digitalRead(s1); 
                      if (status_s1 == HIGH) // start                       
                      {
                                Serial.println("start");           
                                for (int j=1; j<=10; j=j+1) 
                                 {
                                                            status_s2 = digitalRead(s2);//stop
                                  
                                  servo_x.write(0); 
                                  servo_y.write(0);
                                  delay(1000);
                                  
                                                             if (status_s2 == HIGH)
                                                             { 
                                                             Serial.println ("stop");
                                                             j = 0;
                                                             break;                                
                                                             }                              
                                  servo_x.write(50);
                                  servo_y.write(0);
                                  delay(1000);
                                                             if (status_s2 == HIGH)
                                                             { 
                                                             Serial.println ("stop");
                                                             j = 0;
                                                             break;
                                                             }
                                  
                                  servo_x.write(100);
                                  servo_y.write(0);
                                  delay(1000);                           
                                                             if (status_s2 == HIGH)
                                                             { 
                                                             Serial.println ("stop");
                                                             j = 0;
                                                             break;
                                                             }
                                  
                                  servo_x.write(150);
                                  servo_y.write(0);
                                  delay(1000);
                                                             if (status_s2 == HIGH)
                                                             { 
                                                             Serial.println ("stop");
                                                             j = 0;
                                                             break;
                                                             }
                                  
                                  servo_x.write(180);
                                  servo_y.write(0);
                                  delay(1000);
                                                             if (status_s2 == HIGH)
                                                             { 
                                                             Serial.println ("stop");
                                                             j=0;
                                                             break;
                                                             delay(1000);                            
                                                             }
                                                           
                                }
                                delay(50);
                                }}
                                    
                                                        
                                       
{  
  if (status_s3 == LOW)
  {
  Serial.println ("hand");
  delay(2000);
  }
  
}
}

It is also good practice to use Tools->Auto Format on your code before posting it. That generally make the code more readable.

#include <Servo.h>
int s1 = 2;
int status_s1 = 0;

int s2 = 3;
int status_s2 = 0;

int s3 = 4;
int status_s3 = 0;

Servo servo_x;
Servo servo_y;

/* S1 = start
   S2 = stop
   S3 = auto/hand
*/



void setup()
{
  pinMode(s1, INPUT);
  pinMode(s2, INPUT);
  pinMode(s3, INPUT);
  servo_x.attach(11);
  servo_y.attach(10);

  Serial.begin(9600);
}





void loop ()
{
  status_s3 = digitalRead(s3);

  if (status_s3 == HIGH)
  {
    Serial.println ("auto");
    delay(1000);

    status_s1 = digitalRead(s1);
    if (status_s1 == HIGH) // start
    {
      Serial.println("start");
      for (int j = 1; j <= 10; j = j + 1)
      {
        status_s2 = digitalRead(s2);//stop

        servo_x.write(0);
        servo_y.write(0);
        delay(1000);

        if (status_s2 == HIGH)
        {
          Serial.println ("stop");
          j = 0;
          break;
        }
        
        servo_x.write(50);
        servo_y.write(0);
        delay(1000);
        if (status_s2 == HIGH)
        {
          Serial.println ("stop");
          j = 0;
          break;
        }

        servo_x.write(100);
        servo_y.write(0);
        delay(1000);
        if (status_s2 == HIGH)
        {
          Serial.println ("stop");
          j = 0;
          break;
        }

        servo_x.write(150);
        servo_y.write(0);
        delay(1000);
        if (status_s2 == HIGH)
        {
          Serial.println ("stop");
          j = 0;
          break;
        }

        servo_x.write(180);
        servo_y.write(0);
        delay(1000);
        if (status_s2 == HIGH)
        {
          Serial.println ("stop");
          j = 0;
          break;
          delay(1000);
        }
      }
      delay(50);
    }
  }

  {
    if (status_s3 == LOW)
    {
      Serial.println ("hand");
      delay(2000);
    }

  }
}