从模拟端口读取时从Arduino串行接收的错误数据

时间:2013-04-13 22:23:19

标签: javascript node.js arduino analog-digital-converter node-serialport

也许这只是一个废话,但它让我发疯。我正在尝试读取Arduino中的一个模拟端口,并使用节点通过串口将值发送到JavaScript。当我在Arduino控制台中显示数据时,一切正常,但是当我在Mac中使用终端时,某些值会分成两行。

460
460
4
60
460

我正在使用的代码是:

Arduino的:

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());
});

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

提前致谢

2 个答案:

答案 0 :(得分:1)

我想也许Elias Benevedes试图在他们的答案中提出这个建议:现在你的Arduino数据根本就没有分隔。假设您的sensorValue始终显示为1。在这种情况下,Arduino的输出将是

11111111111111111111111111111111111111111111111111111111111....

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

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

 Serial.println(sensorValue);

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

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

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

答案 1 :(得分:-1)

我曾经也遇到过这种情况。 Serial.print()将数据发送到arduino。 Serial.println()将从arduino发送信息到计算机串行留言板(或任何你想要的信息。