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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: OuO

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

[复制链接]
 楼主| 发表于 2021-1-25 18:08 | 显示全部楼层
方的馒头 发表于 2021-1-24 11:15
老哥您好,我想请教一下这种传感器是只需要把线连到板子上,然后再开发环境里写对应代码就行,还是要另外 ...

不用驱动,直接4根线连到板子上就行 3V3 GND TX RX。代码就是根据通信协议自己写的,接收 解析 这样。
发表于 2021-1-28 14:19 | 显示全部楼层
瞌睡虫2020 发表于 2021-1-15 16:16
激光测距模块好用吗?我需要一个测量水面高度的东西,不知道激光测距好不好使 ...

好像有一种模块是专门测量水面高度。
发表于 2021-1-28 14:30 | 显示全部楼层
OuO 发表于 2021-1-25 18:08
不用驱动,直接4根线连到板子上就行 3V3 GND TX RX。代码就是根据通信协议自己写的,接收 解析 这样。 ...

好的谢谢指点。还想请教一下针对通信协议的代码去哪找,我对这个不是很懂
 楼主| 发表于 2021-1-29 09:15 | 显示全部楼层
方的馒头 发表于 2021-1-28 14:30
好的谢谢指点。还想请教一下针对通信协议的代码去哪找,我对这个不是很懂 ...

串口就是一个一个read进来,保存到数组里面,再根据通信协议判断第一位接收到的是不是头帧,为了正确最后还可以判断校验位是否正确。有很多这样用串口发数据的传感器,可以参考他们的代码,都一模一样的。例如角度传感器,甲醛传感器。
发表于 2021-2-4 21:18 | 显示全部楼层
OuO 发表于 2021-1-29 09:15
串口就是一个一个read进来,保存到数组里面,再根据通信协议判断第一位接收到的是不是头帧,为了正确最后 ...

好的,太感谢了
发表于 2021-2-19 19:52 来自手机 | 显示全部楼层
您好,请问你是怎么把这个接收到的数据转化成正常的十进制数据的
 楼主| 发表于 2021-2-20 21:56 | 显示全部楼层
hhh花花花 发表于 2021-2-19 19:52
您好,请问你是怎么把这个接收到的数据转化成正常的十进制数据的

print 后面+ ,HEX
发表于 2021-2-22 16:55 来自手机 | 显示全部楼层
我读取不了他测量后,返回的数据,你的是怎么读取的
 楼主| 发表于 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-2-22 23:55 来自手机 | 显示全部楼层
OuO 发表于 2021-2-22 21:11

不行呀,我这个数据还是有问题
IMG_20210222_234900.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-29 13:50 , Processed in 0.084205 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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