From 504286b30ff0ee5a5d9bea3df81af1c2762bacb8 Mon Sep 17 00:00:00 2001 From: Fisch Date: Mon, 13 May 2024 20:32:14 +0200 Subject: [PATCH] add valueerror debug outputs --- include/ec.h | 6 +++--- include/waterlevel.h | 36 ++++++++++++++++++++++++----------- include/wifi_functions.h | 1 - src/main.cpp | 41 +++++++++++++++++++++++++++++++++++++++- 4 files changed, 68 insertions(+), 16 deletions(-) diff --git a/include/ec.h b/include/ec.h index 2ab7595..59d7991 100644 --- a/include/ec.h +++ b/include/ec.h @@ -224,10 +224,10 @@ void ec_loop(unsigned long loopmillis) { last_read_ec=loopmillis; if (loopmillis>ec_last_change_relay+EC_RELAY_SWITCH_SETTLETIME) { //values have settled - Serial.print("Get ADC Reading"); + //Serial.print("Get ADC Reading"); uint16_t value = ADS.readADC(EC_ADS_CHANNEL); - Serial.print(". Write to pos "); - Serial.println(ec_array_pos); + //Serial.print(". Write to pos "); + //Serial.println(ec_array_pos); diff --git a/include/waterlevel.h b/include/waterlevel.h index af51f12..68c1710 100644 --- a/include/waterlevel.h +++ b/include/waterlevel.h @@ -42,8 +42,8 @@ VL53L0X sensorA; float waterlevelAMean_array[WATERLEVELMEAN_SIZE]; uint16_t waterlevelAMean_array_pos=0; -float waterlevelA=WATERLEVEL_UNAVAILABLE; //distance from floor to water surface [mm] -float watervolumeA=WATERLEVEL_UNAVAILABLE; //calculated Volume in Reservoir +float waterlevelA=WATERLEVEL_UNAVAILABLE; +float watervolumeA=WATERLEVEL_UNAVAILABLE; //Calibration @@ -102,16 +102,30 @@ float waterlevelB_heightToVolume(float distance); mqttValueTiming timing_waterlevelA; mqttValueTiming timing_waterlevelB; -void waterlevel_setup() { - - +void waterlevel_shutdownSensors() { pinMode(PIN_VL53L0X_XSHUT_A, OUTPUT); digitalWrite(PIN_VL53L0X_XSHUT_A, LOW); //pull to GND pinMode(PIN_VL53L0X_XSHUT_B, OUTPUT); digitalWrite(PIN_VL53L0X_XSHUT_B, LOW); //pull to GND - +} +void waterlevel_enableSensor(uint8_t sensorid) { + switch (sensorid){ + case 0: + pinMode(PIN_VL53L0X_XSHUT_A, INPUT); //Enable Sensor A + break; + case 1: + pinMode(PIN_VL53L0X_XSHUT_B, INPUT); //Enable Sensor B + break; + } +} + +void waterlevel_setup() { + + + waterlevel_shutdownSensors(); + delay(100); @@ -162,14 +176,14 @@ void waterlevel_setup() { timing_waterlevelA.maxtime=60*60*1000; timing_waterlevelB.minchange=0.0; - timing_waterlevelB.maxchange=3.0; - timing_waterlevelB.mintime=30*000; + timing_waterlevelB.maxchange=0.5; + timing_waterlevelB.mintime=10*000; timing_waterlevelB.maxtime=60*60*1000; - pinMode(PIN_VL53L0X_XSHUT_B, INPUT); //Enable Sensor B first, to change its address + waterlevel_enableSensor(1); //1==B //Enable Sensor B first, to change its address delay(50); - Wire.begin(); + Wire.begin(21,22); Serial.print("I2C Clock Speed="); Serial.println(Wire.getClock()); @@ -212,7 +226,7 @@ void waterlevel_setup() { // Stop driving this sensor's XSHUT low. This should allow the carrier // board to pull it high. (We do NOT want to drive XSHUT high since it is // not level shifted.) Then wait a bit for the sensor to start up. - pinMode(PIN_VL53L0X_XSHUT_A, INPUT); + waterlevel_enableSensor(0); delay(50); //Initialize Sensor A after SensorB's address was changed diff --git a/include/wifi_functions.h b/include/wifi_functions.h index 07d16e7..1f199c2 100644 --- a/include/wifi_functions.h +++ b/include/wifi_functions.h @@ -60,7 +60,6 @@ void connect() { client.subscribe((String)client_id+"/ec/trigger"); client.subscribe((String)client_id+"/errorack"); client.subscribe((String)client_id+"/reboot"); - // client.unsubscribe("/hello"); } diff --git a/src/main.cpp b/src/main.cpp index 08aa4d6..1f9df7f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,6 +5,7 @@ bool valueError=false; unsigned long last_check=0; + #include "wifi_functions.h" bool debug=false; //print Serial information @@ -23,7 +24,6 @@ bool valuesStabilized=false; //gets set true when values are stable (avaeraging #include "helpfunctions.h" #include "ADS1X15.h" -ADS1115 ADS(0x48); // ######## Temperature @@ -35,6 +35,7 @@ ADS1115 ADS(0x48); // ######## EC +ADS1115 ADS(0x48); #include "ec.h" @@ -49,6 +50,7 @@ ADS1115 ADS(0x48); + #define PIN_BUTTON 12 #define PIN_LED 13 @@ -69,6 +71,7 @@ void setup() { Serial.println("Setup Waterlevel"); waterlevel_setup(); + //init ADS1115 if (!ADS.begin()) { Serial.println("Error:"); delay(2000); Serial.println("ADS1115 Init Error!"); @@ -118,6 +121,8 @@ void setup() { void loop() { unsigned long loopmillis=millis(); enableTiming=true; //reactivate + + ec_loop(loopmillis); @@ -198,6 +203,22 @@ void loop() { bool _noErrorsDuringLoop=true; if (tempCmean_reservoir_a==DEVICE_DISCONNECTED_C || tempCmean_reservoir_b==DEVICE_DISCONNECTED_C || tempCmean_case==DEVICE_DISCONNECTED_C) { + if (!valueError && valuesStabilized) { //error just appeared + if (tempCmean_reservoir_a==DEVICE_DISCONNECTED_C) { + Serial.println("valueError tempCmean_reservoir_a"); + publishInfo("error/temperature","valueError tempCmean_reservoir_a"); + } + if (tempCmean_reservoir_b==DEVICE_DISCONNECTED_C) { + Serial.println("valueError tempCmean_reservoir_b"); + publishInfo("error/temperature","valueError tempCmean_reservoir_b"); + } + if (tempCmean_case==DEVICE_DISCONNECTED_C) { + Serial.println("valueError tempCmean_case"); + publishInfo("error/temperature","valueError tempCmean_case"); + } + + + } valueError=true; _noErrorsDuringLoop=false; } @@ -207,6 +228,16 @@ void loop() { valueError=true; }*/ if (ec_A==EC_UNAVAILABLE || ec_B==EC_UNAVAILABLE){ + if (!valueError && valuesStabilized) { //error just appeared + if (ec_A==EC_UNAVAILABLE){ + Serial.println("valueError ecA"); + publishInfo("error/ec","valueError ecA"); + } + if (ec_B==EC_UNAVAILABLE){ + Serial.println("valueError ecB"); + publishInfo("error/ec","valueError ecB"); + } + } valueError=true; _noErrorsDuringLoop=false; } @@ -214,10 +245,18 @@ void loop() { if (distanceA_unsuccessful_count>20) { + if (!valueError && valuesStabilized) { //error just appeared + Serial.println("valueError distanceA"); + publishInfo("error/waterlevel","valueError distanceA"); + } valueError=true; _noErrorsDuringLoop=false; } if (distanceB_unsuccessful_count>20) { + if (!valueError && valuesStabilized) { //error just appeared + Serial.println("valueError distanceB"); + publishInfo("error/waterlevel","valueError distanceB"); + } valueError=true; _noErrorsDuringLoop=false; }