main/task_bmp280.c

changeset 2
3462a53e548f
parent 1
1c9894662795
--- a/main/task_bmp280.c	Mon Mar 27 22:13:21 2023 +0200
+++ b/main/task_bmp280.c	Tue Mar 28 11:25:46 2023 +0200
@@ -13,8 +13,8 @@
 EventGroupHandle_t		xEventGroupBMP280;		///< Events BMP280 task
 BMP280_State			*bmp280_state;			///< Public state for other tasks
 
-extern bmp280_params_t                  bmp280_params;
-extern bmp280_t                         bmp280_dev;
+extern bmp280_params_t		bmp280_params;
+extern bmp280_t			bmp280_dev;
 
 const int TASK_BMP280_REQUEST_DONE = BIT0;			///< All requests are done.
 const int TASK_BMP280_REQUEST_TB = BIT1;			///< Request Temperature and Barometer
@@ -44,14 +44,15 @@
 void task_bmp280(void *pvParameter)
 {
     float pressure, temperature, humidity;
+    int		error = 0;
 
     ESP_LOGI(TAG, "Starting task BMP280 sda=%d scl=%d", CONFIG_I2C_MASTER_SDA, CONFIG_I2C_MASTER_SCL);
     bmp280_state = malloc(sizeof(BMP280_State));
     
-    bmp280_state->bmp280.valid = false;
-    bmp280_state->bmp280.fake = false;
-    bmp280_state->bmp280.address = 0;
-    bmp280_state->bmp280.error = BMP280_ERR_NONE;
+    bmp280_state->valid = false;
+    bmp280_state->fake = (bmp280_dev.i2c_dev.addr == 0) ? true:false;
+    bmp280_state->address = bmp280_dev.i2c_dev.addr;
+    bmp280_state->error = BMP280_ERR_NONE;
 
     /* event handler and event group for this task */
     xEventGroupBMP280 = xEventGroupCreate();
@@ -60,24 +61,48 @@
     /*
      * Task loop forever.
      */
-    ESP_LOGI(TAG, "Starting loop BMP280 sensor");
+    ESP_LOGI(TAG, "Starting loop BMP280 sensor 0x%02x %d", bmp280_state->address, bmp280_state->fake);
     while (1) {
 
 	uxBits = xEventGroupWaitBits(xEventGroupBMP280, TASK_BMP280_REQUEST_TB, pdFALSE, pdFALSE, portMAX_DELAY );
 
 	if (uxBits & TASK_BMP280_REQUEST_TB) {
 
-	    ESP_LOGI(TAG, "Requested BMP280 readings");
+	    if (! bmp280_state->fake) {
+		/* Real sensor is present */
+		error = bmp280_read_float(&bmp280_dev, &temperature, &pressure, &humidity);
+		if (xSemaphoreTake(xSemaphoreBMP280, 25) == pdTRUE) {
+		    if (error == ESP_OK) {
+			bmp280_state->error = BMP280_ERR_NONE;
+			bmp280_state->valid = true;
+			bmp280_state->temperature = temperature;
+			bmp280_state->pressure = pressure;
+			bmp280_state->humidity = humidity;
+		    } else {
+			bmp280_state->error = BMP280_ERR_READ;
+			bmp280_state->valid = false;
+			bmp280_state->temperature = 0;
+			bmp280_state->pressure = 0;
+			bmp280_state->humidity = 0;
+		    }
+		    xSemaphoreGive(xSemaphoreBMP280);
+		}
+	    } else {
+		/* Use fake values */
+		if (xSemaphoreTake(xSemaphoreBMP280, 25) == pdTRUE) {
+		    bmp280_state->error = BMP280_ERR_NONE;
+                    bmp280_state->valid = true;
+		    bmp280_state->temperature = 21.23;
+                    bmp280_state->pressure = 101360;
+                    bmp280_state->humidity = 0;
+		    xSemaphoreGive(xSemaphoreBMP280);
+		}
+	    }
 
-	    if (bmp280_read_float(&bmp280_dev, &temperature, &pressure, &humidity) != ESP_OK) {
-		ESP_LOGI(TAG, "Temperature/pressure reading failed");
-	    } else {
-		ESP_LOGI(TAG, "Pressure: %.2f Pa, Temperature: %.2f C", pressure, temperature);
-	    }
 	    xEventGroupClearBits(xEventGroupBMP280, TASK_BMP280_REQUEST_TB);
 	    xEventGroupSetBits(xEventGroupBMP280, TASK_BMP280_REQUEST_DONE);
 #if 1
-//	    ESP_LOGI(TAG, "Battery    raw: %4d, atten: %d  %.3f volt, error: %d", i2c_reading, atten, i2c_state->Batt_voltage / 1000.0, i2c_state->Batt_error);
+	    ESP_LOGI(TAG, "  TB: %.3f C, %.1f hPa, error: %d", bmp280_state->temperature, bmp280_state->pressure / 100, bmp280_state->error);
 #endif
 	}
     }

mercurial