2016-11-30 06:55:37 +01:00
|
|
|
#include "pxt.h"
|
2016-04-02 07:00:42 +02:00
|
|
|
|
2016-10-19 06:36:42 +02:00
|
|
|
enum SerialPin {
|
2017-02-06 22:48:27 +01:00
|
|
|
C16 = MICROBIT_ID_IO_P2,
|
|
|
|
C17 = MICROBIT_ID_IO_P8,
|
|
|
|
P0 = MICROBIT_ID_IO_P12,
|
|
|
|
P1 = MICROBIT_ID_IO_P0,
|
|
|
|
P2 = MICROBIT_ID_IO_P1,
|
|
|
|
P3 = MICROBIT_ID_IO_P16,
|
2016-05-26 20:07:09 +02:00
|
|
|
};
|
|
|
|
|
2016-10-19 06:36:42 +02:00
|
|
|
enum BaudRate {
|
2016-05-26 20:07:09 +02:00
|
|
|
//% block=115200
|
|
|
|
BaudRate115200 = 115200,
|
|
|
|
//% block=9600
|
|
|
|
BaudRate9600 = 9600
|
|
|
|
};
|
|
|
|
|
2016-10-19 06:36:42 +02:00
|
|
|
enum Delimiters {
|
|
|
|
//% block="new line"
|
|
|
|
NewLine = 1,
|
|
|
|
//% block=","
|
|
|
|
Comma = 2,
|
|
|
|
//% block="$"
|
|
|
|
Dollar = 3,
|
|
|
|
//% block=":"
|
|
|
|
Colon = 4,
|
|
|
|
//% block="."
|
|
|
|
Fullstop = 5,
|
|
|
|
//% block="#"
|
|
|
|
Hash = 6,
|
|
|
|
};
|
|
|
|
|
2016-04-02 07:00:42 +02:00
|
|
|
//% weight=2 color=30
|
2016-10-11 22:48:25 +02:00
|
|
|
//% advanced=true
|
2016-04-02 07:00:42 +02:00
|
|
|
namespace serial {
|
|
|
|
// note that at least one // followed by % is needed per declaration!
|
2016-10-11 22:48:25 +02:00
|
|
|
|
2016-04-02 07:00:42 +02:00
|
|
|
/**
|
2016-10-19 06:36:42 +02:00
|
|
|
* Reads a line of text from the serial port and returns the buffer when the delimiter is met.
|
|
|
|
* @param delimiter text delimiter that separates each text chunk
|
2016-04-02 07:00:42 +02:00
|
|
|
*/
|
2016-10-19 06:36:42 +02:00
|
|
|
//% help=serial/read-until
|
|
|
|
//% blockId=serial_read_until block="serial|read until %delimiter=serial_delimiter_conv"
|
|
|
|
//% weight=19
|
|
|
|
StringData* readUntil(StringData* delimiter) {
|
|
|
|
return uBit.serial.readUntil(ManagedString(delimiter)).leakData();
|
2016-04-02 07:00:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2017-01-10 19:26:44 +01:00
|
|
|
* Reads the buffered received data as a string
|
|
|
|
*/
|
|
|
|
//% blockId=serial_read_buffer block="serial|read string"
|
|
|
|
//% weight=18
|
|
|
|
StringData* readString() {
|
|
|
|
int n = uBit.serial.getRxBufferSize();
|
|
|
|
if (n == 0) return ManagedString("").leakData();
|
|
|
|
return ManagedString(uBit.serial.read(n, MicroBitSerialMode::ASYNC)).leakData();
|
2016-04-02 07:00:42 +02:00
|
|
|
}
|
2016-10-11 22:48:25 +02:00
|
|
|
|
2016-05-17 18:36:01 +02:00
|
|
|
/**
|
2017-01-10 19:26:44 +01:00
|
|
|
* Registers an event to be fired when one of the delimiter is matched.
|
|
|
|
* @param delimiters the characters to match received characters against.
|
2016-05-17 18:36:01 +02:00
|
|
|
*/
|
2017-01-10 19:26:44 +01:00
|
|
|
//% help=serial/on-data-received
|
|
|
|
//% weight=18 blockId=serial_on_data_received block="serial|on data received %delimiters=serial_delimiter_conv"
|
2016-05-17 18:36:01 +02:00
|
|
|
void onDataReceived(StringData* delimiters, Action body) {
|
|
|
|
uBit.serial.eventOn(ManagedString(delimiters));
|
|
|
|
registerWithDal(MICROBIT_ID_SERIAL, MICROBIT_SERIAL_EVT_DELIM_MATCH, body);
|
2017-01-10 19:26:44 +01:00
|
|
|
// lazy initialization of serial buffers
|
|
|
|
uBit.serial.read(MicroBitSerialMode::ASYNC);
|
2016-05-17 18:36:01 +02:00
|
|
|
}
|
2016-10-11 22:48:25 +02:00
|
|
|
|
2016-10-19 06:36:42 +02:00
|
|
|
/**
|
|
|
|
* Sends a piece of text through Serial connection.
|
|
|
|
*/
|
|
|
|
//% help=serial/write-string
|
|
|
|
//% weight=87
|
|
|
|
//% blockId=serial_writestring block="serial|write string %text"
|
|
|
|
void writeString(StringData *text) {
|
|
|
|
uBit.serial.send(ManagedString(text));
|
|
|
|
}
|
|
|
|
|
2016-05-26 20:07:09 +02:00
|
|
|
/**
|
|
|
|
* Dynamically configuring the serial instance to use pins other than USBTX and USBRX.
|
|
|
|
* @param tx the new transmission pins
|
|
|
|
* @param rx the new reception pin
|
|
|
|
* @param baud the new baud rate. eg: 115200
|
|
|
|
*/
|
|
|
|
//% weight=10
|
2016-07-20 07:21:15 +02:00
|
|
|
//% help=serial/redirect-to
|
2016-10-19 06:36:42 +02:00
|
|
|
//% blockId=serial_redirect block="serial|redirect to|TX %tx|RX %rx|at baud rate %rate"
|
2016-05-26 20:07:09 +02:00
|
|
|
//% blockExternalInputs=1
|
|
|
|
void redirect(SerialPin tx, SerialPin rx, BaudRate rate) {
|
|
|
|
uBit.serial.redirect((PinName)tx, (PinName)rx);
|
|
|
|
uBit.serial.baud((int)rate);
|
|
|
|
}
|
2016-07-20 07:21:15 +02:00
|
|
|
}
|