描述:尽管端口打开,但写入串行端口失败



这里是bonescript,用于通过交换和递增字符来测试BeagleBone black中的串行连接

var b = require('bonescript');
var port1='/dev/ttyO1';
var port2='/dev/ttyO2';
var options={
    baudrate: 9600,
    parity: 'even',
    parser: b.serialParsers.readline("n")
};
console.log(b.serialOpen(port1, options, onSerial1));// open port 1
console.log(b.serialOpen(port2, options, onSerial2));//open port 2
b.serialWrite(port1,'A');//start letter bouncing
function onSerial1(x){
     if (x.event == 'data') {
        console.log(x.data);
        var char =x.data;//get letter
        if(char=='Z')
        char='A';// reset or incremet
        else
        char++;
        b.serialWrite(port2,char);
    }
}
function onSerial2(x){
     if (x.event == 'data') {
        console.log(x.data);
        var char =x.data;
        if(char=='Z')
        char='A';
        else
        char+=1;
        b.serialWrite(port1,char);
    }
}

以下是cloud9中的输出:^

 debugger listening on port 15454
    true
    true
events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: Serialport not open.
    at SerialPort.write (/usr/local/lib/node_modules/bonescript/node_modules/serialport/serialport.js:246:17)
    at Object.exports.wrapCall.newFunction [as serialWrite] (/usr/local/lib/node_modules/bonescript/my.js:198:41)
    at Object.<anonymous> (/var/lib/cloud9/serial/myserial.js:12:3)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain [as _onTimeout] (module.js:497:10)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

正如您可能看到的,serialOpen成功地打开了端口(返回true),但初始写入失败。我想不出什么原因。

当port1第一次向其发送字母A时,可能port2尚未打开。试着在两条线之间做一些延迟

console.log(b.serialOpen(port2, options, onSerial2));//open port 2 b.serialWrite(port1,'A');//start letter bouncing

您可以尝试使用setTimeOut(b.serialWrite(port1,'A'),2000);或者在端口2的事件打开时在端口1上写入。

最新更新