2016-04-06 00:59:25 +02:00
|
|
|
/**
|
|
|
|
* Reading and writing data over a serial connection.
|
|
|
|
*/
|
2017-01-05 16:01:50 +01:00
|
|
|
//% weight=2 color=#002050 icon="\uf287"
|
2016-10-11 22:48:25 +02:00
|
|
|
//% advanced=true
|
2016-03-10 23:01:04 +01:00
|
|
|
namespace serial {
|
|
|
|
/**
|
|
|
|
* Prints a line of text to the serial
|
|
|
|
* @param value to send over serial
|
|
|
|
*/
|
2016-05-17 18:36:01 +02:00
|
|
|
//% weight=90
|
|
|
|
//% help=serial/write-line blockGap=8
|
2016-04-26 19:29:05 +02:00
|
|
|
//% blockId=serial_writeline block="serial|write line %text"
|
2016-03-10 23:01:04 +01:00
|
|
|
export function writeLine(text: string): void {
|
2018-02-25 18:15:15 +01:00
|
|
|
if (!text) text = "";
|
|
|
|
// pad data to the 32 byte boundary
|
|
|
|
// to ensure apps receive the packet
|
|
|
|
let r = (32 - (text.length + 2) % 32) % 32;
|
|
|
|
serial.writeString(text);
|
|
|
|
for (let i = 0; i < r; ++i)
|
|
|
|
serial.writeString(" ");
|
|
|
|
serial.writeString("\r\n");
|
2016-03-10 23:01:04 +01:00
|
|
|
}
|
|
|
|
|
2016-04-16 01:40:51 +02:00
|
|
|
/**
|
|
|
|
* Prints a numeric value to the serial
|
|
|
|
*/
|
2016-05-17 18:36:01 +02:00
|
|
|
//% help=serial/write-number
|
|
|
|
//% weight=89 blockGap=8
|
2016-04-26 19:29:05 +02:00
|
|
|
//% blockId=serial_writenumber block="serial|write number %value"
|
2016-04-16 01:40:51 +02:00
|
|
|
export function writeNumber(value: number): void {
|
|
|
|
writeString(value.toString());
|
|
|
|
}
|
|
|
|
|
2016-03-10 23:01:04 +01:00
|
|
|
/**
|
|
|
|
* Writes a ``name: value`` pair line to the serial.
|
|
|
|
* @param name name of the value stream, eg: x
|
|
|
|
* @param value to write
|
|
|
|
*/
|
2016-05-17 18:36:01 +02:00
|
|
|
//% weight=88 blockGap=8
|
2016-04-22 21:37:47 +02:00
|
|
|
//% help=serial/write-value
|
2016-05-17 18:36:01 +02:00
|
|
|
//% blockId=serial_writevalue block="serial|write value %name|= %value"
|
2016-03-10 23:01:04 +01:00
|
|
|
export function writeValue(name: string, value: number): void {
|
2018-02-25 18:15:15 +01:00
|
|
|
writeLine(name + ":" + value);
|
2016-03-10 23:01:04 +01:00
|
|
|
}
|
2016-05-17 18:36:01 +02:00
|
|
|
|
|
|
|
/**
|
2017-01-10 19:26:44 +01:00
|
|
|
* Reads a line of text from the serial port.
|
|
|
|
*/
|
|
|
|
//% help=serial/read-line
|
|
|
|
//% blockId=serial_read_line block="serial|read line"
|
|
|
|
//% weight=20 blockGap=8
|
|
|
|
export function readLine(): string {
|
|
|
|
return serial.readUntil(delimiters(Delimiters.NewLine));
|
2016-05-17 18:36:01 +02:00
|
|
|
}
|
2016-10-19 06:36:42 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the delimiter corresponding string
|
|
|
|
*/
|
|
|
|
//% blockId="serial_delimiter_conv" block="%del"
|
2017-01-10 19:26:44 +01:00
|
|
|
//% weight=1 blockHidden=true
|
2016-10-19 06:36:42 +02:00
|
|
|
export function delimiters(del: Delimiters): string {
|
|
|
|
// even though it might not look like, this is more
|
|
|
|
// (memory) efficient than the C++ implementation, because the
|
|
|
|
// strings are statically allocated and take no RAM
|
|
|
|
switch (del) {
|
|
|
|
case Delimiters.NewLine: return "\n"
|
|
|
|
case Delimiters.Comma: return ","
|
|
|
|
case Delimiters.Dollar: return "$"
|
|
|
|
case Delimiters.Colon: return ":"
|
|
|
|
case Delimiters.Fullstop: return "."
|
|
|
|
case Delimiters.Hash: return "#"
|
|
|
|
default: return "\n"
|
|
|
|
}
|
|
|
|
}
|
2016-03-10 23:01:04 +01:00
|
|
|
}
|