TF mini Plus串口读取【附代码】

3 篇文章 17 订阅
2 篇文章 0 订阅

TF mini Plus串口读取

TFmini Plus 测距精度高,对于室外强光、不同温度、不同反射率等不同环境下适应性更强,更低功耗,探测频率也更加灵活。

网上找到的代码可移植性不太高,借鉴了一下zf的超声波例程(doge),自己尽可能简洁地写了一下代码,亲测获得的数据稳定,且数据变化很流畅。
以下是TF mini Plus 的基本说明;
串口工作时的通信协议:
 TFmini Plus 数据通信协议——UART
数据编码解释:
在这里插入图片描述
**Dist(Distance):**代表 TFmini Plus 测量输出的距离值,默认单位为 cm,解析为十进制的值范围
为 0-1200。实际使用过程中,当信号强度值 Strength<100 或等于 65535 时,Dist 的测量值被认为不
可信,默认输出 0。
**Strength:**指信号强度,默认输出值会在 0-65535 之间。当测距档位一定时,测距越远,信号
强度越低;目标物反射率越低,信号强度越低。当 Strength 大于 100 且不等于 65535 时,认为 Dist
的测量值可信,客户可以根据使用场景自行调整。
**Temp(Temperature):**表征芯片内部温度值。摄氏度 = Temp / 8 - 256

接下来附上代码:

//注意:
//一定不要忘了初始化串口、打开串口中断!!!!!!!!!!!!!!!!!!!!!!!!!!

uint16 TF_distance = 0;             // TF_测距数据
uint16 TF_strength = 0;             // TF_信号强度
uint16 TF_temperature = 0;          // TF_温度
uint16 TF_checksum = 0;             // TF_自检
uint8 TF_flage = 0x00;              // TF_测距状态
uint8 TF_uart_data;
uint8 TF_dat[9];
uint8 TF_num = 0;


#define TF_HEADER 0x59
void TF_mini(void)//此函数放在串口中断中
{
    uart_query_byte(UART_8,&TF_uart_data);//每获得一个数就先记到TF_uart_data中
    TF_dat[TF_num] = TF_uart_data;
    if(TF_num)
    {
        if(TF_dat[1] != TF_HEADER) TF_num = 0;//2、若第二个数不是 0x59,则TF_num清零,下一次重新检测第一个数
            else  TF_num++;                   //3、第一和第二个数均满足要求,开始将获得的数,逐位赋给TF_dat[2~8]
    }
    if(TF_dat[0] != TF_HEADER) TF_num = 0;
    else if(TF_num==0) TF_num = 1;           //1、若第一个数满足要求0x59,则下一次接收并检测第二个函数

    if (TF_num==9)//获得完9位数后
    {
        TF_num = 0;
        TF_checksum = TF_dat[0]+TF_dat[1]+TF_dat[2]+TF_dat[3]+TF_dat[4]+
                        TF_dat[5]+TF_dat[6]+TF_dat[7];

        if((TF_checksum % 256) == TF_dat[8])//TF_dat[8]是自检位,满足要求后根据公式计算距离等
            {
            TF_distance = TF_dat[3]<<8 | TF_dat[2];
            TF_strength = TF_dat[5]<<8 | TF_dat[4];
            TF_temperature  = TF_dat[7]<<8 | TF_dat[6];
            TF_flage = 1;
            }

    }

}

不同的单片机这个库函数:uart_query_byte(UART_8,&TF_uart_data); 可能不一样,改一下就可以了

TF_distance 是实时更新的,接下来直接用这个变量就行了

调用例子:

   //以下指令目的是将TF_distance值显示在屏幕上
    if(TF_flage)
        {
            displayuint16(0,9,TF_distance);
            displayuint16(0,10,TF_strength);
            displayuint16(0,11,TF_temperature);
            TF_flage = 0;
        }
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值