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
VL53L0X.h
- Committer:
- joelvonrotz
- Date:
- 2019-07-30
- Revision:
- 1:ccc67c76fecb
- Parent:
- 0:11ad6aaed10a
File content as of revision 1:ccc67c76fecb:
/**
* @file VL53L0X.h
* @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
*
*/
#ifndef VL53L0X_H
#define VL53L0X_H
#include "mbed.h"
#include "vl53l0x_platform.h"
#include "vl53l0x_def.h"
#define ADDRESS_DEFAULT (0x29)
/**
* @brief Class for Proximity Sensor VL53L0X
*
* The VL53L0X is a laser based proximity sensor which can measure up to 2m.
* This library is a wrapper for the API from STMicrocontrollers and the goal of this
* library is the easier access to this sensor.
*
* Something really cool about these sensors is the ability to change the I2C-address.
* So you can hook multiple, identical sensors on the same I2C-line.
*
* <h2>Examples</h2>
*
* <h3>One Sensor</h3>
* Using one sensor is pretty simple, connect the I2C-pins to the sensor (Shutdown should be pulled high
* using a pull-up resistor).
*
* @code
* #include "mbed.h"
* #include "VL53L0X.h"
*
* I2C i2c(p9, p10);
* VL53L0X vl_sensor(&i2c);
* DigitalOut vl_shutdown(p11);
* Serial usb(USBTX, USBRX, 115200);
*
* int main(void)
* {
* usb.printf("Single VL53L0X\n\n\r");
*
* vl_shutdown = 1; //turn VL53L0X on
* vl_sensor.init();
* vl_sensor.setModeContinuous();
* vl_sensor.startContinuous();
* while(1)
* {
* usb.printf("%4imm\n\r", vl_sensor.getRangeMillimeters());
* }
* }
* @endcode
*
* <h3>Multiple Sensors</h3>
* To use multiple sensors, at the start of the programm every sensor needs to be
* turned off by setting their shutdown pin to low. Now one sensor is turned on,
* and configured with the new address. After that's done, the next sensor can be
* configured.
*
* @code
* #include "mbed.h"
* #include "VL53L0X.h"
*
* I2C i2c(p9, p10);
* VL53L0X vl_sensors[6] = {(&i2c),(&i2c),(&i2c),(&i2c),(&i2c),(&i2c)};
* BusOut vl_shutdown(p11,p12,p13,p14,p15,p16);
* Serial usb(USBTX, USBRX, 115200);
*
* int main(void)
* {
* usb.printf("Multiple VL53L0X\n\n\r");
*
* uint8_t expander_shutdown_mask = 1;
* for(uint8_t i = 0; i < 6 ; i++)
* {
* vl_shutdown = expander_shutdown_mask;
* expander_shutdown_mask = (expander_shutdown_mask << 1) + 1;
* vl_sensors[i].init();
* vl_sensors[i].setDeviceAddress(0x40 + i);
* vl_sensors[i].setModeContinuous();
* vl_sensors[i].startContinuous();
* }
* uint16_t results[6];
* while(1)
* {
* for(uint8_t i = 0; i < 6 ; i++)
* {
* results[i] = vl_sensors[i].getRangeMillimeters();
* }
* usb.printf("1: %4imm 2: %4imm 3: %4imm) 4: %4imm 5: %4imm 6: %4imm)\n\r", results[0], results[1], results[2], results[3], results[4], results[5]);
* }
* }
* @endcode
*
* <strong>NOTE</strong> - The library is gigantic, so it is recommended to use this library
* on devices with enough storage.
*
*/
class VL53L0X
{
public:
VL53L0X(I2C* p_i2c_device);
bool setDeviceAddress(uint8_t address = ADDRESS_DEFAULT);
bool init();
bool setModeContinuous();
bool startContinuous();
uint16_t getRangeMillimeters();
private:
VL53L0X_Dev_t m_vl_dev;
VL53L0X_RangingMeasurementData_t m_vl_results,m_old_results;
VL53L0X_Version_t m_vl_version;
VL53L0X_DeviceInfo_t m_vl_deviceinfo;
};
#endif /* */
Joel von Rotz