Node.js SerialPort Arduino 时序问题

标签 node.js serial-port arduino

我正在尝试让我的 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/

相关文章:

javascript - 使用映射或模板转换 Node 流中的 JSON

node.js - Expresso教程

c# - 从 USB 串行端口读取时,SerialPort.BaseStream.ReadAsync 丢弃或扰乱字节

一次复制 8 个字节的结构

c++ - Arduino 如何使用 ESP2668 创建 wifi 接入点?

javascript - 使用 JavaScript 检查 NodeJS 的真实 IP 地址

node.js - 在公司防火墙后面使用 create-react-app

c - 如何使用 Arduino - atmega 2560 微 Controller 实现 8 位 DAC(数模转换)?

java - 通过 Java RXTX 与空调制解调器进行串行到串行通信?

c# - 串口通信问题