Sci*_*tup 6 serial-port node.js
使用 Node.js 致力于 PC 和基于 Arduino 的硬件之间的通信。最后一个设备是用 G 代码实现的,所以如果我发送 \xe2\x80\x98G0\xe2\x80\x99 我将收到两行;一个用于确认已收到指令,第二个用于确认数据。
\n\n我想使用 async/await 但出了点问题......代码如下:
\n\n'use strict'\nconst SerialPort = require('serialport')\nconst Readline = SerialPort.parsers.Readline\n\nconst cardPort = new SerialPort('COM6', {\n baudRate: 115200,\n parity: 'none',\n stopBits: 1,\n dataBits: 8,\n flowControl: false,\n usePromises: true,\n}, function(err) {\n if (err){\n console.log('error: ', err.message)\n port.close()\n } else {\n\n }\n})\n\nconst cardParser = new Readline({ delimiter: '\\r\\n' })\n\ncardPort.pipe(cardParser)\n\nfunction checkCard(port, parser){\n port.write('G0\\n', function () {\n console.log('message written')\n parser.on('data', (data) => { \n console.log(data)\n return (data)\n })\n })\n}\n\nasync function run () {\n const id = await checkCard(cardPort,cardParser)\n console.log(`ID response is: ${id}`)\n}\n\nrun()\nRun Code Online (Sandbox Code Playgroud)\n\n这是我得到的回应:
\n\nID response is: undefined\nmessage written\nReceived: G0\nENCR1PT3R!\nRun Code Online (Sandbox Code Playgroud)\n\n为什么 ID 响应不等待 checkCard 执行?
\n\n提前致谢
\ncheckCard应该返回Promise工作,但看起来port.write是基于回调的。将其封装起来new Promise以使其工作。
function checkCard(port, parser){
return new Promise(function(resolve, reject) {
port.write('G0\n', function () {
console.log('message written')
parser.on('data', (data) => {
console.log(data)
resolve(data)
})
})
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4453 次 |
| 最近记录: |