也许这只是一个废话,但它让我发疯。我正在尝试读取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());
});
代码不能简单,但仍然无法正常工作。我知道我错过了一些东西,但我看不到它。我测试了不同的波特率,但没有用。你能帮我吗?
提前致谢
答案 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发送信息到计算机串行留言板(或任何你想要的信息。