声明:
该系列博客原只是供本人记录生活事件,不太具有参考价值.
关于类似 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函数中输入这个函数,应该就可以得到执行模块得到距离了。