关于类似 VL53L0X这样多文件 传感器的使用经验

这篇博客详细介绍了如何将VL53L0X激光测距传感器移植到STM32F407主控,并实现四个传感器的并行使用。通过修改例程,删除冗余代码,利用片选引脚切换传感器,并通过设置不同I2C地址来区分不同模块。博主强调了避免直接修改例程引脚配置,而是采用软件地址切换的方法,确保移植的灵活性。最后,提供了从初始化到读取距离的具体步骤,为读者提供了一套完整的实现方案。
摘要由CSDN通过智能技术生成

声明:
该系列博客原只是供本人记录生活事件,不太具有参考价值.

关于类似 VL53L0X这样多文件 传感器的使用经验:
一.首先,目标是学会怎么移植(使用)
1.利用例程,把所联系到的文件复制到原来自己的主工程上,然后把main函数里面的代码复制粘贴。

二.想办法能在主工程中使用起来
1.找到调用模块的函数。
2.删掉让程序变慢代码

三.原则上不要想通过改动例程那一两个引脚来实现移植!

完。

—————————其他—————————
针对使用多个VL53L0X(stm32f407的例程):
1.先改例程成一直能测的程序(不需要使用按键,在main里面直接可以一直循环检测距离)
2.开始考虑多个(4个):(VL53L0X上有使能引脚,而且是默认地址0x52,只能通过软件更改地址)
用片选的方法(使用4个引脚的高低电平),分别使能不同模块,然后软件上分别启动,再改地址。
3.找出例程和模块通讯中,输入地址的函数,利用地址的不同,使用不同的模块。(难点)

多个VL53L0X使用方法:

硬件连接:
VL53L0X有六个引脚,应该把这些模块的除了"片选引脚XSH"之外的五个引脚分别用万用板共接在一起。"片选引脚XSH"各自使用不同的普通IO.

因为读取数值是通过(例程里边)
“vl53l0x_test();”
——>“vl53l0x_general_test(&vl53l0x_dev); ”
——>“vl53l0x_general_start(dev,mode);”
——>“vl53l0x_start_single_test(dev,&vl53l0x_data,buf)”
这些函数进行的,而 "dev"这个变量可以在使能"片选引脚XSH"后,
通过vl53l0x_Addr_set(dev,addr);(addr=0x54,0x56…)
来更改IIC通讯地址。然后再次使用 **“vl53l0x_test();”**语句时
使用的超声波就不一样了,
(这个距离存在 Distance_data变量上)

使用4个模块具体步骤:
一、配置
1.连接好线路
2.vl53l0x_init(VL53L0X_Dev_t *dev)
3.使能"片选引脚XSH"1,。
4.vl53l0x_Addr_set(pMyDevice,0x54);//设置第一个VL53L0X传感器I2C地址
(重复以上步骤)
5.vl53l0x_init(VL53L0X_Dev_t *dev)
6.使能"片选引脚XSH"1,。
7.vl53l0x_Addr_set(pMyDevice,0x56);//设置第二个VL53L0X传感器I2C地址

8.vl53l0x_init(VL53L0X_Dev_t *dev)
9.使能"片选引脚XSH"1,。
10.vl53l0x_Addr_set(pMyDevice,0x58);//设置第三个VL53L0X传感器I2C地址

11.vl53l0x_init(VL53L0X_Dev_t *dev)
12.使能"片选引脚XSH"1,。
13.vl53l0x_Addr_set(pMyDevice,0x5a);//设置第四个VL53L0X传感器I2C地址

二、读值:
通过
"vl53l0x_start_single_test(dev,&vl53l0x_data,buf)"进行,
下面是它的声明

VL53L0X_Error vl53l0x_start_single_test(VL53L0X_Dev_t *dev,VL53L0X_RangingMeasurementData_t *pdata,char *buf)
{
	VL53L0X_Error status = VL53L0X_ERROR_NONE;
	uint8_t RangeStatus;
	
	status = VL53L0X_PerformSingleRangingMeasurement(dev, pdata);//执行单次测距并获取测距测量数据
	if(status !=VL53L0X_ERROR_NONE) return status;
   
	RangeStatus = pdata->RangeStatus;//获取当前测量状态
    memset(buf,0x00,VL53L0X_MAX_STRING_LENGTH);
	VL53L0X_GetRangeStatusString(RangeStatus,buf);//根据测量状态读取状态字符串
	
	Distance_data = pdata->RangeMilliMeter;//保存最近一次测距测量数据
	
    return status;
}

注意到,return上面的 Distance_data = pdata->RangeMilliMeter;
这里,就可以得到距离了.
步骤:
1.修改"vl53l0x_start_single_test(dev,&vl53l0x_data,buf)"
具体的:
①修改dev中的地址参数,(dev里面含有IIC通讯的地址)
dev1对应地址0x54,即对应第一个模块
②修改函数中Distance_data1 = pdata->RangeMilliMeter;,
Distance_data1对应第一个模块读出的值.

2.得到四个函数;
“vl53l0x_start_single_test1(dev1,&vl53l0x_data,buf)”
“vl53l0x_start_single_test2(dev2,&vl53l0x_data,buf)”
“vl53l0x_start_single_test3(dev3,&vl53l0x_data,buf)”
“vl53l0x_start_single_tes4(dev4,&vl53l0x_data,buf)”

3.在main函数中输入这个函数,应该就可以得到执行模块得到距离了。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值