Temporary white splash screen. Select DS18B20 sensor per unit. Changed units result logging

Sun, 17 Nov 2019 12:58:39 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Sun, 17 Nov 2019 12:58:39 +0100
changeset 34
495b7eafbf5a
parent 33
331e7f700971
child 35
090b9d36b7a1

Temporary white splash screen. Select DS18B20 sensor per unit. Changed units result logging

main/co2meter.c file | annotate | diff | comparison | revisions
main/config.c file | annotate | diff | comparison | revisions
main/config.h file | annotate | diff | comparison | revisions
main/task_user.c file | annotate | diff | comparison | revisions
--- a/main/co2meter.c	Tue Nov 12 21:57:40 2019 +0100
+++ b/main/co2meter.c	Sun Nov 17 12:58:39 2019 +0100
@@ -14,6 +14,7 @@
 time_t                          	now;                            ///< Current time
 struct tm                       	timeinfo;                       ///< Current time structure
 char                            	strftime_buf[64];               ///< Time buffer
+int					num_sensors = 0;		///< Detected DS18B20 sensors
 static RTC_DATA_ATTR struct timeval	sleep_enter_time;
 static TaskHandle_t			xTaskDS18B20 = NULL;
 static TaskHandle_t			xTaskADC = NULL;
@@ -189,7 +190,7 @@
 			ESP_LOGI(TAG, "Loop timer: Wait MQTT");
 
 			uint32_t temp[DS18B20_MAX];
-			int state[DS18B20_MAX], i, num_sensors = 0;
+			int state[DS18B20_MAX], i;
 			char rom_code[DS18B20_MAX][17];
 			for (i = 0; i < DS18B20_MAX; i++) {
 			    temp[i] = 0;
@@ -197,6 +198,7 @@
 			    rom_code[i][0] = '\0';
 			}
 			/* Copy results from all connected DS18B20 sensors */
+			num_sensors = 0;
 			if (xSemaphoreTake(xSemaphoreDS18B20, 10) == pdTRUE) {
 			    num_sensors = ds18b20_state->num_sensors;
 			    for (i = 0; i < num_sensors; i++) {
@@ -236,10 +238,10 @@
 				    if (P < 0)
 				    	P = 0;
 				    units[i].pressure = P;
-printf("%d volt: %d batt: %d scale: %d  mbar: %d\n", i, units[i].pressure_voltage, adc_state->Batt_voltage, 
-		units[i].pressure_voltage / (adc_state->Batt_voltage / 1000) - units[i].pressure_zero, P);
-// Verbruik 10 mA
-// Setup tijd max 2 mS
+				    ESP_LOGI(TAG, "%d vb:%.3f vp:%.3f zero:%d scale:%3d mbar:%4d t:%6.3f %s", 
+					i, adc_state->Batt_voltage / 1000.0, units[i].pressure_voltage / 1000.0, units[i].pressure_zero, 
+					units[i].pressure_voltage / (adc_state->Batt_voltage / 1000) - units[i].pressure_zero, P,
+					units[i].temperature / 1000.0, units[i].temperature_rom_code);
 				    xSemaphoreGive(xSemaphoreADC);
 			    	} else {
 				    ESP_LOGE(TAG, "ML1_MQTT_CONNECT ADC[%d] lock error", i);
--- a/main/config.c	Tue Nov 12 21:57:40 2019 +0100
+++ b/main/config.c	Sun Nov 17 12:58:39 2019 +0100
@@ -91,6 +91,7 @@
             sprintf(units[i].uuid, "c0ffeeee-dead-beef-caf%d-%02x%02x%02x%02x%02x%02x", i & 3,
                         mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
             sprintf(units[i].alias, "unit%d", (i + 1) & 3);
+	    units[i].pressure_zero = 110;
         }
         write_units();
     } else {
--- a/main/config.h	Tue Nov 12 21:57:40 2019 +0100
+++ b/main/config.h	Sun Nov 17 12:58:39 2019 +0100
@@ -102,6 +102,9 @@
     ML2_ZERO_UNIT1,		///< Unit 1 set zero
     ML2_ZERO_UNIT2,		///< Unit 2 set zero
     ML2_ZERO_UNIT3,		///< Unit 3 set zero
+    ML2_SEL_SENSOR1,		///< Unit 1 select sensor
+    ML2_SEL_SENSOR2,		///< Unit 2 select sensor
+    ML2_SEL_SENSOR3,		///< Unit 3 select sensor
     ML2_SETUP_NETWORK,		///< Network setup
     ML2_SETUP_MQTT,		///< MQTT setup
     ML2_SETUP_WIFI,		///< WiFi setup
--- a/main/task_user.c	Tue Nov 12 21:57:40 2019 +0100
+++ b/main/task_user.c	Sun Nov 17 12:58:39 2019 +0100
@@ -26,6 +26,7 @@
 int					edit_ssid = 0;			///< SSID being edited
 int					num_ssids = 0;			///< Number of SSIDs we know
 struct strStations			editAP;				///< Data of station to edit
+char					sensors[DS18B20_MAX][17];	///< Sensors to select
 
 extern const esp_app_desc_t		*app_desc;
 extern unit_t				units[3];			///< Pressure test units
@@ -39,6 +40,7 @@
 extern int				count_pub;			///< Published MQTT messages in transit
 extern int				Main_Loop1;			///< Main measure loop
 extern int				update_running;			///< If update is running
+extern int				num_sensors;			///< Detected DS18B20 sensors
 
 const int TASK_USER_COLD = BIT0;					///< System cold start
 const int TASK_USER_WAKEUP = BIT1;					///< System wakeup from deepsleep
@@ -330,11 +332,14 @@
  */
 void screen_splash()
 {
-    screen_top("CO2 meter %s", app_desc->version);
+//    screen_top("CO2 meter %s", app_desc->version);
 
-    u8g2_SetFont(&u8g2, u8g2_font_t0_22b_tf);
-    u8g2_uint_t w = u8g2_GetUTF8Width(&u8g2, "Welkom");
-    u8g2_DrawUTF8(&u8g2, (128 - w) / 2,50, "Welkom");
+//    u8g2_SetFont(&u8g2, u8g2_font_t0_22b_tf);
+//    u8g2_uint_t w = u8g2_GetUTF8Width(&u8g2, "Welkom");
+//    u8g2_DrawUTF8(&u8g2, (128 - w) / 2,50, "Welkom");
+
+u8g2_SetDrawColor(&u8g2, 1);
+u8g2_DrawBox(&u8g2, 0, 0, 128, 64);
 
     u8g2_SendBuffer(&u8g2);
     u8g2_SetPowerSave(&u8g2, 0); // wake up display
@@ -430,6 +435,37 @@
 
 
 
+void screen_list_sensors(int no, int sub, int offset)
+{
+    int		i;
+
+    if (xSemaphoreTake(xSemaphoreDS18B20, 10) == pdTRUE) {
+	for (i = 0; i < ds18b20_state->num_sensors; i++) {
+	    strncpy(sensors[i], ds18b20_state->sensor[i].rom_code, 17);
+	    sensors[i][16] = '\0';
+	}
+	xSemaphoreGive(xSemaphoreDS18B20);
+    } else {
+	ESP_LOGE(TAG, "screen_list_sensors() DS18B20 lock error");
+    }
+
+    screen_top("DS18B20 lijst");
+    if (num_sensors == 0) {
+        menu_line(0, 1, 25, "Geen sensors");
+    } else {
+        for (i = 0; i < num_sensors; i++) {
+            menu_line(sub == i, 1, 25 + (i * 12), sensors[i + offset]);
+            if (i == 3)
+                break;
+        }
+        if ((i + offset) == num_sensors)
+            menu_line(sub == i, 1, 25 + (i * 12), "Terug");
+    }
+    u8g2_SendBuffer(&u8g2);
+}
+
+
+
 /**
  * @brief The unit setup screen.
  * @param no The unit index number.
@@ -814,6 +850,14 @@
                 screen_unit_zero(Main_Loop2 - ML2_ZERO_UNIT1, SubMenu);
                 break;
 
+	    case ML2_SEL_SENSOR1:
+	    case ML2_SEL_SENSOR2:
+	    case ML2_SEL_SENSOR3:
+		ESP_LOGI(TAG, "Loop user: Select sensor %d", Main_Loop2 - ML2_SEL_SENSOR1);
+		SubMenu = SubOffset = 0;
+		screen_list_sensors(Main_Loop2 - ML2_SEL_SENSOR1, SubMenu, SubOffset);
+		break;
+
             case ML2_INACTIVE:
 		ESP_LOGI(TAG, "Loop user: Inactive");
 		u8g2_SetPowerSave(&u8g2, 1); // powersave display
@@ -849,6 +893,11 @@
 	case ML2_ZERO_UNIT3:    if (rotate_to_sub(event.state.position, 1, &SubMenu, &SubOffset))
 				    screen_unit_zero(Main_Loop2 - ML2_ZERO_UNIT1, SubMenu);
 				break;
+	case ML2_SEL_SENSOR1:
+	case ML2_SEL_SENSOR2:
+	case ML2_SEL_SENSOR3:	if (rotate_to_sub(event.state.position, num_sensors, &SubMenu, &SubOffset))
+                                    screen_list_sensors(Main_Loop2 - ML2_SEL_SENSOR1, SubMenu, SubOffset);
+				break;
 	case ML2_SETUP_WIFI:	if (rotate_to_sub(event.state.position, 2, &SubMenu, &SubOffset))
 				    screen_wifi_setup(SubMenu);
 				break;
@@ -918,11 +967,13 @@
 		    screen_unit_setup(idx, SubMenu);
 		    if (Main_Loop1 == ML1_DONE)
 			Main_Loop1 = ML1_INIT;
-		}
-		if (SubMenu == 1)
+		} else if (SubMenu == 1) {
 		    New_Loop2 = ML2_ZERO_UNIT1 + idx;
-		if (SubMenu == 3)
+		} else if (SubMenu == 2) {
+		    New_Loop2 = ML2_SEL_SENSOR1 + idx;
+		} else if (SubMenu == 3) {
 		    New_Loop2 = ML2_UNIT1 + idx;
+		}
 		break;
 
 	case ML2_ZERO_UNIT1:
@@ -943,13 +994,26 @@
 			if (Main_Loop1 == ML1_DONE)
 			    Main_Loop1 = ML1_INIT;
 		    }
-		}
-		if (SubMenu == 1) {
+		} else if (SubMenu == 1) {
 		    New_Loop2 = ML2_SETUP_UNIT1 + idx;
 		    SubMenu = 1;
 		}
 		break;
 
+	case ML2_SEL_SENSOR1:
+	case ML2_SEL_SENSOR2:
+	case ML2_SEL_SENSOR3:
+		idx = Main_Loop2 - ML2_SEL_SENSOR1;
+		if ((SubMenu + SubOffset) < num_sensors) {
+		    ESP_LOGI(TAG, "Select sensor %d %s for unit %d", SubMenu + SubOffset, sensors[SubMenu + SubOffset], idx + 1);
+
+		} else {
+		    New_Loop2 = ML2_SETUP_UNIT1 + idx;
+		    SubMenu = 2;
+		    SubOffset = 0;
+		}
+                break;
+
 	case ML2_WIFI:
 		New_Loop2 = ML2_SETUP_WIFI;
 		break;
@@ -957,15 +1021,13 @@
 	case ML2_SETUP_WIFI:
 		if (SubMenu == 0) {
 		    New_Loop2 = ML2_LIST_APS;
-		}
-		if (SubMenu == 1) {
+		} else if (SubMenu == 1) {
 		    edit_ssid = -1;
 		    editAP.SSID[0] = '\0';
 		    editAP.Password[0] = '\0';
 		    SubMenu = SubOffset = 0;
                     New_Loop2 = ML2_EDIT_AP;
-		}
-		if (SubMenu == 2) {
+		} else if (SubMenu == 2) {
 		    New_Loop2 = ML2_WIFI;
 		}
 		break;
@@ -987,12 +1049,10 @@
 		if (SubMenu == 0) {
 		    rotary_editer("SSID", editAP.SSID, "", 16, EDIT_TYPE_TEXT);
 		    screen_edit_ap(SubMenu);
-		}
-		if (SubMenu == 1) {
+		} else if (SubMenu == 1) {
 		    rotary_editer("PSK", editAP.Password, "", 16, EDIT_TYPE_TEXT);
                     screen_edit_ap(SubMenu);
-		}
-		if (SubMenu == 2 || SubMenu == 3) {
+		} else if (SubMenu == 2 || SubMenu == 3) {
 		    update_running = 1; // Block measurements
 		    int timeout = 600;
 		    if (edit_ssid < 0)
@@ -1032,12 +1092,10 @@
 		if (SubMenu == 0) {
                     rotary_editer("Hostnaam", config.hostname, "", 16, EDIT_TYPE_TEXT);
                     screen_network_setup(SubMenu);
-                }
-		if (SubMenu == 1) {
+                } else if (SubMenu == 1) {
                     rotary_editer("NTP server", config.ntp_server, "", 16, EDIT_TYPE_TEXT);
                     screen_network_setup(SubMenu);
-                }
-		if (SubMenu == 2) {
+                } else if (SubMenu == 2) {
                     ESP_LOGI(TAG, "Hostname `%s`", config.hostname);
                     ESP_LOGI(TAG, "NTP server `%s`", config.ntp_server);
                     write_config();
@@ -1053,19 +1111,16 @@
 		if (SubMenu == 0) {
 		    rotary_editer("MQTT server", config.mqtt_server, "", 16, EDIT_TYPE_TEXT);
 		    screen_mqtt_setup(SubMenu);
-		}
-		if (SubMenu == 1) {
+		} else if (SubMenu == 1) {
 		    sprintf(txt, "%d", config.mqtt_port);
 		    rotary_editer("MQTT server poort", txt, "", 6, EDIT_TYPE_INT);
 		    config.mqtt_port = atoi(txt);
 		    screen_mqtt_setup(SubMenu);
-		}
-		if (SubMenu == 2) {
+		} else if (SubMenu == 2) {
 		    rotary_editer("MQTT user", config.mqtt_user, "", 16, EDIT_TYPE_TEXT);
                     rotary_editer("MQTT password", config.mqtt_pwd, "", 16, EDIT_TYPE_TEXT);
 		    screen_mqtt_setup(SubMenu);
-		}
-		if (SubMenu == 3) {
+		} else if (SubMenu == 3) {
 		    ESP_LOGI(TAG, "mqtt_server %s:%d", config.mqtt_server, config.mqtt_port);
 		    ESP_LOGI(TAG, "mqtt_user/pass `%s/%s`", config.mqtt_user, config.mqtt_pwd);
 		    write_config();

mercurial