PicoLC Arduino Library
Arduino library for PicoLC hardware
Loading...
Searching...
No Matches
PicoLCSerial.cpp
1#include <Arduino.h>
2#include "PicoLC.h"
3#include "../internal/PicoLCPins.h"
4
5PicoLCSerial::PicoLCSerial() {
6
7}
8
9void PicoLCSerial::begin(uint32_t baud, uint16_t config) {
10 if( !_started ) {
11 pinMode(picolc::pins::CommDE, OUTPUT);
12 digitalWrite(picolc::pins::CommDE, LOW);
13 pinMode(picolc::pins::CommRE, OUTPUT);
14 digitalWrite(picolc::pins::CommRE, HIGH);
15 Serial1.setTX(picolc::pins::CommTX);
16 Serial1.setRX(picolc::pins::CommRX);
17 Serial1.begin(baud, config);
18 _started = true;
19 }
20}
21
23 if( _started ) {
24 Serial1.end();
25 _started = false;
26 }
27}
28
29int PicoLCSerial::available() { return _started ? Serial1.available() : 0; }
30int PicoLCSerial::read() { return _started ? Serial1.read() : -1; }
31int PicoLCSerial::peek() { return _started ? Serial1.peek() : -1; }
32
33size_t PicoLCSerial::write(uint8_t value) {
34 if( _started ) {
35 setTR(true);
36 size_t result = Serial1.write(value);
37 setTR(false);
38 return result;
39 }
40 return 0;
41}
42
43size_t PicoLCSerial::write(const uint8_t* buffer, size_t size) {
44 if( _started ) {
45 setTR(true);
46 size_t result = Serial1.write(buffer, size);
47 setTR(false);
48 return result;
49 }
50 return 0;
51}
52
54 if( _started ) { Serial1.flush(); }
55}
56
57void PicoLCSerial::setTR(bool writing) {
58 if( _started ) {
59 if( writing ) {
60 digitalWrite(picolc::pins::CommRE, LOW);
61 digitalWrite(picolc::pins::CommDE, HIGH);
62 delay(1);
63 } else {
64 delay(1);
65 digitalWrite(picolc::pins::CommDE, LOW);
66 digitalWrite(picolc::pins::CommRE, HIGH);
67 }
68 }
69}
70bool PicoLCSerial::started() const { return _started; }
void begin(uint32_t baud, uint16_t config=SERIAL_8N1)
Initializes the RS-485 UART and transceiver-control pins.
bool started() const
Reports whether the RS-485 interface is initialized.
size_t write(uint8_t byte) override
Transmits one byte over RS-485.
void flush() override
Waits for pending UART transmission to complete.
int available() override
Returns the number of received bytes available to read.
int read() override
Reads the next received byte.
void end()
Releases PicoLC control of the UART and transceiver-control pins.
int peek() override
Returns the next received byte without removing it.