Hola
Estoy empezando con arduino con un proyecto de brazo robótico al mover el motor se retrocede a un punto en específico, alguien me puede ayudar con este problema
Muchas gracias
#include <Servo.h>
Servo servomotor1;
int Y = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
servomotor1.attach(4);
}
void loop() {
// put your main code here, to run repeatedly:
int position_Y = analogRead(Y);
int angulo = map(position_Y, 0, 1023, 0, 180);
servomotor1.write(angulo);
}
¿Te parece que es suficiente explicación para entender el problema?
Si me guio por tu código no veo un problema.
El servo sigue el movimiento del joystick, entonces cuando lo sueltas y vuelve al centro el servo vuelve a la posición 90°.
Agregar un par de serial print te ayudará a entender lo que sucede
void loop() {
// put your main code here, to run repeatedly:
int position_Y = analogRead(Y);
int angulo = map(position_Y, 0, 1023, 0, 180);
Serial.println("Angulo : " + String(angulo));
servomotor1.write(angulo);
}
Esta instrucción muestra la etiqueta Angulo : seguida del angulo que le envias al servo. Verás que al soltar el joystick el mismo vuelve a la posición 90 o próxima a ese valor. Luego se mueve desde 0 a 180.
Pero la posicion que indica el joystick cuando lo sueltas es el centro, creo que tienes un error al expresarte.
Diras, quiero que permanezca en la ultima posición que le di, para lo cual deberias establecer un criterio que determine que esa posicion es la que quieres, digamos por ejemplo que te quedas 5 segundos en esa posicion, entonces el sistema dice.. ahhh llevo 5 segundo en 123 grados, okay, permanezco ahi.
Pero ojo... tmb tomará la posicion central como la que deseas, me he dado cuenta que no alcanza con decirle toma la ultima durante 5 segundos.
Deberías descartar la posicion central y entonces quedarte con la ultima, o simplemente tener un botón y decirle quiero esta posicion.
Por el momento no se me ocurre otra manera. Tal vez a alguien si.