Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docklight和Arduino串行通信(通过RS232发送十六进制)_Arduino_Serial Port_Nodemcu - Fatal编程技术网

Docklight和Arduino串行通信(通过RS232发送十六进制)

Docklight和Arduino串行通信(通过RS232发送十六进制),arduino,serial-port,nodemcu,Arduino,Serial Port,Nodemcu,我有以下代码(我使用的是Arduino IDE和带有MAX3232的NodeMCU): #包括 软件串行RS232串行(D1,D2);//RX | TX 无效设置(){ Serial.begin(9600); 而(!串行); RS232串行开始(9600); 而(!RS232Serial); } void循环(){ Serial.println(“发送消息…”); char msg[]={0x7E,0x00,0x78,0xF0,0x7E}; RS232Serial.write(msg,sizeo

我有以下代码(我使用的是Arduino IDE和带有MAX3232的NodeMCU):

#包括
软件串行RS232串行(D1,D2);//RX | TX
无效设置(){
Serial.begin(9600);
而(!串行);
RS232串行开始(9600);
而(!RS232Serial);
}
void循环(){
Serial.println(“发送消息…”);
char msg[]={0x7E,0x00,0x78,0xF0,0x7E};
RS232Serial.write(msg,sizeof(msg));
Serial.println(“等待输入消息:”);
而(RS232Serial.available()0){
Serial.print(RS232Serial.read(),十六进制);
}
Serial.println(“”);
Serial.println(“--------------结束----------”;
}
我正在用Docklight测试通讯。到目前为止,我能够接收NodeMCU板首先发送的HEX
charmsg[]={0x7E,0x00,0x78,0xF0,0x7E}。但我无法从Docklight正确接收数据

我试图从Docklight发送的HEX是
7E 00 00 70 15 7E
。使用串行监视器进行调试时,有时我只收到
7E
,有时收到
0FF
,从未收到完整的消息。波特率、开始/停止位和奇偶校验设置为默认值


我的代码有什么问题?

无法按预期工作的一个原因是:

  • 当接收缓冲区中出现一个字节时,您将立即处理答案
Docklight应用程序说明中有一个相关示例-检查第5页的代码清单。它利用Arduino来收集每个字节的传入电报。只有在接收到电报结束标记(此处为换行符“\n”)后,它才会设置一个标志,告知主循环()中的代码对累积的数据电报进行处理

Docklight示例中使用的SerialEvent方法不是必须的。您也可以单独解决这个内部循环()。但是你当然需要改变这个习惯

  while(RS232Serial.available() <= 0) {
将等待收到完整电报(或发生超时)的部分

现在让我恼火的是,你写信给我,有时你会收到“0FF”,即使你从未从Docklight发送过。这可能表明在实际的RS232通信中还有第二个问题,但是如果没有额外的信息,很难猜测

但是,如上所述重新处理电报接收部分应该已经让事情变得更清楚了,“0FF”的来源可能更明显了。

while(RS232Serial.available()0){
Serial.print(RS232Serial.read(),十六进制);
}
或者只有6个字节,其中:

for(int i=0;i
  while(RS232Serial.available() > 0) {