From 89a5c28a327cc1e968ffd96ba544759569a24815 Mon Sep 17 00:00:00 2001 From: Paul Wieland
Date: Fri, 27 Dec 2024 12:56:13 -0500 Subject: [PATCH] Change maxDistance former logic assumed it was the last distance found, which turns out to not always be the case. Implementing @dkerr64 logic from https://github.com/ratgdo/homekit-ratgdo32/pull/16 --- components/ratgdo/sensor/ratgdo_sensor.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/components/ratgdo/sensor/ratgdo_sensor.cpp b/components/ratgdo/sensor/ratgdo_sensor.cpp index 77cafab..b97863d 100644 --- a/components/ratgdo/sensor/ratgdo_sensor.cpp +++ b/components/ratgdo/sensor/ratgdo_sensor.cpp @@ -87,12 +87,19 @@ namespace ratgdo { status = this->distance_sensor_.VL53L4CX_GetMultiRangingData(pDistanceData); objCount = pDistanceData->NumberOfObjectsFound; - maxDistance = objCount == 0 ? -1 : pDistanceData->RangeData[objCount - 1].RangeMilliMeter; + for (int i = 0; i < distanceData.NumberOfObjectsFound; i++) { + VL53L4CX_TargetRangeData_t *d = &pDistanceData->RangeData[i]; + if (d->RangeStatus == 0) { + maxDistance = std::max(maxDistance, d->RangeMilliMeter); + } + } + + //maxDistance = objCount == 0 ? -1 : pDistanceData->RangeData[objCount - 1].RangeMilliMeter; /* * if the sensor is pointed at glass, there are many error -1 readings which will fill the * vector with out of range data. The sensor should be sensitive enough to detect the floor * in most situations, but daylight and/or really high ceilings can cause long distance - * measurements to be out of range. + * measurements to be out of range. */ this->parent_->set_distance_measurement(maxDistance);