Buenas tardes.
Ten un problema con un servo.
Con el típico programa con un for de los que hay en mil manuales, debiera de hacer un giro suave y constante.
for (posicion=0; posicion<=180; posicion++) {
motor.write(posicion);
delay(50);
}
El problema lo tengo que en vez de girar de grado en grado, gira solo cuando posición se incrementa más o menos en 10. De tal forma que en vez de tener 180 posiciones, tengo 17-18.
He probado también a programar con motor.writeMicroseconds(tiempo); y me hace lo mismo (ej: con 1100 me lo pone a 52º, con 1200 me lo pone a 63º, y con los intermedios no se mueve aunque motor.read() vaya dando valores intermedios).
He probado con los tres servos que tengo (dos MG995 y un G9) y hacen los tres lo mismo.
He probado a alimentarlo a 5v tanto a través del arduino como con una fuente externa.
He probado a conectarlos en los pines PWM 3 y 9, nada.
Y ya no sé qué más probar.
Estoy con un Arduino UNO R4.
¿Alguna idea?
Muchas gracias.
El problema es que el Arduino UNO R4 no esta basado en un UNO sino que es la mezcla entre un Renesas (Arm® Cortex®-M4) y un ESP32-S3 o sea.. nada similar a lo que anda por ahi de la vieja escuela Arduino.
Entonces las cosas mas simples requieren adaptaciones o estudiar como se hacen.
La librería Servo no debe contemplar el Arduino Uno R4 para que salte de 10 en 10.
Asi que Buscas en tu navegador arduino UNO R4 Servo y fijate que encuentras.
Mira este video
minuto 11:47 y tu problema se presenta. Lo menciona como pequeñas inconsistencias en la lilbrería servo y sugiere otra librería PWMServo de PaulStoffregen
Prueba con esta sus ejemplos a ver que tal funciona.
Muchas gracias por la pronta respuesta!!
De momento ya tengo la librería instalada, pero me da error al compilar. Ya he visto (en github) que no he sido el único con este problema, pero de momento no hay respuesta.
Parece que hay problemas con dos declaraciones de begin en pwm.h
Sigo mirando...
Gracias por la ayuda, pero ni el 1.6.13, ni el 1.8.18, ni el 1.8.19, ni el 2.3.2!!!
No he encontrado el 1.6.18 (he supuesto que sería el 1.8.18).
La única solución que he encontrado es, como tiene conflicto entre dos funciones begin (con 2 y con 4 parámetros) de la librería pwm.h, he renombrado una de ellas tanto en pwm.h como en pwm.cpp
No me preguntes el por qué del problema ni de la solución, porque esta misma librería tiene otra función begin sin parámetros, pero parece que no hay problema con ella.
Curiosamente, tampoco hace falta modificar la llamada en PWMServo.cpp ¿? La utiliza solo para una comparación que ahora obviará.
Ahora me toca restablecer todo el proyecto que ya tenía hecho, pero que no iba nada fino!!!
De nuevo gracias.