
El primer diseño de esta central, únicamente contaba con comunicación serial para PC, lo cual era maravilloso pero, se notaba un poquito corto en la placa Arduino UNO.
Con la llegada a mis manos de la placa Arduino MEGA, y sus 3 puertos seriales todo cambio. DCCpp LMD hace uso de todos los puertos seriales disponibles pudiendo activar o desactivar los puertos directamente desde el archivo DCCpp.h
Ahora solo necesitaba centralizar todos esos datos en un mismo sitio y repartirlos a todos los dispositivos conectados. En sus versiones tempranas de la DCC-EX vi que habian hecho justo lo que necesitaba. Así que decidi adaptarlo en esta versión con los archivos CommInterface.De esta manera repartimos los comandos ya construidos desde la propia función hasta la función de envío del comando. Voy a poner como ejemplo el comando T para locomotoras:
Antes construiamos el comando en el archivo PacketRegister.cpp:
DCCPP_INTERFACE.print("<T");
DCCPP_INTERFACE.print(nReg); DCCPP_INTERFACE.print(" ");
DCCPP_INTERFACE.print(cab); DCCPP_INTERFACE.print(" ");
DCCPP_INTERFACE.print(tSpeed); DCCPP_INTERFACE.print(" ");
DCCPP_INTERFACE.print(tDirection);
DCCPP_INTERFACE.print(">");
Despues de centralizar en CommInterface.cpp:
CommManager::printf("<T%d %d %d %d>", nReg, cab, tSpeed, tDirection);
Una vez que el comando se envia a printf en CommInterface y desde aquí distribuimos a los diferentes puertos de comunicación.
void CommManager::printf(const char *fmt, ...) {
char buf[128] = {0};
va_list args;
va_start(args, fmt);
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
#ifdef USE_TEXTCOMMAND
DCCPP_INTERFACE.print(buf); //Serial (PC)
#if !defined(USE_ETHERNET)
DCCPP_INTERFACE.println("");
#endif
#endif
#ifdef USE_SERIALWIFI // Serial1
WIFI.print(buf);
#endif
#ifdef USE_SERIALBLUETOOTH // Serial2
BLUETOOTH.print(buf);
#endif
#ifdef USE_SERIALAUX // Serial3
SERIALAUX.print(buf);
#endif
Para cambiar los puertos tenemos que acceder al archivo DCCpp.h y comentar la linea del dispositivo que queramos activar:
#define USE_SERIALWIFI // Serial1
#define USE_SERIALBLUETOOTH // Serial2
#define USE_SERIALAUX // Serial3
De está manera todo queda centralizado en un mismo archivo lo que reduce los sitios donde puede haber algún fallo.
Volver
Descargar Librería DCCpp_LMD 2.0.4 (Modificación Oled, S88, Sonido, wifi, Bluetooth, Serial3, teclado y encoder)
Seguiré actualizando!!!