_淡水海边_
2017-10-04 06:18
采纳率: 50%
浏览 1.5k
已采纳

【新人求助帖】有关传感器串口通讯的问题,请教大家

在开头先向大家说一声中秋节快乐呐~ 辛苦了很久终于能休息一下
我的问题是这样的,比赛要求是做一个车,他在周围有挡板的密闭环境里通过我放置的激光传感器定位,到达特定的位置,实现特定的功能。
现在编写程序能通过串口发送激活激光传感器的通信协议,但是我搞不懂怎么接受传感器发回来的距离数据,这个距离数据感觉有点奇奇怪怪的
是这样的:97 80 06 3F 30 32 2E 34 35 37(十六进制的数组) 真实的含义是02.457米
我测了多组参数 自己分析了一下 感觉应该是3F后的两组数是距离的个位与十位 而2E后面的是小数点后的数字 每个数字需要把数组中的3去掉。

我想请教一下各位这个数据处理函数应该怎么写?还有这个函数应该怎么用,我应该怎么读出他来,在Main函数判定?
请教大家一下,第一次用32还在学,希望大家带带路,谢谢啦。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • blownewbee 2017-10-04 07:23
    已采纳

    你说的对,因为 '0' 的ascii 是 0x30,'1'的ascii 是0x31 ...
    所以存在ascii -> number 为 - 30h 的规律,也就是你说的 -3
    小数点的ascii 是0x2e
    这是ascii表,http://ascii.911cha.com

    点赞 评论
  • das白 2017-10-04 08:38

    看看数据手册 应该有协议的具体讲解

    数据处理的话先用串口接收中断接收数据到一个 (buf)数组中
    接收完全部数据就计算(可以设置一个标志位判断是否接收完毕)
    计算可以在主函数中 也可以直接就在中断函数中计算(数据量不太大的话)
    具体就像楼上说的 这个数据处理并不难 关键就是根据其通讯协议进行数据处理

    点赞 评论
  • tianxj001 2017-10-17 22:31

    97 80 06 3F 30 32 2E 34 35 37 翻译成ASCII是 梹?02.457 文字编码部分 是大五码,可以不需要去管,扔掉返回数组的前4,然后用2E(小数点)分割,前面的是整数部分,后面的是小数部分。
    2部分数据直接-30,即可获得该二进制数据,然后分别从小数点位置向2边进行D0+D1*10+D2*100,获得整数,同样D-1*0.1+D-2*0.01......获得小数部分。

    点赞 评论
  • qq_28302595 2017-12-18 06:24

    我的印象中3F是一个标志位,就是你接受到的第四个数据&0x1(或者别的为真,则表示接收到了一组测距数据),去掉3的话,直接减去0x30就可以了。测距的好像是IIC方式,这个器件有一个IIC方式的存储片的,先要对首地址发送0x1,然后再检测。
    while(cnt<100)
    {
    _delay_ms(2);
    val = read(add) //这个add为标志位地址
    if(val&0x1) break;
    cnt++;
    }
    //后面就可以用数据了
    (我用的是vl53l0x测距的,格式是这样的,不知道你的是不是)

    点赞 评论

相关推荐 更多相似问题