M-Duino RS-485
Serial Communication Standard
RS-485 also known as TIA-485(-A), EIA-485, is a standard defining the electrical characteristics of drivers and receivers for use in serial communications systems. Electrical signaling is balanced, and multipoint systems are supported.
Our Arduino Based PLCs incorporate the integrated circuit MAX485.
MAX485 is a low-power and slew-rate-limited transceiver used for RS-485 communication. It works at a single +5V power supply and the rated current is 300 μA. Adopting half-duplex communication to implement the function of converting TTL level into RS-485 level, it can achieve a maximum transmission rate of 2.5Mbps. MAX485 transceiver draws supply current of between 120μA and 500μA under the unloaded or fully loaded conditions when the driver is disabled.
There is internally installed a half duplex MAX485 and MAX485 transmitter. If you are working on full duplex you will use the MAX485 half duplex to receive data and MAX485 transmitter to send the data.

MAX485 pin configuration and Typical Operating Circuit
Hardware
Check the M-Duino Family products now!
IMPORTANT: Make sure that your Ethernet PLC is powered (12-24Vdc).
Switch configuration
For the RS-485 communication protocol there is only one switch that affects in this communication. The RS-485 protocol will be always enabled, the only switch that affects is the one called "FD rs-485 HD". This switch makes the choosing between RS-485 Half Duplex or RS-485 Full Duplex (RS-422).
Switch configuration
"FD rs-485 HD" ON | "FD rs-485 HD" OFF |
Half Duplex | Full Duplex |
Used pins
For RS-485 communication protocol the defined Arduino Mega pins are showed in the chart below:
FUNCTION (MAX485) | ARDUINO MEGA PIN |
DI (TX) | 14 (TX Serial3) |
RO (RX) | 15 (RX Serial3) |
RE (Inverted logic) | 11 |
DE | 46 |
You can access easily to RS-485 pins in our Ethernet PLCs, you can see their position in the following image:

Connections
Connections will be different depending on whether we want to use RS-485 in half-duplex or full-duplex.
To do the full duplex test you must connect the A, B (receivers) to the Y, X(transmitters). For half duplex you must connect with another device with RS-485 and select if you want to transmit or receive data by Software (shown below).
Software
IMPORTANT: Make sure to download the Arduino based PLC boards for Arduino IDE.
Software Configuration:
Once the hardware configuration is done, it's possible to proceed with the software configuration and also its usage. Firstable it's necessary to include the RS485.h library provided in our boards.
Connections will be different depending on whether we want to use RS-485 in half-duplex or full-duplex.
To do the full duplex test you must connect the A, B (receivers) to the Y, X(transmitters). For half duplex you must connect with another device with RS-485 and select if you want to transmit or receive data by Software (shown below).
IMPORTANT: Make sure to download the Arduino based PLC boards for Arduino IDE.
Software Configuration:
Once the hardware configuration is done, it's possible to proceed with the software configuration and also its usage. Firstable it's necessary to include the RS485.h library provided in our boards.
#include <RS485.h>
Serial.begin(9600);
Then don’t forget to implement the proper initialization of your communication on the setup() function
RS485.begin(38400);
NOTE: Check the velocity of transmission between the PLC and the Laptop and from the PLC to the device connected by RS-485.
RS-485 Library - Functions
* Remember that all the devices have to communicate at the same baudrate.
RS485.begin(baud); //sets the baud rate for RS485 data transmision RS485.read(); //reads incoming RS485 data RS485.write(byteToSend); //write binary data to RS485 port RS485.write(dataToSend, dataLength); //write binary data to RS485 port RS485.available() //returns the number of bytes available for reading on RS485 port
This is all it’s necessary to know to use RS-485 on Industrial Shields equipments. Finally it is showed an example using RS-485.
Example Codes
Basic RS-485 write example (send):
// Include Industrial Shields libraries #include <RS485.h> //// IMPORTANT: check switches configuration //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { // Begin serial port Serial.begin(9600); // Begin RS485 port RS485.begin(38400); } //////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { // Wait bytes in the serial port if (Serial.available()) { byte tx = Serial.read(); // Echo the byte to the serial port again Serial.write(tx); // And send it to the RS-485 port RS485.write(tx); } }
Basic RS-485 read example (receive):
// Include Industrial Shields libraries #include <RS485.h> //// IMPORTANT: check switches configuration //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { // Begin serial port Serial.begin(9600); // Begin RS485 port RS485.begin(38400); } //////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { // Print received byte when available if (RS485.available()) { byte rx = RS485.read(); // Hexadecimal representation Serial.print("HEX: "); Serial.print(rx, HEX); // Decimal representation Serial.print(", DEC: "); Serial.println(rx, DEC); } }
Basic RS-485 full-duplex example:
* Remember that to do the full duplex test you must connect the A, B (receivers) to the Y, X(transmitters).
// Include Industrial Shields libraries
#include <RS485.h>
//// IMPORTANT: check switches configuration
//// IMPORTANT: Full duplex mode is only available when device supports it
////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
// Begin serial port
Serial.begin(9600);
// Begin RS485 port
RS485.begin(38400, FULLDUPLEX);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
// Wait bytes in the serial port
if (Serial.available()) {
byte tx = Serial.read();
// In full-duplex mode it is possible to send and receive data
// at the same time in a secure way
RS485.write(tx);
}
if (RS485.available()){
byte var=RS485.read();
Serial.print("RX:");
Serial.write(var);
Serial.println();
}
}