Intento unir 3 rutinas distintas a partir de pulsadores

Hola compañeros, he estado trabajando en un brazo robotico con 5 servos, hasta ahora consegui hacer 3 codigos que se usan para distintos tipos de movimientos, los cuales por separado me han funcionado casi sin fallos, pero el problema es cuando quiero juntar los 3 codigos en uno solo, mi idea es que cada codigo funcione a modo de perfil, por ejemplo, codigo 1 = perfil 1 el cual lo tengo asignado a un 1 pulsador y que empiece a correr, despues si quiero cambiar a otro modo de movimiento acciono el pulsador del perfil 2 y asi para los 3 "perfiles".

De momento no he tenido la posibildad de comprobarlos directamente en el brazo porque queme el arduino xd y todavia espero a que me llegue el otro que encargue, pero quiera ver si pudieran echarle un vistazo y ver en que me equivoque porque estoy seguro que cometi muchos de un errores.

De antemano muchas gracias.

#include <Servo.h>

Servo servo;  
Servo servo2;  
Servo servo3;  
Servo servo4;  
Servo servo5;  

 int botA = 0;
 int botB = 1; 
 int botC = 2;
 
int configA = LOW;
int configB = LOW;
int configC = LOW;

int izq1 = 5;
int izq2 = 7;
int izq3 = 9;
int izq4 = 11;
int izq5 = 13;

int der1 = 6;
int der2 = 8;
int der3 = 10;
int der4 = 12;
int der5 = A0;

int der_estado1;
int izq_estado1;

int der_estado2;
int izq_estado2;

int der_estado3;
int izq_estado3;

int der_estado4;
int izq_estado4;

int der_estado5;
int izq_estado5;

int angulo = 0;
int angulo2 = 0;
int angulo3 = 0;
int angulo4 = 0;
int angulo5 = 0;

void setup() 
{
  Serial.begin(9600);

  pinMode (izq1, INPUT);
  pinMode (der1, INPUT);
  pinMode (izq2, INPUT);
  pinMode (der2, INPUT);
  pinMode (izq3, INPUT);
  pinMode (der3, INPUT);
  pinMode (izq4, INPUT);
  pinMode (der4, INPUT);
  pinMode (izq5, INPUT);
  pinMode (der5, INPUT);

  pinMode (botA, INPUT);
  pinMode (botB, INPUT);
  pinMode (botC, INPUT);

  servo.attach(A4);  //palma
  servo2.attach(3);  //pulgar
  servo3.attach(A5); //indice
  servo4.attach(A3); //medio
  servo5.attach(4); //anular y meñique

  servo.write(angulo);
  servo2.write(angulo2);
  servo3.write(angulo3);
  servo4.write(angulo4);
  servo5.write(angulo5);
  
}

void loop() 
{
  izq_estado1 = digitalRead(izq1);
  der_estado1 = digitalRead(der1);
  
  izq_estado2 = digitalRead(izq2);
  der_estado2 = digitalRead(der2);
  
  izq_estado3 = digitalRead(izq3);
  der_estado3 = digitalRead(der3);
  
  izq_estado4 = digitalRead(izq4);
  der_estado4 = digitalRead(der4);
  
  izq_estado5 = digitalRead(izq5);
  der_estado5 = digitalRead(der5);

  configA = digitalRead(botA);
  configB = digitalRead(botB);
  configC = digitalRead(botC);


if (configA == HIGH) {
  delay(50);
  if (configA ==   HIGH) {
  
  if(der_estado1 == HIGH)
  {
  
    angulo++;
    if (angulo >= 90)
    {
    angulo = 90;
    }
  }

  if(izq_estado1 == HIGH)
  {
  
    angulo--;
    if (angulo <= 0)
    {
    angulo = 0;
    }
  }

  servo.write(angulo);
   delay(10);
    
  if(der_estado2 == HIGH)
  {
  
    angulo2++;
    if (angulo >= 180)
    {
    angulo2 = 180;
    }
  }

  if(izq_estado2 == HIGH)
  {
  
    angulo2--;
    if (angulo2 <= 0)
    {
    angulo2 = 0;
    }
  }

  servo2.write(angulo2);
   delay(10);

    
  if(der_estado3 == HIGH)
  {
  
    angulo3++;
    if (angulo3 >= 180)
    {
    angulo3 = 180;
    }
  }

  if(izq_estado3 == HIGH)
  {
  
    angulo3--;
    if (angulo3 <= 0)
    {
    angulo3 = 0;
    }
  }

  servo3.write(angulo3);
   delay(10);

    
  if(der_estado4 == HIGH)
  {
  
    angulo4++;
    if (angulo4 >= 180)
    {
    angulo4 = 180;
    }
  }

  if(izq_estado4 == HIGH)
  {
  
    angulo4--;
    if (angulo4 <= 0)
    {
    angulo4 = 0;
    }
  }

  servo4.write(angulo4);
   delay(10);

    
  if(der_estado5 == HIGH)
  {
  
    angulo5++;
    if (angulo5 >= 180)
    {
    angulo5 = 180;
    }
  }

  if(izq_estado5 == HIGH)
  {
  
    angulo5--;
    if (angulo5 <= 0)
    {
    angulo5 = 0;
    }
  }

  servo5.write(angulo5);
   delay(10);
}
}

if (configB == HIGH) {
  delay(50);
  if (configB == HIGH) {

      servo.write(0);
  delay(1000);
  servo.write(90);
  delay(1000);

  servo2.write(0);
  delay(2000);
  
  servo2.write(120);
  delay(2000);
  
  servo3.write(0);
  delay(1000);
   servo3.write(120);
  delay(1000);
  
  servo4.write(0);
  delay(2000);
  servo4.write(120);
  delay(2000);

  servo5.write(0);
  delay(1000);
  servo5.write(120);
  delay(1000);
  }
  }

if (configC == HIGH) {
  delay(50);

if (configC == HIGH) { 

  //1//
  servo.write(90);
  servo2.write(120);
  servo3.write(0);
  servo4.write(120);
  servo5.write(120);
  delay(1000);

  //2//
  servo.write(90);
  servo2.write(120);
  servo3.write(0);
  servo4.write(0);
  servo5.write(120);
  delay(2000);

  //3//
  servo.write(0);
  servo2.write(0);
  servo3.write(0);
  servo4.write(0);
  servo5.write(120);
  delay(1000);

   //4//
  servo.write(90);
  servo2.write(120);
  servo3.write(0);
  servo4.write(0);
  servo5.write(0);
  delay(2000);

   //5//
  servo.write(0);
  servo2.write(0);
  servo3.write(0);
  servo4.write(0);
  servo5.write(0);
  delay(1000);
  } 
 }    
}

Paso a paso:

  1. todas las librerias sin repetir.
  2. todos los globales, constantes y objetos sin repetir.
  3. setup() no olvidar nada pero tampoco repetir nada
  4. loop() lo mismo y recordar algo muy básico. Si un código solo funciona y tiene delay() no esperes que 2 lo hagan y menos 3.
    No se usa delay() porque éste detiene todo. Mira Documentación y aprende a usar millis().

Mi respuesta es general. No he mirado tu caso porque esto ha sido repondido muchísimas veces.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.