Codigo control 4 servos brazo

Buenas! Estoy haciendo un brazo robotico con 4 servos y he encontrado un tutorial para hacerlo, y todo bien, excepto el codigo que no acaba de ir bien. No se si podriais hecharme una mano a ver porque no funciona del todo bien. El proyecto esta en esta web: https://www.robotic-a.es sale en la portada.

Muchas gracias!

En primer lugar postea bien tu consulta siguiendo las normas del foro, no todos por aqui estamos dispuestos a realizar navegaciones externas y estudiarnos toda esa información, especifica mas el problema y sube esquemas y código que usas.
Dicho esto y sin analizar los esquemas eléctricos y solo muy por encima el principio del código:

int potpin = 0;  // Asignamos la entrada analogia 0 de la placa Arduino al potenciómetro
int joypinX = 3;  // Asignamos la entrada analogia 3 de la placa Arduino eje X del joystick
int joypinY = 2;  // Asignamos la entrada analogia 2 de la placa Arduino eje Y del joystick
int joypinK = 4;  // Asignamos la entrada analogia 4 de la placa Arduino al eje K del joystick (pulsador)

Donde asigna los pines de entrada/lectura de los potenciometros. Bien salvo usar el pin " 0 ", ese pin y el pin " 1" es usado por el arduino para la comunicacion con el PC, mejor no usarlos, reasigna esa entrada a otro pin.

  servoBase.attach(4); //Asignamos el pin digial 4 al Servo que controla la base del brazo
  servoLeft.attach(2);  //Asignamos el pin digial 2 al Servo que controla el movimiento izquierdo del brazo
  servoRight.attach(5);  //Asignamos el pin digial 5 al Servo que controla el movimiento derecho del brazo
  servoPinza.attach(3);  //Asignamos el pin digial 3 al Servo que controla la pinza del brazo

Aquí definen las salidas a los servos y como ves pisan las entradas definidas anteriormente y un pin no puede ser entrada y salida al mismo tiempo, reasigna las salidas a 4 pines nuevos no usados por ninguna otra cosa.

Echo en falta en el "setup" la definición de para que sirve cada pin, "pinmode", en INPUT o OUTPUT, añádelas.

Una vez arreglado lo anterior, revisa el "loop" por si tienes que cambiar alguna llamada a las nuevas asignaciones, cambia el circuito eléctrico a las nuevas asignaciones de pin, prueba y ya comentaremos si sigues teniendo problemas.

Una preguntilla, ¿tienes ya impresas las piezas 3D?, ¿o es de momento solo una prueba de servos?.

Saludos.

Ojo, son los pines A0, A2, A3 y A4.
Por eso no define el pinMode() en setup().
Aunque es confuso, puede obviarse la "A" al momento de definir un pin analógico.

Tienes toda la razón, es confuso y me confundí, no me di cuenta que eran potenciómetros.

@rkr_protoboard ignora todo lo que dije antes y haz lo que te indica @MaximoEsfuerzo , añade una "A" en esas declaraciones o decláralas así:

int potpin = 14;
int joypinX = 17;
int joypinY = 16;
int joypinK = 18;

Pruébalo y comenta resultados.

Y discrepo @MaximoEsfuerzo no se puede obviar la "A".

Hacé la prueba o mirá la simulación. :wink:

Sigo discrepando déjate de simuladores y hazlo físicamente.
Utiliza el IDE y un arduino, añade a ese código y antes del delay, (que no se porque pides perdón, ya sabes lo que pienso al respecto), la siguiente línea:

Serial.println(Pin_A2_pero_sin_A);

Abre el monitor serie del IDE y si no te crees los resultados pincha un pote real y compruebalo.
Saludos.

No se a qué apuntas pero

Serial.println(Pin_A2_pero_sin_A);

Va a mostrar

2

en el puerto serial. Y es correcto, por más que mueva el pote va a seguir imprimiendo "2".
Distinto es si hago

Serial.println(analogRead(Pin_A2_pero_sin_A));

porque así sí estaría leyendo el potenciómetro.

Por otro lado, creo que fui claro cuando dije que era confuso que pudiese obviarse la "A" (o sea que el compilador lo permita) justamente porque de ese modo no se sabe, a priori, de qué pin se trata.

Eso no significa que esté de acuerdo con definir los pines analógicos de ese modo, y de hecho nunca lo hago.

Y lo de "perdón =( " es a modo de broma.

Saludos

Hola. Muchas gracias por tus comentarios y disculpad por no postear bien.

Ok intentare este finde hacer lo que comentas.

Si, tengo la estructura ya impresa y montada.

Gracias de nuevo

Vaya, no havia visto el resto. Ok entiendo que los pines son correctos pero mal etiquetados.

A delante de las entradas o salidas analogicas correcto?

Si les asigno el valor Ax tengo que definir el pinMode()? Sino entiendo que lo supone?

Muchas gracias a todos.

Un saludo!

No, no hace falta usar pinMode() porque analogRead() hace las modificaciones necesarias.
De cualquier modo, por defecto todos los pines se definen como entradas.

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