关于串口通信协议的激光测距模块问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10552|回复: 19

[已解决] 关于串口通信协议的激光测距模块问题

[复制链接]
发表于 2021-1-10 19:39 | 显示全部楼层 |阅读模式
本帖最后由 OuO 于 2021-1-10 22:19 编辑

采用的是60m相位单点红外激光测距模组,模块与arduino mega采用串口相连接。模块为串口输出形式。
QQ截图20210110193232.png
通信协议如下所示: ~1Q16DMAZ%~M[Q8TM639{3O.png
当我采用USB-TTL在电脑上用串口助手进行测试时一切正常,返回数据是按照通信格式这样的。
QQ截图20210109170505.png
于是我将测距模块与单片机相连,串口的返回值就发生了异样。代码中检查帧头的判断条件是可以进入的,但不知为何返回的帧头值缺不同。
  1. unsigned char Re_buf[30],counter=0;
  2. unsigned char sign=0;

  3. void serialEvent() {
  4.   while (Serial.available()) {
  5.     Re_buf[counter]=(unsigned char)Serial.read();
  6.     if(counter==0 && Re_buf[0]!=0XAA) return;      // 检查帧头         
  7.     counter++;      
  8.     if(counter==13)                //接收到数据
  9.     {   
  10.        counter=0;                 //重新赋值,准备下一帧数据的接收
  11.        sign=1;
  12.     }      
  13.   }
  14. }

  15. void setup() {
  16.   Serial.begin(19200);
  17.   Serial.write(0XAA);
  18.   Serial.write(0X00);
  19.   Serial.write(0X00);
  20.   Serial.write(0X20);
  21.   Serial.write(0X00);
  22.   Serial.write(0X01);
  23.   Serial.write(0X00);
  24.   Serial.write(0X04);
  25.   Serial.write(0X25);
  26. }

  27. void loop()
  28. {
  29.   if(sign)
  30.     {  
  31.        sign=0;
  32.        if(Re_buf[0]==0XAA && Re_buf[1]==0X00 )      //检查帧头,
  33.        {
  34.         Serial.print(Re_buf[0]);
  35.         Serial.print(Re_buf[1]);
  36.         Serial.print(Re_buf[2]);
  37.         Serial.print(Re_buf[3]);
  38.         Serial.print(Re_buf[4]);
  39.         Serial.print(Re_buf[5]);
  40.         Serial.print(Re_buf[6]);
  41.         Serial.print(Re_buf[7]);
  42.         Serial.print(Re_buf[8]);  
  43.         Serial.print(Re_buf[9]);
  44.         Serial.print(Re_buf[10]);
  45.         Serial.print(Re_buf[11]);
  46.         Serial.print(Re_buf[12]);
  47.         Serial.print(Re_buf[13]);
  48.      }
  49.   }
  50. }
复制代码
R[OKN_IYXKKDV$W2NOWQZGM.png
 楼主| 发表于 2021-2-22 21:11 | 显示全部楼层
hhh花花花 发表于 2021-2-22 16:55
我读取不了他测量后,返回的数据,你的是怎么读取的
  1. unsigned char Re_buf[30],counter=0;
  2. unsigned char sign=0;

  3. void serialEvent() {
  4.   while (Serial.available()) {
  5.     Re_buf[counter]=(unsigned char)Serial.read();
  6.     if(counter==0 && Re_buf[0]!=0XAA) return;      // 检查帧头         
  7.     counter++;      
  8.     if(counter==13)                //接收到数据
  9.     {   
  10.        counter=0;                 //重新赋值,准备下一帧数据的接收
  11.        sign=1;
  12.     }      
  13.   }
  14. }

  15. void setup() {
  16.   Serial.begin(19200);
  17.   Serial.write(0XAA);
  18.   Serial.write(0X00);
  19.   Serial.write(0X00);
  20.   Serial.write(0X20);
  21.   Serial.write(0X00);
  22.   Serial.write(0X01);
  23.   Serial.write(0X00);
  24.   Serial.write(0X04);
  25.   Serial.write(0X25);
  26. }

  27. void loop()
  28. {
  29.   if(sign)
  30.     {  
  31.        sign=0;
  32.        if(Re_buf[0]==0XAA && Re_buf[1]==0X00 )      //检查帧头,
  33.        {
  34.         Serial.print(Re_buf[0],HEX);
  35.         Serial.print(Re_buf[1],HEX);
  36.         Serial.print(Re_buf[2],HEX);
  37.         Serial.print(Re_buf[3],HEX);
  38.         Serial.print(Re_buf[4],HEX);
  39.         Serial.print(Re_buf[5],HEX);
  40.         Serial.print(Re_buf[6],HEX);
  41.         Serial.print(Re_buf[7],HEX);
  42.         Serial.print(Re_buf[8],HEX);  
  43.         Serial.print(Re_buf[9],HEX);
  44.         Serial.print(Re_buf[10],HEX);
  45.         Serial.print(Re_buf[11],HEX);
  46.         Serial.print(Re_buf[12],HEX);
  47.         Serial.print(Re_buf[13],HEX);
  48.         int distance = 0;
  49.         distance = (Re_buf[8]*256+ Re_buf[9]);
  50.         Serial.print(" Distance = ");
  51.         Serial.print(distance);
  52.         Serial.println(" MM");
  53.      }
  54.   }
  55. }
复制代码
 楼主| 发表于 2021-1-10 19:43 | 显示全部楼层
本帖最后由 OuO 于 2021-1-11 02:45 编辑

已解决zsbd QQ图片20210111024422.png

(原代码完全没问题=-=)



发表于 2021-1-15 16:16 | 显示全部楼层
激光测距模块好用吗?我需要一个测量水面高度的东西,不知道激光测距好不好使
 楼主| 发表于 2021-1-20 02:47 | 显示全部楼层
瞌睡虫2020 发表于 2021-1-15 16:16
激光测距模块好用吗?我需要一个测量水面高度的东西,不知道激光测距好不好使 ...

挺好用的,产品介绍说是可以测水平面的。精度很高0.01,且稳定,不怎么跳变。
发表于 2021-1-21 02:19 | 显示全部楼层
请问您做个激光数据传输到实验吗?
 楼主| 发表于 2021-1-21 03:16 | 显示全部楼层
一叶知秋1 发表于 2021-1-21 02:19
请问您做个激光数据传输到实验吗?

没有看懂你想说什么。
发表于 2021-1-21 03:24 | 显示全部楼层
我想了解一下您,做过激光数据传输方面的研究吗?需要低功耗与数据加密,大数据量通过激光来数据传输数据。我这边有这么个想研发的需求
 楼主| 发表于 2021-1-21 03:30 | 显示全部楼层
一叶知秋1 发表于 2021-1-21 03:24
我想了解一下您,做过激光数据传输方面的研究吗?需要低功耗与数据加密,大数据量通过激光来数据传输数据。 ...

这样呀。我没有做过这方面的研究,不好意思。
发表于 2021-1-24 11:15 | 显示全部楼层
OuO 发表于 2021-1-20 02:47
挺好用的,产品介绍说是可以测水平面的。精度很高0.01,且稳定,不怎么跳变。 ...

老哥您好,我想请教一下这种传感器是只需要把线连到板子上,然后再开发环境里写对应代码就行,还是要另外的驱动的。如果只用写代码,那应该去哪里找对应的代码,还是说是根据通信协议写对应的代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 13:36 , Processed in 0.162535 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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