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 queda un 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...
}
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 de nuestros decodificadores DCC así no tenemos que estar recordando cual es el Id de cada uno de los accesorios.
Saludos!!!