Configuración de los ángulos de los servos y memorización en la EEPROM.Me ha costado un poco más de lo que pensaba, pero al fin le he metido la configuración de los ángulos diréctamente con el Arduino. Para ello se necesita añadir dos pulsadores al montaje. Uno incrementa el ángulo y otro lo decrementa., del servo seleccionado y la posición que tiene. El pin en que se conecta cada pulsador se define con las constantes
PIN_CONFIGURACION_INCREMENTA y
PIN_CONFIGURACION_DECREMENTA. Los pines actualmente configurados son el
34 y
35, respectivamente.
El funcionamiento de la configuración es:
- Se accede al "modo configuración" manteniendo pulsado los dos botones a la vez durante 2 segundos. Este tiempo se puede cambiar con la constante
TIEMPO_ENTRAR_CONFIGURACION.
- Cuando se entra en modo configuración, todas las luces de los cruces se apagan salvo la del servo que se está configurando. Esta parpadea rápidamente para indicar que es ella la que se está configurando. El seleccionado es el último que se hubiera accionada, o el servo "UNO" si no se ha accionado ninguno desde que arrancó el programa.
- Para seleccionar el servo que se quiere configurar, basta con pulsar su botón de cambio de desvío. Una vez seleccionado, parpadea sólo su luz correspondiente.
- Se configura la posición que indica la luz que parpadea. Se supone que si parpadea la verde es para configurar el ángulo del servo en la posición de vía recta. Si parpadea la azul es para configurar la posición del servo en la posición de desvío.
- Para cambiar qué ángulo se quiere configurar, basta con pulsar el botón de cambio de desvío. Si ya estaba seleccionado ese desvío, cambiará de posición y se podrá configurar esa nueva posición.
- Para aumentar o disminuir el ángulo del servo seleccionado en su posición actual: se pulsa el botón de configuración de incremento o decremento, según se necesite, las veces que se necesite. Cada pulsación incrementa o decrementa un grado.
- Según se va modificando el ángulo de la posición del servo, este nuevo valor se guarda en la EEPROM. No hay que hacer nada especial para que se guarde.
- Transcurrido 30 segundos desde la última vez que se pulsara uno de los botones de configuración, se saldrá solo del "modo configuración". Dejará de parpadear rápidamente la luz del que se estuviera configurando, y las luces del resto de desvíos se encenderán y volverá todo a funcionar de manera normal.
- Si se reinicia o se apaga el Arduino, al arrancar el programa recupera los valores configurados.
- La primera vez, como en la EEPROM no hay "valores buenos", se configuran con los ángulos indicados al definir cada
aguja en el programa. Esos mismos valores son los que se utilizaban hasta la versión anterior del programa para definir los ángulos con que trabajaba cada servo.
- En principio el ángulo no puede ser mayor a 180 ni menor que 0. Si se trata de ir más allá de estos límites, no se hace caso de las pulsaciones de incremento o decremento y el servo no se moverá.
Respondiendo:
... Interpreto que para ejecutarlo debo esperar que configures el siguiente paso ya que anguloDestino aún no tiene los grados y los tendrá una vez que estén incluidos los dos pulsadores, ¿es así?
Por si no ha quedado claro ya. A partir de esta versión del programa, los ángulos que se definen en el código se usan únicamente si en la EEPROM no se han guardado nunca ángulos configurados con el Arduino, mediante los dos pulsadores de configuración.
... Puede ser que en el futuro agregue algún otro desvío de otro fabricante, que tenga una diferencia en grados con los actuales. ¿Debería configurar otra clase "Aguja" para este desvío?
Disculpame por la pregunta anterior, ahora veo que desde la línea 32 a la 39 diferenciaste cada servo y se pueden modificar en forma individual los grados de movimiento de cada uno.
Efectivamente, se podría cambiar los ángulos en el código, pero esos ángulos se pueden modificar directamente con el Arduino y los dos pulsadores de configuración.
Si en un futuro se quieren controlar más servos, bastaría con agregar más elementos al final del array
Aguja agujas[ ]Modificaciones del programa:
- Añadido el soporte para gestionar las configuración de los ángulos.
- Se usa la librería anti-rebote Bounce2.
Importante: hay que tenerla instalada para que el programa se pueda compilar. Se entuentra en
https://github.com/thomasfredericks/Bounce2 Queda pendiente añadir el soporte para el control de los dos motores paso a paso.
Adjunto código.