我试图使用nodejs来控制arduino。我的问题是我试图给arduino写一个interger但是值不会注册。可以帮助吗?
node.js串行通信代码:
var serialport = require("serialport");
var SerialPort = serialport.SerialPort;
var serialPort = new SerialPort("/dev/cu.usbmodem14131", {
baudrate: 9600,
parser: serialport.parsers.readline("\n")
});
serialPort.on("open", function () {
console.log('open');
serialPort.write("45/r/n") // wrinting offset value to the arduino
serialPort.on('data', function(data) {
console.log(data);
});
});
这里是arduino代码"
#include <Wire.h>
int offset = 0;
String inString = "";
void setup()
{
Serial.begin(9600);
delay(100);
}
void loop(){
Serial.println(offset); //printing the offset
while (Serial.available() > 0) {
int inChar = Serial.read();
// convert the incoming byte to a char
// and add it to the string:
inString += (char)inChar;
// if you get a newline, print the string,
// then the string's value:
if (inChar == '\n') {
Serial.print("Offset:");
Serial.println(inString.toInt());
offset = inString.toInt();
// clear the string for new input:
inString = "";
}
}
delay(1000);
}
我不确定我是以错误的方式写错误还是接收错误,但如果我在arduino IDE中手动输入值,则arduino代码可以正常工作。
谢谢。
答案 0 :(得分:0)
我不确定你的nodejs代码,但我认为arduino例程存在问题。我注意到你的nodejs例程正在发送/ r / n而Arduino例程只是在寻找/ n。
你拥有的while循环可以在不到一个串行字符时间内完全执行,因此它可能会在字符之间增加1秒的延迟。
我会将它结构化以保持while循环,直到收到换行符。以下示例尚未编译,但阐述了该概念。它还会过滤掉&#39; / r&#39;字符。
int inChar;
void loop(){
// clear the string for new input:
inString ="";
inChar=0;
while (inchar!= '\n') {
while (Serial.available() > 0) {
inchar = Serial.read();
// do you need to filter the '/r' for it to work correctly?
if (inchar != '/r') {
// convert the incoming byte to a char
// and add it to the string:
inString += (char)inChar;
}
}
}
// when you receive a newline, print the label and
// the string's value:
Serial.print("Offset:");
Serial.println(inString.toInt());
offset = inString.toInt();
delay(1000);
}