问题描述
首先,我是 node.js 和异步函数概念的新手,非常感谢我能在这里得到的任何帮助。 我一直在尝试使用 node.js 串行端口模块编写脚本来扫描我的 Windows 机器上的端口,并在 Arduino Micro 连接到端口后做一些简单的事情。如果 Arduino 已经连接,下面的工作正常,但我不知道如何扩展它,以便它无限期地等待,直到插入 Micro。如果什么也没找到,它就会终止。
const serialPort = require('serialport');
var portName;
serialPort.list().then(function(ports){
ports.forEach(function(portInfo){
if (portInfo.vendorId == 2341 && portInfo.productId == 8037) {
portName = portInfo.path;
var myPort = new serialPort(portName);
myPort.on('open',function() {
showPortopen();
myPort.write('RL'); // command to initiate functions in Arduino code
});
myPort.on('data',readSerialData); // echo data from Arduino
myPort.on('close',showPortClose);
}
})
});
function readSerialData(data) {
console.log(data);
}
function showPortopen() {
console.log(portName,'opened');
}
function showPortClose() {
console.log(portName,'closed');
}
解决方法
问题在双倍快速时间内解决。谢谢:-)
不确定这是否是最干净的方法,但通过在端口关闭时重新调用 setInterval 函数,我有一个脚本等待并在插入 USB 后找到 Arduino,如果随后拔下,将再次找到它它再次插入。正是我想要的!
const serialPort = require('serialport');
var portName;
loop(); // start searching for Arduino on a port
function loop() {
loopId = setInterval(function() {
serialPort.list().then(function(ports){
ports.forEach(function(portInfo){
if (portInfo.vendorId == 2341 && portInfo.productId == 8037) {
portName = portInfo.path;
var myPort = new serialPort(portName);
myPort.on('open',function() {
showPortOpen();
myPort.write('RL'); // command to initiate Arduino functions
});
myPort.on('data',readSerialData); // echo data from Arduino
myPort.on('close',showPortClose);
}
})
})
},1000)
};
function readSerialData(data) {
console.log(data);
}
function showPortOpen() {
console.log(portName,'opened');
clearInterval(loopId); // stop looping once Arduino found on port
}
function showPortClose() {
console.log(portName,'closed');
loop(); // start over when Arduino port is closed
}