1 /**
2 * @brief VL53L0X 测量模式配置
3 * @param dev:设备 I2C 参数结构体
4 * @param mode: 0:默认;1:高精度;2:长距离
5 * @retval 状态信息
6 */
7 VL53L0X_Error vl53l0x_set_mode(VL53L0X_Dev_t *dev,uint8_t mode)
8 {
9 VL53L0X_Error status = VL53L0X_ERROR_NONE;
10 uint8_t VhvSettings;
11 uint8_t PhaseCal;
12 uint32_t refSpadCount;
13 uint8_t isApertureSpads;
14
15 /*复位 vl53l0x(频繁切换工作模式容易导致采集距离数据不准,需加上这一代码)*/
18 vl53l0x_reset(dev);
19 status = VL53L0X_StaticInit(dev);
20
21 /*已校准好了,写入校准值*/
22 if (AjustOK!=0) {
23 /*设定 Spads 校准值*/
24 status= VL53L0X_SetReferenceSpads(dev,Vl53l0x_data.refSpadCount,
25 Vl53l0x_data.isApertureSpads);
26 if (status!=VL53L0X_ERROR_NONE) goto error;
27 delay_ms(2);
28
29 /*设定 Ref 校准值*/
30 status= VL53L0X_SetRefCalibration(dev,Vl53l0x_data.VhvSettings,
31 Vl53l0x_data.PhaseCal);
32 if (status!=VL53L0X_ERROR_NONE) goto error;
33 delay_ms(2);
34
35 /*中间省略代码*/
36 .......
37
38
39 /*设定 VCSEL 脉冲周期*/
40 status = VL53L0X_SetVcselPulsePeriod(dev,
41 VL53L0X_VCSEL_PERIOD_PRE_RANGE,
Mode_data[mode].preRangeVcselPeriod);
43 if (status!=VL53L0X_ERROR_NONE) goto error;
44 delay_ms(2);
45
46 /*设定 VCSEL 脉冲周期范围*/
47 status = VL53L0X_SetVcselPulsePeriod(dev,
VL53L0X_VCSEL_PERIOD_FINAL_RANGE,
Mode_data[mode].finalRangeVcselPeriod);
50
51 error:/*错误信息*/
52 if (status!=VL53L0X_ERROR_NONE) {
53 print_pal_error(status);
54 return status;
55 }
56 return status;
57}
|