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@0:11ad6aaed10a, 2019-07-30 (annotated)
- 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?
User | Revision | Line number | New 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 /* */ |