diff --git a/main/inputs.c b/main/inputs.c index 825c8c5..865c2c6 100644 --- a/main/inputs.c +++ b/main/inputs.c @@ -7,6 +7,7 @@ #include "inputs.h" #define MAX_DN18B20_SENSORS 4U +#define ONE_WIRE_LOOPS 2U // try to read the 1-Wire sensors that often #define PERIODIC_INTERVAL 1U // read and compute the inputs every 1sec static const char *TAG = "smart-oil-heater-control-system-inputs"; @@ -157,42 +158,46 @@ void taskInput(void *pvParameters) ESP_LOGW(TAG, "More 1-Wire devices found than expected!"); } - if (ds18x20_measure_and_read_multi(uDS18B20Pin, uOneWireAddresses, sSensorCount, fDS18B20Temps) != ESP_OK) + for (size_t iReadLoop = 0; iReadLoop < ONE_WIRE_LOOPS; iReadLoop++) { - ESP_LOGE(TAG, "1-Wire devices read error"); - } - else - { - for (int j = 0; j < sSensorCount; j++) + if (ds18x20_measure_and_read_multi(uDS18B20Pin, uOneWireAddresses, sSensorCount, fDS18B20Temps) != ESP_OK) { - float temp_c = fDS18B20Temps[j]; - ESP_LOGI(TAG, "Sensor: %08" PRIx64 " reports %lf°C", (uint64_t)uOneWireAddresses[j], temp_c); - - switch ((uint64_t)uOneWireAddresses[j]) + ESP_LOGE(TAG, "1-Wire devices read error"); + } + else + { + for (int j = 0; j < sSensorCount; j++) { - case ((uint64_t)uChamperTempSensorAddr): - sChamperTemperature.fCurrentValue = temp_c; - sChamperTemperature.state = MEASUREMENT_NO_ERROR; - updateAverage(&sChamperTemperature); - break; - case ((uint64_t)uOutdoorTempSensorAddr): - sOutdoorTemperature.fCurrentValue = temp_c; - sOutdoorTemperature.state = MEASUREMENT_NO_ERROR; - updateAverage(&sOutdoorTemperature); - break; - case ((uint64_t)uInletFlowTempSensorAddr): - sInletFlowTemperature.fCurrentValue = temp_c; - sInletFlowTemperature.state = MEASUREMENT_NO_ERROR; - updateAverage(&sInletFlowTemperature); - break; - case ((uint64_t)uReturnFlowTempSensorAddr): - sReturnFlowTemperature.fCurrentValue = temp_c; - sReturnFlowTemperature.state = MEASUREMENT_NO_ERROR; - updateAverage(&sReturnFlowTemperature); - break; - default: - break; + float temp_c = fDS18B20Temps[j]; + ESP_LOGI(TAG, "Sensor: %08" PRIx64 " reports %lf°C", (uint64_t)uOneWireAddresses[j], temp_c); + + switch ((uint64_t)uOneWireAddresses[j]) + { + case ((uint64_t)uChamperTempSensorAddr): + sChamperTemperature.fCurrentValue = temp_c; + sChamperTemperature.state = MEASUREMENT_NO_ERROR; + updateAverage(&sChamperTemperature); + break; + case ((uint64_t)uOutdoorTempSensorAddr): + sOutdoorTemperature.fCurrentValue = temp_c; + sOutdoorTemperature.state = MEASUREMENT_NO_ERROR; + updateAverage(&sOutdoorTemperature); + break; + case ((uint64_t)uInletFlowTempSensorAddr): + sInletFlowTemperature.fCurrentValue = temp_c; + sInletFlowTemperature.state = MEASUREMENT_NO_ERROR; + updateAverage(&sInletFlowTemperature); + break; + case ((uint64_t)uReturnFlowTempSensorAddr): + sReturnFlowTemperature.fCurrentValue = temp_c; + sReturnFlowTemperature.state = MEASUREMENT_NO_ERROR; + updateAverage(&sReturnFlowTemperature); + break; + default: + break; + } } + break; } } }