diff --git a/Auto485.cpp b/Auto485.cpp index 53c86be..fff3f1a 100644 --- a/Auto485.cpp +++ b/Auto485.cpp @@ -29,12 +29,18 @@ Auto485::Auto485(int DE_pin, int RE_pin, HardwareSerial &serial_port) : _DE_pin(DE_pin) , _RE_pin(RE_pin == -1 ? DE_pin : RE_pin) -, _serial(serial_port) +, _pins_initialized(false) , _mode(RX) +, _serial(serial_port) +{ +} + +void Auto485::init_pins(void) { pinMode(_DE_pin, OUTPUT); // defaults to LOW = read mode if (_DE_pin != _RE_pin) pinMode(_RE_pin, OUTPUT); // defaults to LOW = read mode + _pins_initialized = true; } void Auto485::set_mode(enum Mode mode) @@ -50,11 +56,15 @@ void Auto485::set_mode(enum Mode mode) void Auto485::begin(unsigned long baud) { + if (!_pins_initialized) + init_pins(); _serial.begin(baud); } void Auto485::begin(unsigned long baud, uint8_t config) { + if (!_pins_initialized) + init_pins(); _serial.begin(baud, config); } diff --git a/Auto485.h b/Auto485.h index 110af8a..e5823a1 100644 --- a/Auto485.h +++ b/Auto485.h @@ -63,8 +63,10 @@ class Auto485 : public Stream using Print::println; private: + void init_pins(void); int _DE_pin; int _RE_pin; + bool _pins_initialized; enum Mode _mode; HardwareSerial& _serial; };