Barrido SERVO sin usar for para realizar otras tareas.

Hola a todos, estoy realizando un proyecto con motores y sensores y quiero realizar un barrido con el servo pero que no sea con un for sino usando el loop natural de arduino para ir variando los valores de la posición del servo y de ese modo poder realizar otras tareas (como lecturas de sensores) mientras esta variando la posición.
El código que uso es el siguiente:

#include <Servo.h>
#include <Ultrasonic.h>

Servo myservo;
int pos;
int d, dir;

Ultrasonic sensor(9,8,30000); // (Trig PIN,Echo PIN, microsegundos max “distancia máxima”) 30000us = 5 metros
int distancia=0; //Declaramos la variable donde guardaremos la distancia

void setup()
{
Serial.begin(9600);//Inicializamos el puerto serie para ver la distancia medida
dir=1;
pos=90;
myservo.attach(6);
myservo.write(180/2);
}

void loop()
{
// Barrido del servo
if ((pos<180) && (dir=1)) {
pos=pos+1;
}
else if ((pos=180) && (dir=1)) {
dir=2;
pos=pos-1;
}
else if ((pos>0) && (dir=2)) {
pos=pos-1;
}
else if ((pos=0) && (dir=2)) {
dir=1;
pos=pos+1;
}
// ESTE BARRIDO SE PARA EN 180 y no regresa !!!

myservo.write(pos);

distancia=sensor.Ranging(CM);
Serial.print(“Distancia “);// Imprimimos la palabra distancia en el monitor serial
Serial.print(distancia);// Imprimimos la variable distancia
Serial.print(” cm pos:”);//Imprimimos las letras cm y saltamos de linea.
Serial.print(pos);
Serial.print(" dir:");
Serial.println(dir);
delay (100);//Esperamos 2 segundos para repetir el proceso.

}

Me autorespondo… :wink:

He encontrado el fallo, esta en la comparacion del IF
if ((pos<180) && (dir=1))

las comparaciones deben hacerse con doble == sino son asignaciones!
por lo que el codigo quedaria:

#include <Servo.h>
#include <Ultrasonic.h>

Servo myservo;
int pos;
int d, dir;

Ultrasonic sensor(9,8,30000); // (Trig PIN,Echo PIN, microsegundos max “distancia máxima”) 30000us = 5 metros
int distancia=0; //Declaramos la variable donde guardaremos la distancia

void setup()
{
Serial.begin(9600);//Inicializamos el puerto serie para ver la distancia medida
dir=1;
pos=90;
myservo.attach(6);
myservo.write(180/2);
}

void loop()
{
// Barrido del servo
if ((pos<180) && (dir==1)) {
pos=pos+1;
}
else if ((pos==180) && (dir==1)) {
dir=2;
pos=pos-1;
}
else if ((pos>0) && (dir==2)) {
pos=pos-1;
}
else if ((pos==0) && (dir==2)) {
dir=1;
pos=pos+1;
}
// ESTE BARRIDO SE PARA EN 180 y no regresa !!!

myservo.write(pos);

distancia=sensor.Ranging(CM);
Serial.print(“Distancia “);// Imprimimos la palabra distancia en el monitor serial
Serial.print(distancia);// Imprimimos la variable distancia
Serial.print(” cm pos:”);//Imprimimos las letras cm y saltamos de linea.
Serial.print(pos);
Serial.print(" dir:");
Serial.println(dir);
delay (100);//Esperamos 2 segundos para repetir el proceso.

}