Skip to content

Commit 3a91ebc

Browse files
pnndrafacchinm
authored andcommitted
added support for programmable preamble and postamble time
1 parent 49a3496 commit 3a91ebc

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

src/RS485.cpp

+15-3
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,25 @@ RS485Class::RS485Class(HardwareSerial& hwSerial, int txPin, int dePin, int rePin
3030

3131
void RS485Class::begin(unsigned long baudrate)
3232
{
33-
begin(baudrate, SERIAL_8N1);
33+
begin(baudrate, SERIAL_8N1, RS485_DEFAULT_PRE_DELAY, RS485_DEFAULT_POST_DELAY);
34+
}
35+
36+
void RS485Class::begin(unsigned long baudrate, int predelay, int postdelay)
37+
{
38+
begin(baudrate, SERIAL_8N1, predelay, postdelay);
3439
}
3540

3641
void RS485Class::begin(unsigned long baudrate, uint16_t config)
42+
{
43+
begin(baudrate, config, RS485_DEFAULT_PRE_DELAY, RS485_DEFAULT_POST_DELAY);
44+
}
45+
46+
void RS485Class::begin(unsigned long baudrate, uint16_t config, int predelay, int postdelay)
3747
{
3848
_baudrate = baudrate;
3949
_config = config;
50+
_predelay = predelay;
51+
_postdelay = postdelay;
4052

4153
if (_dePin > -1) {
4254
pinMode(_dePin, OUTPUT);
@@ -107,7 +119,7 @@ void RS485Class::beginTransmission()
107119
{
108120
if (_dePin > -1) {
109121
digitalWrite(_dePin, HIGH);
110-
delayMicroseconds(50);
122+
if (_predelay) delayMicroseconds(_predelay);
111123
}
112124

113125
_transmisionBegun = true;
@@ -118,7 +130,7 @@ void RS485Class::endTransmission()
118130
_serial->flush();
119131

120132
if (_dePin > -1) {
121-
delayMicroseconds(50);
133+
if (_postdelay) delayMicroseconds(_postdelay);
122134
digitalWrite(_dePin, LOW);
123135
}
124136

src/RS485.h

+8
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,18 @@
3636
#define RS485_DEFAULT_RE_PIN A5
3737
#endif
3838

39+
40+
#define RS485_DEFAULT_PRE_DELAY 50
41+
#define RS485_DEFAULT_POST_DELAY 50
42+
3943
class RS485Class : public Stream {
4044
public:
4145
RS485Class(HardwareSerial& hwSerial, int txPin, int dePin, int rePin);
4246

4347
virtual void begin(unsigned long baudrate);
4448
virtual void begin(unsigned long baudrate, uint16_t config);
49+
virtual void begin(unsigned long baudrate, int predelay, int postdelay);
50+
virtual void begin(unsigned long baudrate, uint16_t config, int predelay, int postdelay);
4551
virtual void end();
4652
virtual int available();
4753
virtual int peek();
@@ -66,6 +72,8 @@ class RS485Class : public Stream {
6672
int _txPin;
6773
int _dePin;
6874
int _rePin;
75+
int _predelay = 0;
76+
int _postdelay = 0;
6977

7078
bool _transmisionBegun;
7179
unsigned long _baudrate;

0 commit comments

Comments
 (0)