NODE.js和Javascript;从serialPort获取一行然后关闭

时间:2014-05-13 10:11:25

标签: javascript node.js serial-port raspberry-pi

我尝试在Raspberry PI上执行以下操作

我将Parallax RFID阅读器连接到Raspberry PI的USB插槽。 我可以连接到阅读器,并阅读经过的标签。

我使用以下代码来读取RFID标签。

var serialport = require("serialport");
var SerialPort = serialport.SerialPort;

var serialPort = new SerialPort("/dev/ttyUSB0", {
  baudrate: 2400,
  parser: serialport.parsers.readline("\n")
}, false); // this is the openImmediately flag [default is true]

serialPort.open(function () {
  console.log('open');
  serialPort.on('data', function(data) {
    console.log('data received: ' + data);


  });


});

此代码的结果是一个控制台,可实时显示RFID标签内容。

但是,我希望读者只读取他得到的第一个标签,然后关闭连接。

我该怎么做?串口现在保持打开状态,并不断将数据写入控制台。

----编辑------

使用以下代码,我的连接在单次读取后关闭。但是,data console.log显示一个空变量。我想我需要跳过第一个条目......

// Variables for connecting
var serialport = require("serialport");
var SerialPort = serialport.SerialPort;
// Variable containing technical USB port details
var serialPort = new SerialPort("/dev/ttyUSB0", {
  baudrate: 2400,
  parser: serialport.parsers.readline("\n")
}, false); // this is the openImmediately flag [default is true]


serialPort.open(function () {
  console.log('open');
  serialPort.on('data', function(data) {
    console.log('data received: ' + data);


  });

    serialPort.close(function () {
  console.log('closing');
});
});

1 个答案:

答案 0 :(得分:4)

如果您真的只想阅读一行(如评论中所述),请尝试修改您的代码:

// make connection using readline as provided in your example

var line = null;

serialPort.open(function () {
  console.log('open');

  serialPort.on('data', function(data) {
    console.log('data received: ' + data);

    if (data.trim() !== '') {
      line = data;

      serialPort.close(function () {
        console.log('closing');
      });
    }
  });
});

// now you may work with your "one" line:
console.log('line strored: ' + line);

这只取得当然收到的第一个非空行。