0

也许这只是一派胡言,但它让我发疯。我正在尝试读取 Arduino 中的一个模拟端口,并使用 node.js 通过串行端口将值发送到 JavaScript。当我在 Arduino 控制台中显示数据时,一切正常,但是当我在 Mac 中使用终端时,一些值出现在两行中。

460
460
4
60
460

我正在使用的代码是:

阿杜诺:

const int analogInPin = A0;
int sensorValue = 0;

void setup() {
  Serial.begin(500000);
}

void loop() {
  sensorValue = analogRead(analogInPin);
  Serial.print(sensorValue);
  delay(200);
}

节点:

var com = require('serialport').SerialPort;

var opts = {baudrate: 500000};

var serialPort = new com('/dev/tty.usbmodem641', opts);

serialPort.on('data', function(data) {
  console.log(data.toString());
});

代码再简单不过了,但仍然无法正常工作。我知道我错过了一些东西,但我看不到它。我测试了不同的波特率,但没有任何效果。请你帮助我好吗?

提前致谢

4

2 回答 2

1

我认为Elias Benevedes可能试图在他们的回答中提出这一点:现在您的 Arduino 数据根本没有分隔。假设你sensorValue总是读为1. 在这种情况下,Arduino 的输出将是

11111111111111111111111111111111111111111111111111111111111....

等等; 因为您打印的整数值没有任何分隔符。因此,将其解析为不同数字的方式与数据到达的时间有关。然后继续上面的示例,有时您的值被读取为1,有时为11,有时为111等等,这取决于读取和写入的时间。

开始修复它的方法是在传感器读数输出之间插入一些非数字数据。一个(同样,这可能是Elias Benevedes的想法)是在每个打印的数字之间插入换行符

 Serial.println(sensorValue);

另一种方法是在数据之间添加空格

 Serial.print(sensorValue);
 Serial.print(" ");

任何一种解决方案都会将您的数字读数彼此分开,这就是您想要的。

于 2013-04-14T02:54:15.587 回答
-1

我也遇到过这种情况。Serial.print() 将数据发送到 arduino。Serial.println() 会将信息从 arduino 发送到计算机串行留言板(或任何您想称呼它的名称。

于 2013-04-13T22:32:10.780 回答