Arduino向NW.js发送空的ArrayBuffer怎么办?
What to do when Arduino sends empty ArrayBuffer to NW.js?
我一直在玩 Adafruit 的 MPR121-Shield 电容式触摸传感器。在 Arduino 的 IDE 中,有一个代码示例,您可以简单地下载和 运行,它工作得很好:例如,当我触摸引脚 11 时,它 returns ''11 touched'',当我释放它时,它 returns ''11 pressed''。太棒了!
现在,当我尝试将该数据传输到 NW.js 时,问题就来了。通过在 NW.js 中使用 Chrome 的串行端口,我可以连接到我的 Arduino 所连接的端口,并尝试读取 Arduino 发送的任何数据。然而,当我尝试读取数据时,我唯一收到的是一个充满字节 0 的 ArrayBuffer。我真的不确定这里发生了什么,因为当我 运行 它在 Arduino 的 IDE,但是 returns 和 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。
我一直在玩 Adafruit 的 MPR121-Shield 电容式触摸传感器。在 Arduino 的 IDE 中,有一个代码示例,您可以简单地下载和 运行,它工作得很好:例如,当我触摸引脚 11 时,它 returns ''11 touched'',当我释放它时,它 returns ''11 pressed''。太棒了!
现在,当我尝试将该数据传输到 NW.js 时,问题就来了。通过在 NW.js 中使用 Chrome 的串行端口,我可以连接到我的 Arduino 所连接的端口,并尝试读取 Arduino 发送的任何数据。然而,当我尝试读取数据时,我唯一收到的是一个充满字节 0 的 ArrayBuffer。我真的不确定这里发生了什么,因为当我 运行 它在 Arduino 的 IDE,但是 returns 和 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。