
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 se abrió un nuevo mundo de posibilidades en cuanto a conexión se refiere. DCCpp LMD hace uso de todos los puertos seriales disponibles pudiendo activar o desactivar los puertos directamente desde el archivo DCCpp.h
Ahora solo necesitábamos 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 habían hecho justo lo que necesitaba. Así que decidí 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 construíamos 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(">");
Después de centralizar en el archivoCommInterface.cpp:
CommManager::printf("<T%d %d %d %d>", nReg, cab, tSpeed, tDirection);
Una vez que el comando se envía a printf en CommInterface se distribuye a los diferentes dispositivos conectados (PC, ESP01, HC-06) en los puertos seriales.
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 y amplia la escalabilidad del proyecto.
Página siguiente
Página anterior
Volver al índice
Descargar Librería DCCpp_LMD 2.0.4 (Modificación Oled, S88, Sonido, wifi, Bluetooth, Serial3, teclado y encoder)
Seguiré actualizando!!!