hola espero que me pueda ayudar alguien, me explico lo unico que le falta a mi programa que quiero que haga es que el servo se mueva continuamente de izquierda a derecha y que no interrumpa las demas acciones de lectura y movimiento de los motores como he visto que pasa con el ejemplo que hay del servo que cuando se utiliza no se puede hacer ninguna otra cosa hasta que acaba, solo quiero que se hagan mas cosas aparte del servo como lo hago?? muchas gracias.
#include <Servo.h>
#include <Ultrasonic.h>
#define MOTOR_1_Adelante 8
#define MOTOR_1_Atras 9
#define MOTOR_2_Adelante 10
#define MOTOR_2_Atras 11
int led4 = 4;
int led3 = 3;
int led2 = 2;
Servo myservo;
int pos = 70;
#define TRIG 6
#define ECHO 7
#define Dist_Obstaculo 30.0
#define LOG false
Ultrasonic ultrasonic(TRIG, ECHO);
float Distancia = 0;
void setup() {
pinMode(MOTOR_1_Adelante, OUTPUT);
pinMode(MOTOR_1_Atras, OUTPUT);
pinMode(MOTOR_2_Adelante, OUTPUT);
pinMode(MOTOR_2_Atras, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
myservo.attach(5);
if (LOG) Serial.begin( 9600 );
}
void loop()
{
servo(); //ESTO ES LO QUE ME DA EL PROBLEMA SI NO UTILIZO EL SERVO LO DEMAS FUNCIONA COMO QUIERO, SE QUE ESTA ACCION INTERRUMPE TODO LO DEMAS, COMO LO PUEDO HACER PARA QUE LO HAGA TODO A LA VEZ??
{
Distancia = ultrasonic.Ranging(CM);
if (LOG) Serial.println(Distancia);
}
if (Distancia > Dist_Obstaculo )
{
irAdelante ();
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
}
if (Distancia < Dist_Obstaculo )
{
irDerecha ();
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
}
}
void checkDistancia ()
{
Distancia = ultrasonic.Ranging(CM);
if (LOG) Serial.println(Distancia);
}
void irAdelante ()
{
digitalWrite(MOTOR_1_Adelante, HIGH);
digitalWrite(MOTOR_1_Atras, LOW);
digitalWrite(MOTOR_2_Adelante, HIGH);
digitalWrite(MOTOR_2_Atras, LOW);
}
void irDerecha ()
{
digitalWrite(MOTOR_1_Adelante, HIGH);
digitalWrite(MOTOR_1_Atras, LOW);
digitalWrite(MOTOR_2_Adelante, LOW);
digitalWrite(MOTOR_2_Atras, HIGH);
delay(150);
digitalWrite(MOTOR_1_Adelante, LOW);
digitalWrite(MOTOR_1_Atras, LOW);
digitalWrite(MOTOR_2_Adelante, LOW);
digitalWrite(MOTOR_2_Atras, LOW);
delay(1000);
}
void servo()
{
for(pos = 70; pos <= 120; pos += 1)
{
myservo.write(pos);
delay(15);
}
for(pos = 120; pos>=70; pos-=1)
{
myservo.write(pos);
delay(15);
}
}