DCCpp LMD CommInterface


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!!!