7 #ifndef __SENSORS_VL53L0X_h__
8 #define __SENSORS_VL53L0X_h__
27 template <u
int8_t ADDR=0x29, u
int16_t TIMEOUT=500, u
int8_t RANGEMODE=RangeMode::SHORT_RANGE, u
int8_t PRECISION= Precision::HIGH_ACCURACY>
30 uint16_t _distance_mm;
34 _vl53l0x.setAddress(ADDR);
36 _present = _vl53l0x.init();
38 _vl53l0x.setTimeout(TIMEOUT);
40 DPRINTLN(F(
"VL53L0X SENSOR "));
42 if (RANGEMODE == LONG_RANGE) {
43 _vl53l0x.setSignalRateLimit(0.1);
44 _vl53l0x.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
45 _vl53l0x.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
52 if (PRECISION == HIGH_SPEED) {
53 _vl53l0x.setMeasurementTimingBudget(20000);
57 if (PRECISION == HIGH_ACCURACY) {
58 _vl53l0x.setMeasurementTimingBudget(200000);
62 if (_present) DPRINTLN(F(
"- OK"));
else DPRINTLN(F(
"- ERROR"));
65 bool measure(__attribute__((unused))
bool async=
false) {
66 if( present() ==
true ) {
67 _distance_mm = _vl53l0x.readRangeSingleMillimeters();
68 DPRINT(
"VL53L0X measure distance = ");DDECLN(_distance_mm);
69 bool timeOut = _vl53l0x.timeoutOccurred();
70 if (timeOut) DPRINTLN(F(
"VL53L0X measure timeout occured"));
76 uint16_t DistanceMM () {
return _distance_mm; }