dapeng97 发表于 2022-8-9 15:39:01

请教Arduino UNO串口输出16进制指令控制测距模块问题

各位大大好,目前手里一块Arduino UNO和一个激光测距模块,模块通过串口接收形如“FA 06 04 FC”的16进制命令来工作。目前通过使用USB-TTL的串口模块连接激光测距模块,然后在串口工具上输入命令,是可以正常通信和工作的,如图所示。图1是该模块,供电使用的3.3v。图2是该模块的一部分通信协议。图3是使用串口工具通信的情况,可以看到发出了“FA 04 01 80 81”的指令后,正常收到了模块返回的“FA 04 81 81”的操作成功回复。 图1 图2 图3然后我就使用Arduino的软串口跟模块进行通信,并将模块的返回值通过串口监视器输出到屏幕上。测试程序代码如下:#include<SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // 设置软串口2-RX 3-TX
unsigned char ADD = {0xFA, 0x04, 0x01, 0x80, 0x81};
byte data = {0};

void setup()
{
    Serial.begin(9600);
    mySerial.begin(9600);
    mySerial.listen();
}

void loop()
{
    mySerial.write(ADD, 5);
    delay(100);
    if(mySerial.available()>0)
      {
          mySerial.readBytes(data,5);
          for(int i=0;i<5;i++)
          {
            Serial.print(data);
          }
      }
    delay(1000);
}
代码正常上传至Arduino中,但是串口监视器中却没有任何显示,如图4。 图4然后我写了个简单的测试查看Arduino是否正常输出指令,用串口工具监视Serial.write(ADD, 5)传输出来的数据,可以从串口工具中看到命令确实正常输出,也是模块需要的格式。 所以目前就很疑惑,到底哪里出了问题导致工作错误。

kpj001 发表于 2022-8-18 14:44:55

玩串口都是老司机,默认指令结尾带有换行回车 \n\r .你用单片机读一下串口助手发的指令就明白了。

void setup() {
Serial.begin(115200);
}

void loop() {
if ( Serial.available() == 1 ) {   
    Serial.print(Serial.readString());
}
}
页: [1]
查看完整版本: 请教Arduino UNO串口输出16进制指令控制测距模块问题