diff --git a/src/main.c b/src/main.c index 290d3a4..2bd897f 100644 --- a/src/main.c +++ b/src/main.c @@ -218,7 +218,7 @@ int main() { if (!(baro=mgos_barometer_create_i2c(i2c, 0x60, BARO_MPL3115))) { LOG(LL_ERROR, ("Cannot create barometer")); } else { - mgos_barometer_set_cache_ttl(baro, 0); + mgos_barometer_set_cache_ttl(baro, 1000); } for (;;) { diff --git a/src/mgos_barometer_mpl3115.c b/src/mgos_barometer_mpl3115.c index 69a8a5c..8b5954a 100644 --- a/src/mgos_barometer_mpl3115.c +++ b/src/mgos_barometer_mpl3115.c @@ -61,11 +61,21 @@ bool mgos_barometer_mpl3115_read(struct mgos_barometer *dev) { } uint8_t val = 0; - while (!(val & 0x80)) { // Data Ready + uint8_t retries=100; + if ((val = mgos_i2c_read_reg_b(dev->i2c, dev->i2caddr, MPL3115_REG_STATUS)) < 0) + return false; + + while (!(val & 0x08) && retries>0) { // Data Ready if ((val = mgos_i2c_read_reg_b(dev->i2c, dev->i2caddr, MPL3115_REG_STATUS)) < 0) { return false; } mgos_usleep(10000); + LOG(LL_DEBUG, ("Snoozing, retries=%d", retries)); + retries--; + } + if (retries==0) { + LOG(LL_ERROR, ("Timed out waiting for data ready")); + return false; } uint32_t pressure;