A mbed library for the VL53L0X proximity sensor. This is a wrapper, so beware of big file sizes.
Dependents: BigBot_v1 PololuDistanceSensorTest Lidar Ares test ... more
Diff: VL53L0X.cpp
- Revision:
- 0:11ad6aaed10a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/VL53L0X.cpp Tue Jul 30 13:49:02 2019 +0000 @@ -0,0 +1,121 @@ +/** + * @file VL53L0X.cpp + * @author Joel von Rotz (joel.vonrotz@maxonmotor.com) + * @brief + * @version 0.1 + * @date 2019-07-30 + * + * @copyright Copyright (c) 2019, maxon motor ag - all rights reserved + * + */ +#include "VL53L0X.h" +#include "mbed.h" + +#include "vl53l0x_api.h" +#include "vl53l0x_platform.h" + +/** + * @brief Construct a new VL53L0X object + * + * The constructor is used to assign the needed values to the VL53L0X-Dev structure. + * + * @param p_i2c_device A pointer to an mbed I2C-object + */ +VL53L0X::VL53L0X(I2C* p_i2c_device) +{ + m_vl_dev.i2c_frequency = 400000; + m_vl_dev.i2c_device = p_i2c_device; + m_vl_dev.i2c_address = ADDRESS_DEFAULT; + +} + +/** + * @brief Set new Device Address + * + * Replaces the current I2C-Address with a new one. Every value can be used. + * Currently there is a small problem on reseting the mbed board: after reset (no power reset) the sensor still + * uses it's new slave address. A power-reset is needed to reset the proximity sensors to their factory settings. + * + * @param address New desired 7-Bit address + * @return true no success + * @return false success + */ +bool VL53L0X::setDeviceAddress(uint8_t address) +{ + if(VL53L0X_SetDeviceAddress(&m_vl_dev, address << 1) == 0) + { + m_vl_dev.i2c_address = address; + return 0; + } + return 1; +} + +/** + * @brief Initializes the Sensor + * + * After constructing a VL53L0X object, the sensor needs to be initialized by calling this funciton. + * + * @return true never going to happen + * @return false maybe a success + */ +bool VL53L0X::init() +{ + VL53L0X_Error Status = VL53L0X_ERROR_NONE; + + VL53L0X_GetVersion(&m_vl_version); + + if (Status == VL53L0X_ERROR_NONE) + { + Status = VL53L0X_DataInit(&m_vl_dev); // Data initialization + } + if (Status == VL53L0X_ERROR_NONE) + { + Status = VL53L0X_GetDeviceInfo(&m_vl_dev, &m_vl_deviceinfo); + } + return 0; +} + +/** + * @brief Set Mode to Continuous + * + * Configures the data acquisition of the sensor to 'continuous' + * + * @return true never going to happen + * @return false maybe a success + */ +bool VL53L0X::setModeContinuous() +{ + uint32_t refSpadCount; + uint8_t isApertureSpads; + uint8_t VhvSettings; + uint8_t PhaseCal; + VL53L0X_StaticInit(&m_vl_dev); // Device Initialization + VL53L0X_PerformRefCalibration(&m_vl_dev, &VhvSettings, &PhaseCal); // Device Initialization + VL53L0X_PerformRefSpadManagement(&m_vl_dev, &refSpadCount, &isApertureSpads); // Device Initialization + VL53L0X_SetDeviceMode(&m_vl_dev, VL53L0X_DEVICEMODE_CONTINUOUS_RANGING); // Setup in single ranging mode + + return 0; +} + +/** + * @brief Starts the Continuous Measurement Session + * + * @return true never going to happen + * @return false maybe a success + */ +bool VL53L0X::startContinuous() +{ + VL53L0X_StartMeasurement(&m_vl_dev); + return 0; +} + +/** + * @brief Returns measured Range in Millimeters + * + * @return uint16_t distance in [mm] + */ +uint16_t VL53L0X::getRangeMillimeters() +{ + VL53L0X_GetRangingMeasurementData(&m_vl_dev, &m_vl_results); + return m_vl_results.RangeMilliMeter; +}