Serial gateway using Arduino Mega, how to set what serial to use ?
-
I am trying to build a serial <-> RS485 gateway using an Arduino Mega 2560 R3.
I would like to use the Mega's 4 hardware serial interfaces as follows :
Serial0 -> debug output (and programming) - This is the USB serial
Serial1 -> Serial interface of the gateway to the Domoticz Controller
Serial2 -> RS485 MySensors bus interface to the sensors nodes (using a MAX485 with direction connected to D2)Digging through the various library files and examples, I have found settings to configure the hardware serial to use for the RS485 interface : #define MY_RS485_HWSERIAL Serial2
The setting does not turn green in the arduini IDE like the other defines, but it seems to be accepted if I try to compile the sketch.
Until however, I have not bee able to find how I can setup the use of hardware serial 0 for debug output and hardware serial 1 as RS232 side of the serial gateway.
Is this even possible ?
Current settings so far :
#define MY_GATEWAY_SERIAL // Enable serial gateway #define MY_BAUD_RATE 115200 // Set RS232 baud rate to Controller #define MY_DEBUG // Enable debug prints to serial monitor #define MY_RS485 // Enable RS485 transport layer #define MY_RS485_HWSERIAL Serial2 // Use hardware serial port 2 for RS485 #define MY_RS485_DE_PIN 2 // Use D2 as DE-pin for RS485 #define MY_RS485_BAUD_RATE 9600 // Set RS485 baud rate to use #define MY_LEDS_BLINKING_FEATURE // Flash leds on rx/tx/err #define MY_DEFAULT_LED_BLINK_PERIOD 300 // Set blinking period #define MY_DEFAULT_RX_LED_PIN 4 // Receive led pin #define MY_DEFAULT_TX_LED_PIN 5 // the PCB, on board LED #define MY_DEFAULT_ERR_LED_PIN 6 // Error led pin #include <MySensors.h>
-
Realy ? nobody ?
-
On my Arduino Mega works for me this:
// Enable debug prints to serial monitor //#define MY_DEBUG //#define MY_DEBUG_HWSERIAL Serial // = Serial0 / Rx0 & Tx0 to programming & debug // Enable serial gateway #define MY_GATEWAY_SERIAL #define MY_SERIALDEVICE Serial3 // Rx3 & Tx3 to Gateway // Enable RS485 transport layer #define MY_RS485 #define MY_RS485_HWSERIAL Serial1 // Rx1 & Tx1 to RS485 network #define MY_RS485_BAUD_RATE 9600 #define MY_RS485_DE_PIN 22
I tried to edit a library MyHwAVR.cpp for MY_DEBUG_HWSERIAL, but without any positive result.:
#ifdef MY_DEBUG #ifndef MY_DEBUG_HWSERIAL #define MY_DEBUG_HWSERIAL MY_SERIALDEVICE #endif void hwDebugPrint(const char *fmt, ... ) { char fmtBuffer[MY_SERIAL_OUTPUT_SIZE]; #ifdef MY_GATEWAY_FEATURE // prepend debug message to be handled correctly by controller (C_INTERNAL, I_LOG_MESSAGE) snprintf_P(fmtBuffer, sizeof(fmtBuffer), PSTR("0;255;%d;0;%d;"), C_INTERNAL, I_LOG_MESSAGE); MY_DEBUG_HWSERIAL.print(fmtBuffer); #else // prepend timestamp (AVR nodes) MY_DEBUG_HWSERIAL.print(hwMillis()); MY_DEBUG_HWSERIAL.print(" "); #endif va_list args; va_start (args, fmt ); #ifdef MY_GATEWAY_FEATURE // Truncate message if this is gateway node vsnprintf_P(fmtBuffer, sizeof(fmtBuffer), fmt, args); fmtBuffer[sizeof(fmtBuffer) - 2] = '\n'; fmtBuffer[sizeof(fmtBuffer) - 1] = '\0'; #else vsnprintf_P(fmtBuffer, sizeof(fmtBuffer), fmt, args); #endif va_end (args); MY_DEBUG_HWSERIAL.print(fmtBuffer); MY_DEBUG_HWSERIAL.flush(); //MY_DEBUG_HWSERIAL.write(freeRam()); } #endif
The code above does not work!
-
Ah that My_Serialdevice setting is something i completely missed..will test that this weekend..
i am fine with the debug going to the usb port.. it's just that i can leave the usb to my pc for programming and debugging while another serial is connected to the raspberry pi running domoticz for the mysensors gateway part.
-
Tried ir, but no change.. Serial0 was still used while serial1was defined