Javascript 当Arduino将空的ArrayBuffer发送到NW.js时,该怎么办?

Javascript 当Arduino将空的ArrayBuffer发送到NW.js时,该怎么办?,javascript,arduino,nwjs,Javascript,Arduino,Nwjs,我一直在玩Adafruit的MPR121屏蔽电容式触摸传感器。在Arduino的IDE中,有一个代码示例,您可以简单地下载并运行,它工作得非常完美:例如,当我触摸引脚11时,它返回“11触摸”,当我松开它时,它返回“11按下”。太好了 现在,当我尝试将数据传输到NW.js时,问题来了。通过在NW.js中使用Chrome的串行端口,我可以连接到我的Arduino所连接的端口,并尝试读取Arduino发送的任何数据。然而,当我试图读取数据时,我收到的唯一东西是一个填充了0字节的ArrayBuffer

我一直在玩Adafruit的MPR121屏蔽电容式触摸传感器。在Arduino的IDE中,有一个代码示例,您可以简单地下载并运行,它工作得非常完美:例如,当我触摸引脚11时,它返回“11触摸”,当我松开它时,它返回“11按下”。太好了

现在,当我尝试将数据传输到NW.js时,问题来了。通过在NW.js中使用Chrome的串行端口,我可以连接到我的Arduino所连接的端口,并尝试读取Arduino发送的任何数据。然而,当我试图读取数据时,我收到的唯一东西是一个填充了0字节的ArrayBuffer。我真的不确定这里发生了什么,因为当我在Arduino的IDE中运行它时,这两个设备都可以完美地工作,但chrome.serialport基本上不会返回任何结果

有人知道这里发生了什么吗?如果我做一个console.log(info.data),我只会得到一个带有空比特的ArrayBuffer

谢谢

这是我的密码:

const ab2str = require('arraybuffer-to-string');

nw.Window.get().showDevTools();

let buffer = "";

chrome.serial.getDevices(devices => {
  devices.forEach(device => console.log(device));
});

// let port = "COM3";
let port = "/dev/cu.usbmodem142401";

chrome.serial.connect(port, {bitrate: 1000000}, () => {
  console.log("Serialport connected:" + port);
  chrome.serial.onReceive.addListener(onDataReceived);
});

function onDataReceived(info) {

  let lines = ab2str(info.data).split("\n");
  lines[0] = buffer + lines[0];
  buffer = lines.pop();

  lines.forEach(line => {
    const [type, value] = line.split("=");
    console.log(type, value);
  });

}


Tx和Rx波特率必须相同才能正确解码信息,在第一种情况下,arduino IDE为您处理该信息,但在第二种情况下,您需要手动处理该信息。在串行端口通信中,一次传输一个位,与并行端口不同,在并行端口中,所有位将同时用于读取。因此,在串行端口中,信息的传输速率(Tx)应与信息的接收速率(Rx)相同,否则位可能丢失,您可能会得到错误的信息。arduino IDE可以为您处理大多数这些问题,如果我没有错的话,IDE允许您更改波特率,但默认值是9600

要正确解码信息,Tx和Rx波特率必须相同,在第一种情况下,arduino IDE为您处理,但在第二种情况下,您需要手动处理。在串行端口通信中,一次传输一个位,与并行端口不同,在并行端口中,所有位将同时用于读取。因此,在串行端口中,信息的传输速率(Tx)应与信息的接收速率(Rx)相同,否则位可能丢失,您可能会得到错误的信息。arduino IDE可以为您处理大多数这些问题,如果我没有错的话,IDE允许您更改波特率,但默认值是9600

Tx和Rx波特率必须相同才能正确解码信息,在第一种情况下,arduino IDE为您处理该信息,但在第二种情况下,您需要手动处理该信息。另一个问题是,使用串行端口确实会得到二进制值('0'和'1'),因此结果是预期的,除非投诉中没有'1'。其中绝对没有1。它只是空的,没有任何内容,每个字节都是0,如果我尝试使用ab2str将其转换为字符串,我会得到一个空字符串。我不确定我是否理解你所说的Tx和Rx波特率是什么意思。。。您想详细说明一下吗?在串行端口中,单个位是一次传输的,而在并行端口中,所有位将同时用于读取。因此,在串行端口中,信息传输速率(Tx)应与信息接收速率(Rx)相同,否则位可能丢失,您可能会得到错误的信息。arduino IDE为您处理大多数问题,如果我没有弄错,IDE允许您更改波特率,但我认为默认值是9600。您不能仅仅用通用应用程序替换IDE并期望得到相同的结果,您需要手动实现IDE的功能。我刚刚将比特率编辑为9600(与Arduino相同),它现在正在工作。谢谢!Tx和Rx波特率必须相同才能正确解码信息,在第一种情况下,arduino IDE为您处理该信息,但在第二种情况下,您需要手动处理该信息。另一个问题是,使用串行端口确实会得到二进制值('0'和'1'),因此结果是预期的,除非投诉中没有'1'。其中绝对没有1。它只是空的,没有任何内容,每个字节都是0,如果我尝试使用ab2str将其转换为字符串,我会得到一个空字符串。我不确定我是否理解你所说的Tx和Rx波特率是什么意思。。。您想详细说明一下吗?在串行端口中,单个位是一次传输的,而在并行端口中,所有位将同时用于读取。因此,在串行端口中,信息传输速率(Tx)应与信息接收速率(Rx)相同,否则位可能丢失,您可能会得到错误的信息。arduino IDE为您处理大多数问题,如果我没有弄错,IDE允许您更改波特率,但我认为默认值是9600。您不能仅仅用通用应用程序替换IDE并期望得到相同的结果,您需要手动实现IDE的功能。我刚刚将比特率编辑为9600(与Arduino相同),它现在正在工作。谢谢!