Sfoglia il codice sorgente

Fixed BMP280 problems

Victor 3 anni fa
parent
commit
a913ea6428
3 ha cambiato i file con 10 aggiunte e 4 eliminazioni
  1. 1 1
      interfaces/I2CSensor.c
  2. 8 1
      sensors/BMP280.c
  3. 1 2
      unitemp.c

+ 1 - 1
interfaces/I2CSensor.c

@@ -5,7 +5,7 @@ static uint8_t sensors_count = 0;
 uint8_t unitemp_i2c_readReg(I2CSensor* i2c_sensor, uint8_t reg) {
     //Блокировка шины
     furi_hal_i2c_acquire(i2c_sensor->i2c);
-    uint8_t buff[1];
+    uint8_t buff[1] = {0};
     furi_hal_i2c_read_mem(i2c_sensor->i2c, i2c_sensor->currentI2CAdr << 1, reg, buff, 1, 10);
     furi_hal_i2c_release(i2c_sensor->i2c);
     return buff[0];

+ 8 - 1
sensors/BMP280.c

@@ -198,13 +198,20 @@ UnitempStatus unitemp_BMP280_update(Sensor* sensor) {
         bmp280_readCalValues(i2c_sensor);
     }
 
+    uint8_t buff[3];
+    //Проверка инициализированности датчика
+    unitemp_i2c_readRegArray(i2c_sensor, 0xF4, 2, buff);
+    if(buff[0] == 0) {
+        FURI_LOG_W(APP_NAME, "Sensor %s is not initialized!", sensor->name);
+        return UT_ERROR;
+    }
+
     while(bmp280_isMeasuring(sensor)) {
         if(furi_get_tick() - t > 100) {
             return UT_TIMEOUT;
         }
     }
 
-    uint8_t buff[3];
     if(!unitemp_i2c_readRegArray(i2c_sensor, 0xFA, 3, buff)) return UT_TIMEOUT;
     int32_t adc_T = ((int32_t)buff[0] << 12) | ((int32_t)buff[1] << 4) | ((int32_t)buff[2] >> 4);
     if(!unitemp_i2c_readRegArray(i2c_sensor, 0xF7, 3, buff)) return UT_TIMEOUT;

+ 1 - 2
unitemp.c

@@ -8,13 +8,12 @@
 
 /* ****************************** Интерфейс ****************************** */
 //TODO: В меню выбора нового датчика добавить помогалку выбора датчика
+//TODO: Help, about
 //TODO: Добавить настройку единицы измерения давления
 //TODO: Ограничивать длину имени датчика только тогда, когда имя действительно не вмещается
 //TODO: Обновлять данные только с тех датчиков, которые присутствуют на экране
 
 /* ******************************* Датчики ******************************* */
-//TODO: Исправить зависание BMP280
-
 //TODO: Ограничение на добавление датчика I2C с адресом уже имеющегося датчика
 //TODO: BMP280 SPI