У меня есть простой эскиз Arduino, который выглядит следующим образом (пока не обращайте внимания на задержку блокировки) ...
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
}
void loop() {
Serial.println("Hello world from Ardunio!\n");
delay(5000);
}
Это прекрасно работает, поэтому я создал библиотеку узлов для связи с последовательным портом. ..
import SerialPort from 'serialport';
import parse from 'csv-parse';
const output=[];
const parser = parse({
to_line: 10
});
const port = new SerialPort('/dev/ttyACM0', {
baudRate: 115200
});
port.on('readable', function () {
let record
while (record = port.read()) {
output.push(record.toString());
console.log(`The collection is \n ${JSON.stringify(output)}`);
}
})
port.on('error', function(err) {
console.log('Error: ', err.message);
});
port.on('close', function(){
console.log('The port is closed');
});
port.on('open', err =>{
console.log("The port is opened");
});
Я ожидаю, что это прочитает 10 строк и остановится. Однако, когда он запускается, я вижу такие записи ...
The collection is
["d from Ardunio!\n\r\n"]
The collection is
["d from Ardunio!\n\r\n","Hello world from Ardu"]
The collection is
["d from Ardunio!\n\r\n","Hello world from Ardu","nio!\n\r\n"]
Это, конечно, неправильно, потому что буфер только читает части каждой записи за раз. Каков наилучший способ (библиотека или мой собственный метод) для обработки этих записей и объединения строк до новой строки (или запятой, если несколько столбцов)?