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 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 CommInterface.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.

Volver

Descargar Librería DCCpp_LMD 2.0.4 (Modificación Oled, S88, Sonido, wifi, Bluetooth, Serial3, teclado y encoder)

Seguiré actualizando!!!