极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5242|回复: 1

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

[复制链接]
发表于 2022-8-9 15:39:01 | 显示全部楼层 |阅读模式
各位大大好,
目前手里一块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的软串口跟模块进行通信,并将模块的返回值通过串口监视器输出到屏幕上。测试程序代码如下:
  1. #include  <SoftwareSerial.h>

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

  5. void setup()
  6. {
  7.     Serial.begin(9600);
  8.     mySerial.begin(9600);
  9.     mySerial.listen();
  10. }

  11. void loop()
  12. {
  13.     mySerial.write(ADD, 5);
  14.     delay(100);
  15.     if(mySerial.available()>0)
  16.       {
  17.           mySerial.readBytes(data,5);
  18.           for(int i=0;i<5;i++)
  19.           {
  20.               Serial.print(data[i]);
  21.           }
  22.       }
  23.     delay(1000);
  24. }
复制代码

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2022-8-18 14:44:55 | 显示全部楼层
玩串口都是老司机,默认指令结尾带有换行回车 \n\r .  你用单片机读一下串口助手发的指令就明白了。

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

void loop() {
  if ( Serial.available() == 1 ) {   
    Serial.print(Serial.readString());
  }
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 15:39 , Processed in 0.040358 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表