- 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}
|