Saludos para todos. Estoy comenzando con Arduino y mi primer proyecto ha sido un brazo robotico que, mediante cinco resistencias LDR. El caso es que me encuentro en la fase de desarrollo del software y me asalta la duda de que, por lo que veo, la programación que consigo mueve cada componente del brazo de manera aislada, es decir, primero un servo, luego otro, y por último el tercero, cuando mi intencion es mover los tres a la vez. He hecho un pequeño ciclo de presentación en el setup antes de ejecutar el loop.
Os paso el esquema:
#include <Servo.h> //incluye la libreria servo
Servo giro; //giro de la base
Servo codo; // Acciona codo y hombro en la base
Servo cabezal;// Acciona cabezal
int posgiro=90; //posicion inicial centrada del giro
int poscodo=30; //posicion inicial abatida del codo
int poscabezal=170; //posicion inicial abatida del cabezal
int LDRup=1;
int LDRcenter=2;
int LDRdown=3;
int LDRleft=4;
int LDRright=5;
int valorup;
int valorcenter;
int valordown;
int valorleft;
int valorright;
void setup()
{
Serial.begin(9600);//Establece la velocidad de datos en bits por segundo
// (baudios) para la transmisión de datos en serie.
//Para comunicarse con el computador, utilice una de
//estas velocidades: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 o 115200.
//Sin embargo, puedes especificar otras velocidades
//- por ejemplo, para comunicarte a través de los pines 0 y 1 con un componente que
//requiere una velocidad de transmisión en particular.
//pinmodes de LDR no necesarios al ser entradas analogicas
giro.attach(9); //el servo profundidad conectado a pin 9
codo.attach(10);
cabezal.attach(11);
//iniciamos bucle de presentacion de movimiento de los tres servos en void setup para hacer un solo movimiento
for(poscabezal = 170; poscabezal >30 ; poscabezal -= 1) // va de 180 grados retraido a o grados abriendo de 1 en 1 grado
{cabezal.write(poscabezal);
delay(5); }
for(poscabezal = 30; poscabezal < 170; poscabezal+=1) //fin del ciclo de presentacion de primer movimiento
{cabezal.write(poscabezal);
delay(5); }
for(posgiro =90; posgiro < 179; posgiro += 1) //giro va desde posicion central a uno de los lados. Recordar la otra parte del giro mas adelante
{giro.write(posgiro);
delay(10);}
for(posgiro =179; posgiro >0; posgiro -=1) //cuando el giro llegue a posicion 180, cambia el sentido de giro hasta posicion cero
{giro.write(posgiro);
delay(10);}
for(posgiro =0; posgiro < 90; posgiro += 1) //giro va desde posicion lateral extrema a posicion central y queda a la espera
{giro.write(posgiro);
delay(10);}
for(poscodo =30; poscodo < 150; poscodo +=1) //movimiento desde retraido hasta tope abierto de codo
{codo.write(poscodo);
delay(15);}
for(poscodo =150; poscodo > 30; poscodo -=1) //movimiento desde retraido hasta tope abierto de codo
{codo.write(poscodo);
delay(5); }
}
void loop()
{
valorup=analogRead(LDRup); //toma las diferentes lecturas analogicas de las LDRs
valorcenter=analogRead(LDRcenter);
valordown=analogRead(LDRdown);
valorleft=analogRead(LDRleft);
valorright=analogRead(LDRright);
Serial.println(valorup);
Serial.println(valorcenter);
Serial.println(valordown);
Serial.println(valorleft);
Serial.println(valorright);
valorup=map(valorup, 0,160,0,255);
valorcenter=map(valorcenter, 0,160,0,255);
valordown=map(valordown, 0,160,0,255);
valorleft=map(valorleft, 0,160,0,255);
valorright=map(valorright, 0,160,0,255);
if (valorup < valordown)
{for(poscabezal=170; poscabezal > 30; poscabezal-=1)
cabezal.write(poscabezal);
delay(30);}
else
{for(poscabezal=30; poscabezal < 170; poscabezal+=1)
delay(30);}
}
Ahora me encuentro con el desarrollo del loop pero me gustaria solventar antes lo del movinmiento simultaneo, que, por lo que veo es posible puesto que los hexopodos que veo por youtube los realizan. Como puedo hacer esta programacion?