Skip to content

Commit 2e51c13

Browse files
committed
Swap DE and RE pin order, make both optional, add default TX pin for non-SAMD
1 parent b3b6cd5 commit 2e51c13

File tree

2 files changed

+46
-24
lines changed

2 files changed

+46
-24
lines changed

src/RS485.cpp

+37-20
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919

2020
#include "RS485.h"
2121

22-
RS485Class::RS485Class(HardwareSerial& hwSerial, int txPin, int rePin, int dePin) :
22+
RS485Class::RS485Class(HardwareSerial& hwSerial, int txPin, int dePin, int rePin) :
2323
_serial(&hwSerial),
2424
_txPin(txPin),
25-
_rePin(rePin),
2625
_dePin(dePin),
26+
_rePin(rePin),
2727
_transmisionBegun(false)
2828
{
2929
}
@@ -38,11 +38,15 @@ void RS485Class::begin(unsigned long baudrate, uint16_t config)
3838
_baudrate = baudrate;
3939
_config = config;
4040

41-
pinMode(_rePin, OUTPUT);
42-
pinMode(_dePin, OUTPUT);
41+
if (_dePin > -1) {
42+
pinMode(_dePin, OUTPUT);
43+
digitalWrite(_dePin, LOW);
44+
}
4345

44-
digitalWrite(_rePin, HIGH);
45-
digitalWrite(_dePin, LOW);
46+
if (_rePin > -1) {
47+
pinMode(_rePin, OUTPUT);
48+
digitalWrite(_rePin, HIGH);
49+
}
4650

4751
_transmisionBegun = false;
4852

@@ -53,11 +57,15 @@ void RS485Class::end()
5357
{
5458
_serial->end();
5559

56-
digitalWrite(_rePin, LOW);
57-
digitalWrite(_dePin, LOW);
58-
59-
pinMode(_rePin, INPUT);
60-
pinMode(_dePin, INPUT);
60+
if (_rePin > -1) {
61+
digitalWrite(_rePin, LOW);
62+
pinMode(_dePin, INPUT);
63+
}
64+
65+
if (_dePin > -1) {
66+
digitalWrite(_dePin, LOW);
67+
pinMode(_rePin, INPUT);
68+
}
6169
}
6270

6371
int RS485Class::available()
@@ -97,29 +105,38 @@ RS485Class::operator bool()
97105

98106
void RS485Class::beginTransmission()
99107
{
100-
digitalWrite(_dePin, HIGH);
101-
delayMicroseconds(50);
108+
if (_dePin > -1) {
109+
digitalWrite(_dePin, HIGH);
110+
delayMicroseconds(50);
111+
}
102112

103113
_transmisionBegun = true;
104114
}
105115

106116
void RS485Class::endTransmission()
107117
{
108118
_serial->flush();
109-
delayMicroseconds(50);
110-
digitalWrite(_dePin, LOW);
119+
120+
if (_dePin > -1) {
121+
delayMicroseconds(50);
122+
digitalWrite(_dePin, LOW);
123+
}
111124

112125
_transmisionBegun = false;
113126
}
114127

115128
void RS485Class::receive()
116129
{
117-
digitalWrite(_rePin, LOW);
130+
if (_rePin > -1) {
131+
digitalWrite(_rePin, LOW);
132+
}
118133
}
119134

120135
void RS485Class::noReceive()
121136
{
122-
digitalWrite(_rePin, HIGH);
137+
if (_rePin > -1) {
138+
digitalWrite(_rePin, HIGH);
139+
}
123140
}
124141

125142
void RS485Class::sendBreak(unsigned int duration)
@@ -142,11 +159,11 @@ void RS485Class::sendBreakMicroseconds(unsigned int duration)
142159
_serial->begin(_baudrate, _config);
143160
}
144161

145-
void RS485Class::setPins(int txPin, int rePin, int dePin)
162+
void RS485Class::setPins(int txPin, int dePin, int rePin)
146163
{
147164
_txPin = txPin;
148-
_rePin = rePin;
149165
_dePin = dePin;
166+
_rePin = rePin;
150167
}
151168

152-
RS485Class RS485(SERIAL_PORT_HARDWARE, RS485_DEFAULT_TX_PIN, RS845_DEFAULT_RE_PIN, RS845_DEFAULT_DE_PIN);
169+
RS485Class RS485(SERIAL_PORT_HARDWARE, RS485_DEFAULT_TX_PIN, RS845_DEFAULT_DE_PIN, RS845_DEFAULT_RE_PIN);

src/RS485.h

+9-4
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,18 @@
2222

2323
#include <Arduino.h>
2424

25+
#ifdef PIN_SERIAL1_TX
2526
#define RS485_DEFAULT_TX_PIN PIN_SERIAL1_TX
26-
#define RS845_DEFAULT_RE_PIN A5
27+
#else
28+
#define RS485_DEFAULT_TX_PIN 1
29+
#endif
30+
2731
#define RS845_DEFAULT_DE_PIN A6
32+
#define RS845_DEFAULT_RE_PIN A5
2833

2934
class RS485Class : public HardwareSerial {
3035
public:
31-
RS485Class(HardwareSerial& hwSerial, int txPin, int rePin, int dePin);
36+
RS485Class(HardwareSerial& hwSerial, int txPin, int dePin, int rePin);
3237

3338
virtual void begin(unsigned long baudrate);
3439
virtual void begin(unsigned long baudrate, uint16_t config);
@@ -49,13 +54,13 @@ class RS485Class : public HardwareSerial {
4954
void sendBreak(unsigned int duration);
5055
void sendBreakMicroseconds(unsigned int duration);
5156

52-
void setPins(int txPin, int rePin, int dePin);
57+
void setPins(int txPin, int dePin, int rePin);
5358

5459
private:
5560
HardwareSerial* _serial;
5661
int _txPin;
57-
int _rePin;
5862
int _dePin;
63+
int _rePin;
5964

6065
bool _transmisionBegun;
6166
unsigned long _baudrate;

0 commit comments

Comments
 (0)