Pues el proyecto que voy a hacer es un hexapodo con 12 servos,2 servos por pata(3 servos seria lo suyo pero se me queda corta la placa arduino Duemilanove 328),y lo que queria era simular los movimientos de las patas, levantando una pata ,adelantandola y bajarla,y así sucesivamente con las demas patas, el problema que encuentro ahora esque me gustaria que cada vez que una pata se adelanta me gustaria que la pata anterior se fuera desplazando poco a poco hacia atras,pero no encuentro la forma como no sea haciendo paradas en la pata que se adelanta para mover la anterior.
Valla lio que me he montado ,no se si se me habra entendido xD
El problema tambien esque he comprado la placa en ebay a hong kong por lo que tardara como 2-3 semanas en llegar y el proyecto acaba en junio,asi que estoy con el proteus y el ide de arduino para cuando me llegue solamente me quede cargar el codigo y ajustar algunas cosas.
Pongo el codigo que llevo hasta hoy:
#include <Servo.h>
#include <LCD4Bit.h>
#undef int
#undef abs
#undef double
#undef float
#undef round
int servoPin1 = 13;
int servoPin2 = 14; // numero de pin de cada servo
int servoPin3 =15;
int servoPin4 = 16;
int servoPin5 = 17;
int servoPin6 = 18;
LCD4Bit lcd = LCD4Bit(1);
int avanzado= 0;
int pulso = 0;
int entrado = 0;
void setup()
{
lcd.init();
pinMode(servoPin1, OUTPUT);
pinMode(servoPin2, OUTPUT);
pinMode(servoPin3, OUTPUT);
pinMode(servoPin4, OUTPUT);
pinMode(servoPin5, OUTPUT);
pinMode(servoPin6, OUTPUT);
digitalWrite(servoPin1,LOW);
digitalWrite(servoPin2,LOW);
digitalWrite(servoPin3,LOW);
digitalWrite(servoPin4,LOW);
digitalWrite(servoPin5,LOW);
digitalWrite(servoPin6,LOW);
}
int entradoenbucle= 0;
void loop()
{
/* lanzar los pulsos que el servo necesita para controlar su posición, teniendo en cuenta que:
- 90º = 1500us
- 180º = 1500us + ampl
- 0º = 1500us -ampl
*/
// if(entradoenbucle== 0){
// for(int i = 0 ;i<3;i+=1) anda las veces que le digamos
//{
servoAvanza();
//entradoenbucle= 1;
//}
//}
}
void servoAvanza()
{
if(avanzado == 0)
{
lcd.printIn("Avanza");
avanzado= 1;
}
if(entrado == 0){
delay(250);
pulso = 1500;
digitalWrite(servoPin1,HIGH); //levanta parte pata 1
delayMicroseconds(pulso);
digitalWrite(servoPin1,LOW);
delay(20);
delay(250);
digitalWrite(servoPin2,HIGH); //desplaza pata 1
delayMicroseconds(pulso);
digitalWrite(servoPin2,LOW);
delay(20);
delay(250);
pulso= 1000;
digitalWrite(servoPin1,HIGH); //baja parte pata 1
delayMicroseconds(pulso);
digitalWrite(servoPin1,LOW);
delay(20);
delay(250);
pulso= 1500;
digitalWrite(servoPin3,HIGH); //levanta parte pata 2
delayMicroseconds(pulso);
digitalWrite(servoPin3,LOW);
delay(20);
delay(250);
digitalWrite(servoPin4,HIGH); //deslpaza pata 2
delayMicroseconds(pulso);
digitalWrite(servoPin4,LOW);
delay(20);
delay(250);
pulso =1000;
digitalWrite(servoPin3,HIGH); //baja parte pata 2
delayMicroseconds(pulso);
digitalWrite(servoPin3,LOW);
delay(20);
delay(250);
pulso = 1500;
digitalWrite(servoPin5,HIGH); //levanta parte pata 3
delayMicroseconds(pulso);
digitalWrite(servoPin5,LOW);
delay(20);
delay(250);
digitalWrite(servoPin6,HIGH); //deslpaza pata 3
delayMicroseconds(pulso);
digitalWrite(servoPin6,LOW);
delay(20);
delay(250);
pulso = 1000;
digitalWrite(servoPin5,HIGH); //baja parte pata 3
delayMicroseconds(pulso);
digitalWrite(servoPin5,LOW);
delay(20);
delay(250);
pulso = 1000;
digitalWrite(servoPin2,HIGH); //retorna pata 1
delayMicroseconds(pulso);
digitalWrite(servoPin2,LOW);
delay(20);
delay(250);
digitalWrite(servoPin4,HIGH); //retorna pata 2
delayMicroseconds(pulso);
digitalWrite(servoPin4,LOW);
delay(20);
delay(250);
digitalWrite(servoPin6,HIGH); //retorna pata 3
delayMicroseconds(pulso);
digitalWrite(servoPin6,LOW);
delay(20);
delay(250);
entrado = 0;
}
}