@@ -120,38 +120,54 @@ class WipperSnapper_I2C_Driver_VL53L4CX : public WipperSnapper_I2C_Driver {
120
120
@brief Gets the VL53L4CX's current proximity (first or second object).
121
121
@param proximityEvent
122
122
Pointer to an Adafruit_Sensor event.
123
- @param index
124
- Index of the proximity to get (0 or 1).
123
+ @param whichObject
124
+ Index of the proximity object to get (0, or 1 for second
125
+ object).
125
126
@returns True if the proximity was obtained successfully, False
126
127
otherwise.
127
128
*/
128
129
/* ******************************************************************************/
129
- bool getProximity (sensors_event_t *proximityEvent, int index = 0 ) {
130
+ bool getProximity (sensors_event_t *proximityEvent, int whichObject = 0 ) {
130
131
VL53L4CX_MultiRangingData_t MultiRangingData;
131
132
VL53L4CX_MultiRangingData_t *pMultiRangingData = &MultiRangingData;
132
133
uint8_t NewDataReady = 0 ;
133
134
int status;
135
+
134
136
// Start fresh reading, seemed to be accepting stale value
135
137
status = _VL53L4CX->VL53L4CX_ClearInterruptAndStartMeasurement ();
138
+ if (status != VL53L4CX_ERROR_NONE) {
139
+ WS_DEBUG_PRINT (
140
+ " VL53L4CX Error clearing interrupt and starting measurement: " );
141
+ { USBSerial.println (status); };
142
+ return false ;
143
+ }
136
144
WS_DEBUG_PRINT (" Waiting for VL53L4CX data ready..." );
137
145
delay (VL53_READING_DELAY);
138
146
139
147
awaitDataReady (status, NewDataReady);
148
+
140
149
if ((status == VL53L4CX_ERROR_NONE) && (NewDataReady != 0 )) {
150
+ // data ready - still to verify if one or two objects found and which
141
151
status = _VL53L4CX->VL53L4CX_GetMultiRangingData (pMultiRangingData);
142
152
int no_of_object_found = pMultiRangingData->NumberOfObjectsFound ;
143
- if (no_of_object_found - 1 < index) {
153
+
154
+ // zero based index, return NaN / (Object not found) if too few objects
155
+ if (no_of_object_found - 1 < whichObject) {
144
156
WS_DEBUG_PRINT (" Object not found at index #" );
145
- WS_DEBUG_PRINT (index );
157
+ WS_DEBUG_PRINT (whichObject );
146
158
WS_DEBUG_PRINTLN (" , returning NaN" );
147
159
proximityEvent->data [0 ] = NAN;
148
160
return true ;
149
161
}
150
- bool retVal = updateDataPointIfValid (pMultiRangingData->RangeData [index],
151
- proximityEvent);
152
- return retVal;
162
+
163
+ // take the first or second detected object from ranging data, verify if
164
+ // valid and then set the event data in proximityEvent or return false
165
+ return updateDataPointIfValid (pMultiRangingData->RangeData [whichObject],
166
+ proximityEvent);
167
+
153
168
} else {
154
- WS_DEBUG_PRINT (" VL53L4CX Error: " );
169
+ // error or no data ready
170
+ WS_DEBUG_PRINT (" VL53L4CX Error checking for data ready: " );
155
171
WS_DEBUG_PRINTLN (status);
156
172
}
157
173
return false ;
@@ -170,9 +186,7 @@ class WipperSnapper_I2C_Driver_VL53L4CX : public WipperSnapper_I2C_Driver {
170
186
/* ******************************************************************************/
171
187
bool updateDataPointIfValid (VL53L4CX_TargetRangeData_t rangingData,
172
188
sensors_event_t *proximityEvent) {
173
- if (rangingData.RangeStatus == VL53L4CX_RANGESTATUS_RANGE_VALID ||
174
- rangingData.RangeStatus ==
175
- VL53L4CX_RANGESTATUS_RANGE_VALID_MERGED_PULSE) {
189
+ if (rangingData.RangeStatus == VL53L4CX_RANGESTATUS_RANGE_VALID) {
176
190
int16_t mm = rangingData.RangeMilliMeter ;
177
191
proximityEvent->data [0 ] = (float )mm;
178
192
return true ;
0 commit comments