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

Committer:
joelvonrotz
Date:
Tue Jul 30 13:49:02 2019 +0000
Revision:
0:11ad6aaed10a
Child:
1:ccc67c76fecb
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joelvonrotz 0:11ad6aaed10a 1 /**
joelvonrotz 0:11ad6aaed10a 2 * @file VL53L0X.h
joelvonrotz 0:11ad6aaed10a 3 * @author Joel von Rotz (joel.vonrotz@maxonmotor.com)
joelvonrotz 0:11ad6aaed10a 4 * @brief
joelvonrotz 0:11ad6aaed10a 5 * @version 0.1
joelvonrotz 0:11ad6aaed10a 6 * @date 2019-07-30
joelvonrotz 0:11ad6aaed10a 7 *
joelvonrotz 0:11ad6aaed10a 8 * @copyright Copyright (c) 2019, maxon motor ag - all rights reserved
joelvonrotz 0:11ad6aaed10a 9 *
joelvonrotz 0:11ad6aaed10a 10 */
joelvonrotz 0:11ad6aaed10a 11 #ifndef VL53L0X_H
joelvonrotz 0:11ad6aaed10a 12 #define VL53L0X_H
joelvonrotz 0:11ad6aaed10a 13
joelvonrotz 0:11ad6aaed10a 14 #include "mbed.h"
joelvonrotz 0:11ad6aaed10a 15 #include "vl53l0x_platform.h"
joelvonrotz 0:11ad6aaed10a 16 #include "vl53l0x_def.h"
joelvonrotz 0:11ad6aaed10a 17
joelvonrotz 0:11ad6aaed10a 18 #define ADDRESS_DEFAULT (0x29)
joelvonrotz 0:11ad6aaed10a 19
joelvonrotz 0:11ad6aaed10a 20 /**
joelvonrotz 0:11ad6aaed10a 21 * @brief Class for Proximity Sensor VL53L0X
joelvonrotz 0:11ad6aaed10a 22 *
joelvonrotz 0:11ad6aaed10a 23 * The VL53L0X is a laser based proximity sensor which can measure up to 2m.
joelvonrotz 0:11ad6aaed10a 24 * This library is a wrapper for the API from STMicrocontrollers and the goal of this
joelvonrotz 0:11ad6aaed10a 25 * library is the easier access to this sensor.
joelvonrotz 0:11ad6aaed10a 26 *
joelvonrotz 0:11ad6aaed10a 27 * Something really cool about these sensors is the ability to change the I2C-address.
joelvonrotz 0:11ad6aaed10a 28 * So you can hook multiple, identical sensors on the same I2C-line.
joelvonrotz 0:11ad6aaed10a 29 *
joelvonrotz 0:11ad6aaed10a 30 * <h2>examples</h2>
joelvonrotz 0:11ad6aaed10a 31 *
joelvonrotz 0:11ad6aaed10a 32 * <h3>One Sensor</h3>
joelvonrotz 0:11ad6aaed10a 33 * Using one sensor is pretty simple, connect the I2C-pins to the sensor (Shutdown should be pulled high
joelvonrotz 0:11ad6aaed10a 34 * using a pull-up resistor).
joelvonrotz 0:11ad6aaed10a 35 *
joelvonrotz 0:11ad6aaed10a 36 * <code>
joelvonrotz 0:11ad6aaed10a 37 * #include "mbed.h"
joelvonrotz 0:11ad6aaed10a 38 * #include "VL53L0X.h"
joelvonrotz 0:11ad6aaed10a 39 *
joelvonrotz 0:11ad6aaed10a 40 * I2C i2c(p9, p10);
joelvonrotz 0:11ad6aaed10a 41 * VL53L0X vl_sensor(&i2c);
joelvonrotz 0:11ad6aaed10a 42 * DigitalOut vl_shutdown(p11);
joelvonrotz 0:11ad6aaed10a 43 * Serial usb(USBTX, USBRX, 115200);
joelvonrotz 0:11ad6aaed10a 44 *
joelvonrotz 0:11ad6aaed10a 45 * int main(void)
joelvonrotz 0:11ad6aaed10a 46 * {
joelvonrotz 0:11ad6aaed10a 47 * usb.printf("Single VL53L0X\n\n\r");
joelvonrotz 0:11ad6aaed10a 48 *
joelvonrotz 0:11ad6aaed10a 49 * vl_shutdown = 1; //turn VL53L0X on
joelvonrotz 0:11ad6aaed10a 50 * vl_sensor.init();
joelvonrotz 0:11ad6aaed10a 51 * vl_sensor.setModeContinuous();
joelvonrotz 0:11ad6aaed10a 52 * vl_sensor.startContinuous();
joelvonrotz 0:11ad6aaed10a 53 * while(1)
joelvonrotz 0:11ad6aaed10a 54 * {
joelvonrotz 0:11ad6aaed10a 55 * usb.printf("%4imm\n\r", vl_sensor.getRangeMillimeters());
joelvonrotz 0:11ad6aaed10a 56 * }
joelvonrotz 0:11ad6aaed10a 57 * }
joelvonrotz 0:11ad6aaed10a 58 * </code>
joelvonrotz 0:11ad6aaed10a 59 *
joelvonrotz 0:11ad6aaed10a 60 * <h3>Multiple Sensors</h3>
joelvonrotz 0:11ad6aaed10a 61 * Using one sensor is pretty simple, connect the I2C-pins to the sensor (Shutdown should be pulled high
joelvonrotz 0:11ad6aaed10a 62 * using a pull-up resistor)
joelvonrotz 0:11ad6aaed10a 63 *
joelvonrotz 0:11ad6aaed10a 64 * <code>
joelvonrotz 0:11ad6aaed10a 65 * #include "mbed.h"
joelvonrotz 0:11ad6aaed10a 66 * #include "VL53L0X.h"
joelvonrotz 0:11ad6aaed10a 67 *
joelvonrotz 0:11ad6aaed10a 68 * I2C i2c(p9, p10);
joelvonrotz 0:11ad6aaed10a 69 * VL53L0X vl_sensors[6] = {(&i2c),(&i2c),(&i2c),(&i2c),(&i2c),(&i2c)};
joelvonrotz 0:11ad6aaed10a 70 * BusOut vl_shutdown(p11,p12,p13,p14,p15,p16);
joelvonrotz 0:11ad6aaed10a 71 * Serial usb(USBTX, USBRX, 115200);
joelvonrotz 0:11ad6aaed10a 72 *
joelvonrotz 0:11ad6aaed10a 73 * int main(void)
joelvonrotz 0:11ad6aaed10a 74 * {
joelvonrotz 0:11ad6aaed10a 75 * usb.printf("Multiple VL53L0X\n\n\r");
joelvonrotz 0:11ad6aaed10a 76 *
joelvonrotz 0:11ad6aaed10a 77 * uint8_t expander_shutdown_mask = 1;
joelvonrotz 0:11ad6aaed10a 78 * for(uint8_t i = 0; i < 6 ; i++)
joelvonrotz 0:11ad6aaed10a 79 * {
joelvonrotz 0:11ad6aaed10a 80 * vl_shutdown = expander_shutdown_mask;
joelvonrotz 0:11ad6aaed10a 81 * expander_shutdown_mask = (expander_shutdown_mask << 1) + 1;
joelvonrotz 0:11ad6aaed10a 82 * vl_sensors[i].init();
joelvonrotz 0:11ad6aaed10a 83 * vl_sensors[i].setDeviceAddress(0x40 + i);
joelvonrotz 0:11ad6aaed10a 84 * vl_sensors[i].setModeContinuous();
joelvonrotz 0:11ad6aaed10a 85 * vl_sensors[i].startContinuous();
joelvonrotz 0:11ad6aaed10a 86 * }
joelvonrotz 0:11ad6aaed10a 87 * uint16_t results[6];
joelvonrotz 0:11ad6aaed10a 88 * while(1)
joelvonrotz 0:11ad6aaed10a 89 * {
joelvonrotz 0:11ad6aaed10a 90 * for(uint8_t i = 0; i < 6 ; i++)
joelvonrotz 0:11ad6aaed10a 91 * {
joelvonrotz 0:11ad6aaed10a 92 * results[i] = vl_sensors[i].getRangeMillimeters();
joelvonrotz 0:11ad6aaed10a 93 * }
joelvonrotz 0:11ad6aaed10a 94 * 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]);
joelvonrotz 0:11ad6aaed10a 95 * }
joelvonrotz 0:11ad6aaed10a 96 * }
joelvonrotz 0:11ad6aaed10a 97 * </code>
joelvonrotz 0:11ad6aaed10a 98 *
joelvonrotz 0:11ad6aaed10a 99 * <strong>NOTE</strong> - The library is gigantic, so it is recommended to use this library
joelvonrotz 0:11ad6aaed10a 100 * on devices with enough storage.
joelvonrotz 0:11ad6aaed10a 101 *
joelvonrotz 0:11ad6aaed10a 102 */
joelvonrotz 0:11ad6aaed10a 103 class VL53L0X
joelvonrotz 0:11ad6aaed10a 104 {
joelvonrotz 0:11ad6aaed10a 105 public:
joelvonrotz 0:11ad6aaed10a 106 VL53L0X(I2C* p_i2c_device);
joelvonrotz 0:11ad6aaed10a 107
joelvonrotz 0:11ad6aaed10a 108 bool setDeviceAddress(uint8_t address = ADDRESS_DEFAULT);
joelvonrotz 0:11ad6aaed10a 109
joelvonrotz 0:11ad6aaed10a 110 bool init();
joelvonrotz 0:11ad6aaed10a 111
joelvonrotz 0:11ad6aaed10a 112 bool setModeContinuous();
joelvonrotz 0:11ad6aaed10a 113 bool startContinuous();
joelvonrotz 0:11ad6aaed10a 114 uint16_t getRangeMillimeters();
joelvonrotz 0:11ad6aaed10a 115 private:
joelvonrotz 0:11ad6aaed10a 116 VL53L0X_Dev_t m_vl_dev;
joelvonrotz 0:11ad6aaed10a 117 VL53L0X_RangingMeasurementData_t m_vl_results,m_old_results;
joelvonrotz 0:11ad6aaed10a 118
joelvonrotz 0:11ad6aaed10a 119 VL53L0X_Version_t m_vl_version;
joelvonrotz 0:11ad6aaed10a 120 VL53L0X_DeviceInfo_t m_vl_deviceinfo;
joelvonrotz 0:11ad6aaed10a 121
joelvonrotz 0:11ad6aaed10a 122 };
joelvonrotz 0:11ad6aaed10a 123
joelvonrotz 0:11ad6aaed10a 124 #endif /* */