Organizar elementos DCC en Arduino


Muy buenas a todos!!!

Siempre que planificamos una maqueta, asignamos una referencia a cada elemento que lo compone. De esta manera siempre será más fácil identificarlos en caso de fallo o actualización.

En mi caso, la maqueta se compone de 4 módulos y cada uno tiene su propio Arduino. Cada uno de ellos gestiona elementos comunes como farolas, luces exteriores, luces interiores y elementos propios del módulo como desvíos y semáforos. Al final es una locura.

La solución que he encontrado para no tener que estar recordando los números es crear una librería de accesorios personalizada.

Simplemente creando un archivo llamado "listaAccesorios.h" y otro llamado "listaSensores.h" guardándolos en una carpeta llamada, por ejemplo, "ListaAccesoriosDCC" y situándola en la carpeta de librerías de Arduino.

Este es un ejemplo de como quedaría el archivo "listaAccesorios.h":


// LISTA DE ACCESORIOS: 
 #define EFECTO_SOLDADOR   2
 #define LUCES_EXTERIORES  3
 define LUCES_CASAS       4
 define PASO_NIVEL_M3   5
 define TELEVISOR_M1    6
 define LUCES_TALLER    7
 define LUCES_CARRETERA 8


Y así el archivo "listaSensores.h":


#define SENSORES_MAX 10
#define SENS00         0		// Sensor entrada norte bucle B1
#define SENS01         1		// Interior Bucle
#define SENS02         2		// Salida Bucle
#define SENS03         3		// Taller Bucle
#define SENS04         4		// No definido


Y ahora solo tenemos que hacer la llamada desde el archivo .ino como si de otra librería se tratara:


#include "listaAccesorios.h"
#include "listaDetectores.h"


Otra solución puede ser crear solo un archivo donde estén todas las definiciones y hacer solo una llamada a un archivo, por ejemplo, "listaDCC.h":


#include "listaDCC.h"


Y en su interior ponemos el código:


// Lista de accesorios: 
#define EFECTO_SOLDADOR   2
#define LUCES_EXTERIORES  3
#define LUCES_CASAS       4
#define PASO_NIVEL_M3   5
....

// Lista de Sensores
#define SENSORES_MAX 10
#define SENS00         0        // Sensor entrada norte bucle B1
#define SENS01         1        // Interior Bucle
#define SENS02         2        // Salida Bucle
....


para su uso solo tenemos que escribir la definición en la parte que necesitemos por ejemplo un bucle for:


#include "listaDCC.h"

// Usamos SENSORES_MAX en un bucle for 


for (int i = 0; i < SENSORES_MAX; i++)
{
    // Tu código...
}


Tabla accesorios JMRI

También existe una hoja de calculo que realizaron el equipo de DCC++EX donde además podemos indicar el número de dirección y de subdirección, lo puedes descargar desde este enlace: Tabla de direcciones de accesorio

Bueno es un manera de tener organizados los accesorios y detectores así no tenemos que estar recordando cual es el Id de cada uno.

Saludos!!!