Movimientos simultaneos???

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?

No sé nada de hexápodos pero para hacer lo que quieres tienes que cambiar el chip de la misma forma que se cambia para hacer un blink de un LED pasando de un delay al ejemplo "Blink without delay".

Entiendo que no sólo quieres dar la instrucción al servo de la posición final, también quieres controlar la velocidad a la que hace el movimiento. Olvídate de los bucles for. Un planteamiento que yo haría (teniendo en cuenta, repito, que no he estudiado soluciones adoptadas para hexápodos) es establecer un tiempo de bucle fijo. En principio lo establecería de 20 ms que es el refresco de la librería servo. Cada vez que quieres mover un brazo establece los pasos (las posiciones en cada uno de los ciclos) evidentemente con un algoritmo que será sencillo ya que es suficiente que sea lineal. En cada ciclo refresca las posiciones de todos los servos que según el algoritmo de cada uno irá a la posición que quieres.

A ver si lo he entendido, creariamos una función llamada "X" en la que se estableciera el procedimiento a seguir para el avance de la pata, por ejemplo, y luego en el bucle llamaria a esa funcion. La verdad es que asi se simplifica bastante el proceso. Estudiaré la opcion.

Gracias Cheyenne!