diff --git a/examples/RS485_HalfDuplex/RS485_HalfDuplex.ino b/examples/RS485_HalfDuplex/RS485_HalfDuplex.ino
new file mode 100644
index 0000000..e11d3ef
--- /dev/null
+++ b/examples/RS485_HalfDuplex/RS485_HalfDuplex.ino
@@ -0,0 +1,96 @@
+/*
+
+ RS485_HalfDuplex.pde - example using ModbusMaster library
+
+ This example is tested against an EPSolar LS2024B solar charge controller.
+ See here for protocol specs:
+ http://www.solar-elektro.cz/data/dokumenty/1733_modbus_protocol.pdf
+
+ This file is part of ModbusMaster.
+
+ ModbusMaster is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ ModbusMaster is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with ModbusMaster. If not, see .
+
+ Written by Marius Kintel
+
+*/
+#include
+
+/*!
+ We're using a MAX485-compatible RS485 Transceiver.
+ Rx/Tx is hooked up to the hardware serial port at 'Serial'.
+ The Data Enable and Receiver Enable pins are hooked up as follows:
+*/
+#define MAX485_DE 3
+#define MAX485_RE_NEG 2
+
+// instantiate ModbusMaster object
+ModbusMaster node;
+
+void preTransmission()
+{
+ digitalWrite(MAX485_RE_NEG, 1);
+ digitalWrite(MAX485_DE, 1);
+}
+
+void postTransmission()
+{
+ digitalWrite(MAX485_RE_NEG, 0);
+ digitalWrite(MAX485_DE, 0);
+}
+
+void setup()
+{
+ pinMode(MAX485_RE_NEG, OUTPUT);
+ pinMode(MAX485_DE, OUTPUT);
+ // Init in receive mode
+ digitalWrite(MAX485_RE_NEG, 0);
+ digitalWrite(MAX485_DE, 0);
+
+ // Modbus communication runs at 115200 baud
+ Serial.begin(115200);
+
+ // Modbus slave ID 1
+ node.begin(1, Serial);
+ // Callbacks allow us to configure the RS485 transceiver correctly
+ node.preTransmission(preTransmission);
+ node.postTransmission(postTransmission);
+}
+
+bool state = true;
+
+void loop()
+{
+ uint8_t result;
+ uint16_t data[6];
+
+ // Toggle the coil at address 0x0002 (Manual Load Control)
+ result = node.writeSingleCoil(0x0002, state);
+ state = !state;
+
+ // Read 16 registers starting at 0x3100)
+ result = node.readInputRegisters(0x3100, 16);
+ if (result == node.ku8MBSuccess)
+ {
+ Serial.print("Vbatt: ");
+ Serial.println(node.getResponseBuffer(0x04)/100.0f);
+ Serial.print("Vload: ");
+ Serial.println(node.getResponseBuffer(0xC0)/100.0f);
+ Serial.print("Pload: ");
+ Serial.println((node.getResponseBuffer(0x0D) +
+ node.getResponseBuffer(0x0E) << 16)/100.0f);
+ }
+
+ delay(1000);
+}
+