我正在尝试让我的 Raspberry Pi/Node.js 使用 Node 串口与 Arduino Uno 通信。我在使用以下代码块时遇到问题:
树莓派
var SerialPort = require("serialport").SerialPort;
var serialPort = new SerialPort("/dev/ttyACM0", {
baudrate: 9600
});
serialPort.on("open", function () {
console.log('open');
serialPort.on('data', function(data) {
console.log('data received: ' + data);
});
serialPort.write(new Buffer('4','ascii'), function(err, results) {
console.log('err ' + err);
console.log('results ' + results);
});
});
阿杜伊诺
// LED on pin 12
int led = 12;
// Incoming serial data
int data=0;
void setup() {
// Pin 12 set to OUTPUT
pinMode(led, OUTPUT);
// Start listening on the serialport
Serial.begin(9600);
}
void loop() {
if(Serial.available()>0){
// Read from serialport
data = Serial.read();
// Check and see if data received == 4
if(data=='4') {
// Blink the LED 3 times
for(int i=0;i<3;i++){
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
}
// Reset data to 0
data=0;
}
}
}
如果我在 serialPort.write() 函数周围包装一个 for 循环,我只能让 Arduino 使 LED 闪烁。在第 40 次左右的循环迭代中,LED 最终开始闪烁并将继续闪烁,直到 serialPort.write() 循环完成。这让我相信我遇到了某种时间问题。我正在寻找一种更优雅(且无阻塞)的解决方案来通过 Pi 使 Arduino 上的 LED 闪烁。任何帮助将不胜感激。
谢谢! 鲍比
最佳答案
问题与 Arduino 的“AutoReset”有关 查看更多 here .
我实际上并没有禁用自动重置...我继续执行上面发布的代码。我需要用户交互来触发 SerialPort.write()。只要在打开串行连接和第一次写入之间有几秒钟的时间,这就可以工作。
关于Node.js SerialPort Arduino 时序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22797158/