Class SoftwareSerial
Description
Defines a class of software serial implementation for Ameba.
Syntax
class SoftwareSerial
Members
Public Constructors |
|
---|---|
SoftwareSerial::SoftwareSerial |
Constructs a SoftwareSerial object |
Public Methods |
|
---|---|
SoftwareSerial::begin |
Sets the speed (baud rate) for the serial communication |
SoftwareSerial::listen |
Enables the selected software serial port to listen |
SoftwareSerial::end |
Same as stopListening |
SoftwareSerial::stopListening |
Stop listening on the port |
SoftwareSerial::peek |
Return a character that was received on the RX pin of the software serial port |
SoftwareSerial::write |
Prints data to the transmit pin of the software serial port as raw bytes |
SoftwareSerial::read |
Return a character that was received on the RX pin of the software serial port |
SoftwareSerial::available |
Get the number of bytes (characters) available for reading from a software serial port |
SoftwareSerial::flush |
Flush the received buffer |
SoftwareSerial::setBufferSize |
Set buffer size |
Soft wareSerial::setAvailableCallback |
Set available callback |
SoftwareSerial::handle_interrupt |
Private methods handles interrupt |
- SoftwareSerial::SoftwareSerial
Description
Constructs a SoftwareSerial object and sets RX and TX pin, and inverse logic.
Syntax
SoftwareSerial::SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic /* = false */)
Parameters
receivePin
: the pin on which to receive serial data
transmitPin
: the pin on which to transmit serial data
inverse_logic
: is used to invert the sense of incoming bits
Returns
The function returns nothing.
Example Code
Example: SoftwareSerialExample
The example demonstrates a software serial test, it receives from serial RX and sends it to serial TX.
/*
The circuit: (BOARD RTL8195A)
* RX is digital pin 0 (connect to TX of other devices)
* TX is digital pin 1 (connect to RX of other devices)
*/
#include "SoftwareSerial.h"
#if defined(BOARD_RTL8195A)
SoftwareSerial mySerial(0, 1); // RX, TX
#elif defined(BOARD_RTL8710)
SoftwareSerial mySerial(17, 5); // RX, TX
#else
SoftwareSerial mySerial(0, 1); // RX, TX
#endif
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(57600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(4800);
mySerial.println("Hello, world?");
}
void loop() { // run over and over
if (mySerial.available()) {
mySerial.write(mySerial.read());
}
}
Notes and Warnings
Software Serial is using hardware serial thus DO NOT change the default pins
- SoftwareSerial::begin
Description
Sets the speed (baud rate) for the serial communication
Syntax
void SoftwareSerial::begin(long speed)
void SoftwareSerial::begin(long speed, int data_bits, int parity, int stop_bits)
void SoftwareSerial::begin(long speed, int data_bits, int parity, int stop_bits, int flowctrl, int rtsPin, int ctsPin)
Parameters
speed
: the baud rate
data_bits
: number of data bits, 8 bits(default) or 7 bits
stop_bits
: number of stop bits, 1 bit(default), 1.5 bits or 2 bits
flowctrl
: flow control pin
rtsPin
: request to send pin
ctsPin
: clear to send pin
Returns
The function returns nothing.
Example Code
Example: SoftwareSerialExample
The example demonstrates a software serial test, it receives from serial RX and sends it to serial TX. Details of the code can be found in the previous section of SoftwareSerial_Basic:: SoftwareSerial.
Notes and Warnings
NA
- SoftwareSerial::listen
Description
Enables the selected software serial port to listen
Syntax
bool SoftwareSerial::listen(void)
Parameters
The function requires no input parameter.
Returns
Returns true if it replaces another
Example Code
NA
Notes and Warnings
NA
- SoftwareSerial::end
Description
Same as stopListening
Syntax
void SoftwareSerial::end(void)
Parameters
The function requires no input parameter.
Returns
The function returns nothing.
Example Code
NA
Notes and Warnings
NA
SoftwareSerial::isListening
Description
Tests to see if requested software serial port is actively listening
Syntax
bool SoftwareSerial::isListening(void)
Parameters
The function requires no input parameter.
Returns
The function returns “True” if the port is listening.
Example Code
NA
Notes and Warnings
NA
- SoftwareSerial::stopListening
Description
Stop listening on the port
Syntax
bool SoftwareSerial::stopListening(void)
Parameters
The function requires no input parameter.
Returns
The function returns “True” if listening on the port is stopped.
Example Code
NA
Notes and Warnings
NA
- SoftwareSerial::peek
Description
Return a character that was received on the RX pin of the software serial port
Syntax
int SoftwareSerial::peek(void)
Parameters
The function requires no input parameter.
Returns
The function returns the character read, or returns “-1” if none is
available.
Example Code
NA
Notes and Warnings
NA
- SoftwareSerial::write
Description
Prints data to the transmit pin of the software serial port as raw bytes
Syntax
size_t SoftwareSerial::write(uint8_t b)
Parameters
b
: byte to be written
Returns
The function returns the number of bytes written.
Example Code
Example: SoftwareSerialExample
The example demonstrates a software serial test, it receives from serial RX and sends it to serial TX. Details of the code can be found in the previous section of SoftwareSerial:: SoftwareSerial.
Notes and Warnings
NA
- SoftwareSerial::read
Description
Return a character that was received on the RX pin of the software serial port
Syntax
int SoftwareSerial::read(void)
Parameters
The function requires no input parameter.
Returns
The function returns the character read, or -1 if none is available.
Example Code
Example: SoftwareSerialExample
The example demonstrates a software serial test, it receives from serial RX and sends it to serial TX. Details of the code can be found in the previous section of SoftwareSerial:: SoftwareSerial.
Notes and Warnings
NA
- SoftwareSerial::available
Description
Get the number of bytes available for reading from a software serial
port
Syntax
int SoftwareSerial::available(void)
Parameters
The function requires no input parameter.
Returns
The function returns the number of bytes available to read.
Example Code
Example: SoftwareSerialExample
The example demonstrates a software serial test, it receives from serial RX and sends it to serial TX. Details of the code can be found in the previous section of SoftwareSerial:: SoftwareSerial.
Notes and Warnings
NA
- SoftwareSerial::flush
Description
Flush the received buffer
Syntax
void SoftwareSerial::flush(void)
Parameters
The function requires no input parameter.
Returns
The function returns nothing.
Example Code
NA
Notes and Warnings
NA
- SoftwareSerial::setBufferSize
Description
Set buffer size
Syntax
void SoftwareSerial::setBufferSize(uint32_t buffer_size)
Parameters
buffer_size
: the size of the serial buffer
Returns
The function returns nothing.
Example Code
NA
Notes and Warnings
NA
- SoftwareSerial::setAvailableCallback
Description
Set available callback
Syntax
void SoftwareSerial::setAvailableCallback(void (*callback)(char c))
Parameters
*callback
: user-defined serial callback function
Returns
The function returns nothing.
Example Code
Example: SoftwareSerialIrqCallback
This example demonstrates the software serial testing using IRQ callback and semaphore. Set callback function “mySerialCalback” to software serial. Whenever there is data comes in, “mySerialCallback” is invoked. In this sketch, it does nothing until the end of the line. And then it sends a semaphore. The loop() uses a non-busy loop to wait for the semaphore. To test this sketch, you need to type something on software serial and then press Enter.
/*
The circuit: (BOARD RTL8195A)
RX is digital pin 0 (connect to TX of other devices)
TX is digital pin 1 (connect to RX of other devices)
*/
#include "SoftwareSerial.h"
#if defined(BOARD_RTL8195A)
SoftwareSerial mySerial(0, 1); // RX, TX
#elif defined(BOARD_RTL8710)
SoftwareSerial mySerial(17, 5); // RX, TX
#else
SoftwareSerial mySerial(0, 1); // RX, TX
#endif
uint32_t semaID;
// The callback is hooking at UART IRQ handler and please don't do heavy task here.
void mySerialCallback(char c)
{
/* The parameter c is only for peeking. The actual data is
* still in the buffer of SoftwareSerial.
*/
if (c == '\r' || c == '\n') {
os_semaphore_release(semaID);
}
}
void setup() {
// use 1 count for binary semaphore
semaID = os_semaphore_create(1);
// There is a token in the semaphore, clear it.
os_semaphore_wait(semaID, 0xFFFFFFFF);
// set the data rate for the SoftwareSerial port
mySerial.begin(38400);
mySerial.setAvailableCallback(mySerialCallback);
}
void loop() { // run over and over
// wait semaphore for 5s timeout
if (os_semaphore_wait(semaID, 5 * 1000)) {
// we got data before timeout
while(mySerial.available()) {
mySerial.print((char)mySerial.read());
}
mySerial.println();
} else {
mySerial.println("No data comes in.");
}
}
Notes and Warnings
NA
- SoftwareSerial::handle_interrupt
Description
A private method handles the interrupt
Syntax
void handle_interrupt(uint32_t id, uint32_t event)
Parameters
id
: the interupt id
event
: interrupt event
Returns
The function returns nothing.
Example Code
NA
Notes and Warnings
NA