DCC_decoder es una librería para poder crear un decodificador de accesorios. Es creada por MynaBay y se puede encontrar en su repositorio. alojado en GitHub La única pega que tiene esta librería es que no es programable desde la vía de programación o desde la vía principal. Pero esto no es un fallo en sí, de hecho también es uno de sus fuertes. Con DCC decoder solo hay dos estados, 1 y 0. Por eso su uso es muy utilizado en desvíos e iluminación
Para hacer uso de la librería, primero tenemos que descargar la librería, y como toda librería de arduino la colocaremos en la carpeta que tengamos asociada a las librerías de Arduino. En mi caso ~/Arduino/libraries/
No creo que haga falta decir que necesita un versión del IDE Arduino 1.6 o superior, pero por si acaso lo comento. Cuando arranquemos el IDE ya podremos empezar a trastear con los ejemplos:
- DCC_Basic_Acc_Decoder.pde
- DCC_Monitor.pde
Voy a intentar diseccionar estos archivos para que quede más claro que es lo que hace cada parte.
Archivo DCC_Basic_Acc_Decoder.pde
En la cabecera de este archivo tenemos la llamada a la librería y el número de la interrupción, en este caso la 0 asociada al pin 2 de Arduino UNO / NANO.
Estructura de datos:
Lo siguiente que encontramos es la estructura de datos que tendrá cada accesorio como la dirección, estado de la salida o si es digital o analógico la estructura es la siguiente:
En el ejemplo tenemos definidas 8 salidas las podemos ver en la función:
Función ConfigureDecoder():
La función void ConfigureDecoder() es la encargada configurar cada una de las salidas que queramos utilizar y al final, con un bucle for, pone el pines de salida como OUTPUT con pinMode:
Lectura de señal DCC:
Si seguimos bajando lineas en el archivo, llegamos a la función encargada de devolver los datos "traducidos" por la librería:
Esta función se activa mediante interrupción. Una interrupción, a groso modo, es un pin del microcontrolador que cuando reciba una señal, dejara cualquier tarea que este haciendo y hará lo que le hayamos especificado. Sabiendo esto, la interrupción la maneja la librería.
Configurar el setup():
El tema de la interrupción lo comentaré al final ya que hay debido al tiempo que hace que no se actualiza la librería creo que hay cosas que se podrían mejorar. Por el momento seguiremos con el ejemplo el setup completo, donde activamos la comunicación serial y llamamos a la configuración de las salidas del decodificador con ConfigureDecoder().
Función loop():
En el loop() principal será donde se llama a DCC.loop() que es la función loop de la librería DCC_Decoder.
Si bien el programa de ejemplo nos da para los accesorios básicos como luces, desvíos con un sistema que permita funcionar con un 1 o un 0. Bueno para mi, esto no fue suficiente así que añadí algunas partes para poder controlar servos.
Modificaciones DCC Decoder:
Esta modificación incluye la librería Servo.h además de incluir los archivos en los que tengo definidos los desvíos y accesorios. Esto esta mejor explicado en la entrada de esta página llamada Organizar elementos DCC en Arduino
Esto hace que también haya cambios ya que hay nuevos parámetros relacionados con los servos en la estructura de datos como set_point o angulo: