@@ -59,6 +59,12 @@ static Adafruit_INA219 INA219(TELEM_INA219_ADDRESS);
5959static Adafruit_MLX90614 MLX90614;
6060#endif
6161
62+ #if ENV_INCLUDE_VL53L0X
63+ #define TELEM_VL53L0X_ADDRESS 0x29 // VL53L0X time-of-flight distance sensor I2C address
64+ #include < Adafruit_VL53L0X.h>
65+ static Adafruit_VL53L0X VL53L0X;
66+ #endif
67+
6268#if ENV_INCLUDE_GPS && RAK_BOARD
6369static uint32_t gpsResetPin = 0 ;
6470static bool i2cGPSFlag = false ;
@@ -169,6 +175,16 @@ bool EnvironmentSensorManager::begin() {
169175 }
170176 #endif
171177
178+ #if ENV_INCLUDE_VL53L0X
179+ if (VL53L0X.begin (TELEM_VL53L0X_ADDRESS, false , TELEM_WIRE)) {
180+ MESH_DEBUG_PRINTLN (" Found VL53L0X at address: %02X" , TELEM_VL53L0X_ADDRESS);
181+ VL53L0X_initialized = true ;
182+ } else {
183+ VL53L0X_initialized = false ;
184+ MESH_DEBUG_PRINTLN (" VL53L0X was not found at I2C address %02X" , TELEM_VL53L0X_ADDRESS);
185+ }
186+ #endif
187+
172188 return true ;
173189}
174190
@@ -256,6 +272,18 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen
256272 }
257273 #endif
258274
275+ #if ENV_INCLUDE_VL53L0X
276+ if (VL53L0X_initialized) {
277+ VL53L0X_RangingMeasurementData_t measure;
278+ VL53L0X.rangingTest (&measure, false ); // pass in 'true' to get debug data
279+ if (measure.RangeStatus != 4 ) { // phase failures
280+ telemetry.addDistance (TELEM_CHANNEL_SELF, measure.RangeMilliMeter / 1000 .0f ); // convert mm to m
281+ } else {
282+ telemetry.addDistance (TELEM_CHANNEL_SELF, 0 .0f ); // no valid measurement
283+ }
284+ }
285+ #endif
286+
259287 }
260288
261289 return true ;
0 commit comments