Node.js Arduino和nodejs脚本之间的通信出现未知错误
我试图从nodejs脚本向Arduino发送一个两个字母的字符串,例如cc,我没有收到任何错误,但是Arduino没有以它应该的方式响应 RX指示灯闪烁,因此我认为我在Arduino一侧做错了什么,但我对此一无所知 我跟在后面 Arduino代码:Node.js Arduino和nodejs脚本之间的通信出现未知错误,node.js,arduino,Node.js,Arduino,我试图从nodejs脚本向Arduino发送一个两个字母的字符串,例如cc,我没有收到任何错误,但是Arduino没有以它应该的方式响应 RX指示灯闪烁,因此我认为我在Arduino一侧做错了什么,但我对此一无所知 我跟在后面 Arduino代码: // Motor A connections int enA = 9; int in1 = 8; int in2 = 7; // Motor B connections int enB = 3; int in3 = 5; int in4 = 4;
// Motor A connections
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B connections
int enB = 3;
int in3 = 5;
int in4 = 4;
String var1;
const byte DATA_MAX_SIZE = 32;
char data[DATA_MAX_SIZE]; // an array to store the received data
void setup()
{
// Set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Turn off motors - Initial state
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void receiveData() {
static char endMarker = '\n'; // message separator
char receivedChar; // read char from serial port
int ndx = 0; // current index of data buffer // clean data buffer
memset(data, 32, sizeof(data)); // read while we have data available and we are
// still receiving the same message.
while (Serial.available() > 0) {
receivedChar = Serial.read(); if (receivedChar == endMarker) {
data[ndx] = '\0'; // end current message
return;
} // looks like a valid message char, so append it and
// increment our index
data[ndx] = receivedChar;
ndx++;
if (ndx >= DATA_MAX_SIZE) {
break;
}
}
memset(data, 32, sizeof(data));
}
void loop()
{
analogWrite(enA, 255);
analogWrite(enB, 255);
receiveData();
if (data[0] == 'c') { //cc
if (data[1] == 'c') {
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
}
else if (data[1] == 'o') { //co
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
}
}
else if (data[0] == 'w') { //wu
if (data[1] == 'u') {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
if (data[1] == 'd') { //wd
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
}
}
else {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
}
Node.js代码:
const SerialPort=需要“SerialPort”;
const Readline=require'@serialport/parser Readline';const port=new SerialPort'COM3',{baudRate:9600};
const parser=port.pipenew Readline{分隔符:'\n'};
var stdin=process.stdin;
stdin.setRawMode true;
标准简历;
stdin.setEncoding'utf8';
//将任何数据输入stdin
标准“数据”,功能键{
//其他if/ELSE
如果键=='j'{
port.write'cc\n',err=>{
如果出错{
返回console.log'Error on write:',err.message;
}
console.log'messagewrited';
};
}
如果键=='l'{
port.write'oc\n',err=>{
如果出错{
返回console.log'Error on write:',err.message;
}
console.log'messagewrited';
};
}
如果key=='i'{
port.write'wu\n',err=>{
如果出错{
返回console.log'Error on write:',err.message;
}
console.log'messagewrited';
};
}
如果键==“k”{
port.write'wd\n',err=>{
如果出错{
返回console.log'Error on write:',err.message;
}
console.log'messagewrited';
};
}
如果键=='\u0003'{process.exit;}
};
您错过了您所说的教程的第一行代码:
Serial.begin(9600); // Starts the serial communication
我不知道你说的RX LED是什么意思,但它闪烁是有意义的,因为你正在从计算机发送数据,但由于端口未在Arduino代码上初始化,因此micro未侦听数据,因此从未收到任何信息。请将Arduino连接到PC,并在代码中添加一些调试打印,或者,您可以提供预期行为和实际行为的更具体描述吗?如果在arduino执行过程中发生错误,则led通常会闪烁,这对您的回答是有意义的。修复后一切都会好起来的是的,可能也是这样。我真的不知道,因为问题没有说明使用了什么开发板。。。