diff --git a/src/modules/Telemetry/Sensor/SCD4XSensor.cpp b/src/modules/Telemetry/Sensor/SCD4XSensor.cpp index bae0cf12a..26d50ab3e 100644 --- a/src/modules/Telemetry/Sensor/SCD4XSensor.cpp +++ b/src/modules/Telemetry/Sensor/SCD4XSensor.cpp @@ -104,8 +104,18 @@ bool SCD4XSensor::getMetrics(meshtastic_Telemetry *measurement) reClockI2C.setClock(SCD4X_I2C_CLOCK_SPEED); #endif /* SCD4X_I2C_CLOCK_SPEED */ - bool dataReady; - error = scd4x.getDataReadyStatus(dataReady); + bool dataReady = false; + uint8_t dataReadyTries = 0; + + while (!dataReady && (dataReadyTries < SCD4X_MAX_RETRIES)) { + error = scd4x.getDataReadyStatus(dataReady); + if (error != SCD4X_NO_ERROR || !dataReady) { + LOG_WARN("%s: Error collecting data. Retrying", sensorName); + delay(100); + dataReadyTries++; + } + } + if (error != SCD4X_NO_ERROR || !dataReady) { #ifdef SCD4X_I2C_CLOCK_SPEED LOG_DEBUG("%s: restoring clock speed", sensorName); diff --git a/src/modules/Telemetry/Sensor/SCD4XSensor.h b/src/modules/Telemetry/Sensor/SCD4XSensor.h index 065c82a13..f9161942e 100644 --- a/src/modules/Telemetry/Sensor/SCD4XSensor.h +++ b/src/modules/Telemetry/Sensor/SCD4XSensor.h @@ -11,6 +11,7 @@ // Max speed 400kHz #define SCD4X_I2C_CLOCK_SPEED 400000 #define SCD4X_WARMUP_MS 5000 +#define SCD4X_MAX_RETRIES 3 class SCD4XSensor : public TelemetrySensor {