From feeec8ffd41f3af1ea84e04112b6e959c22847f3 Mon Sep 17 00:00:00 2001 From: Fisch Date: Sat, 4 May 2024 13:04:05 +0200 Subject: [PATCH] add second hydroponic system --- include/ec.h | 4 ++- include/flow.h | 70 ++++++++++++++++++++++++++------------ include/temperature.h | 78 ++++++++++++++++++++++--------------------- include/waterlevel.h | 2 +- src/main.cpp | 61 +++++++++++++++++---------------- 5 files changed, 125 insertions(+), 90 deletions(-) diff --git a/include/ec.h b/include/ec.h index 5ab6a98..073d7c0 100644 --- a/include/ec.h +++ b/include/ec.h @@ -170,10 +170,12 @@ void ec_loop(unsigned long loopmillis) { ec_adc_adjusted=mapf(ec_adc,0,ec_calib_adc,0,ec_reference_adc); if (probeselect==0) { ec=ec_getECfromADC(ec_adc_adjusted, ec_calibration_polynom_A, sizeof(ec_calibration_polynom_A), ec_calibration_linearize_below_adc_A, ec_calibration_linear_lowADC_A, ec_calibration_linear_lowEC_A); + ec25=ec_calculateEC25(ec,tempC_reservoir_a); }else if (probeselect==1) { ec=ec_getECfromADC(ec_adc_adjusted, ec_calibration_polynom_B, sizeof(ec_calibration_polynom_B), ec_calibration_linearize_below_adc_B, ec_calibration_linear_lowADC_B, ec_calibration_linear_lowEC_B); + ec25=ec_calculateEC25(ec,tempC_reservoir_b); } - ec25=ec_calculateEC25(ec,tempC_reservoir); + //Serial.println("DEBUG: EC OK"); }else{ ec_calib_adc=EC_ADC_UNAVAILABLE; diff --git a/include/flow.h b/include/flow.h index 4a2aa8e..b79d1b4 100644 --- a/include/flow.h +++ b/include/flow.h @@ -1,44 +1,72 @@ #ifndef _FLOW_H_ #define _FLOW_H_ -mqttValueTiming timing_flow; +mqttValueTiming timing_flow_a; +mqttValueTiming timing_flow_b; -#define FLOW_PIN 19 -uint16_t flow_counter=0; //maximum counts/s measured with Eden 128 Pump was 171 -void IRAM_ATTR isr_flow(); -unsigned long last_read_flow=0; +#define FLOW_A_PIN 16 +#define FLOW_B_PIN 17 +uint16_t flow_a_counter=0; //maximum counts/s measured with Eden 128 Pump was 171 +uint16_t flow_b_counter=0; //maximum counts/s measured with Eden 128 Pump was 171 +void IRAM_ATTR isr_flow_a(); +void IRAM_ATTR isr_flow_b(); +unsigned long last_read_flow_a=0; +unsigned long last_read_flow_b=0; #define READINTERVAL_FLOW 10000 float flow_factor=7.5; //F=7.5*flowrate[L/min] -float flow; +float flow_a; +float flow_b; -uint32_t flow_counter_sum=0; +uint32_t flow_a_counter_sum=0; +uint32_t flow_b_counter_sum=0; void flow_setup() { - timing_flow.minchange=0.0; - timing_flow.maxchange=0.3; - timing_flow.mintime=10*000; - timing_flow.maxtime=30*60*1000; + timing_flow_a.minchange=0.0; + timing_flow_a.maxchange=0.3; + timing_flow_a.mintime=10*000; + timing_flow_a.maxtime=30*60*1000; - pinMode(FLOW_PIN, INPUT_PULLUP); - attachInterrupt(FLOW_PIN, isr_flow, CHANGE); + timing_flow_b.minchange=0.0; + timing_flow_b.maxchange=0.3; + timing_flow_b.mintime=10*000; + timing_flow_b.maxtime=30*60*1000; + + pinMode(FLOW_A_PIN, INPUT_PULLUP); + pinMode(FLOW_B_PIN, INPUT_PULLUP); + attachInterrupt(FLOW_A_PIN, isr_flow_a, CHANGE); + attachInterrupt(FLOW_B_PIN, isr_flow_b, CHANGE); } void flow_loop(unsigned long loopmillis) { - if (loopmillis>=last_read_flow+READINTERVAL_FLOW) { - flow=flow_counter*1000.0/(loopmillis-last_read_flow)/2.0; //Frequency [Hz] - flow/=flow_factor; //[L/min] + if (loopmillis>=last_read_flow_a+READINTERVAL_FLOW) { + flow_a=flow_a_counter*1000.0/(loopmillis-last_read_flow_a)/2.0; //Frequency [Hz] + flow_a/=flow_factor; //[L/min] - flow_counter=0; - last_read_flow=loopmillis; + flow_a_counter=0; + last_read_flow_a=loopmillis; + } + + if (loopmillis>=last_read_flow_b+READINTERVAL_FLOW) { + flow_b=flow_b_counter*1000.0/(loopmillis-last_read_flow_b)/2.0; //Frequency [Hz] + flow_b/=flow_factor; //[L/min] + + flow_b_counter=0; + last_read_flow_b=loopmillis; } } -void IRAM_ATTR isr_flow() { - flow_counter++; - flow_counter_sum++; +void IRAM_ATTR isr_flow_a() { + flow_a_counter++; + flow_a_counter_sum++; +} + + +void IRAM_ATTR isr_flow_b() { + flow_b_counter++; + flow_b_counter_sum++; } diff --git a/include/temperature.h b/include/temperature.h index d64eb6e..2b2846f 100644 --- a/include/temperature.h +++ b/include/temperature.h @@ -2,8 +2,8 @@ #define _TEMPERATURE_H_ -mqttValueTiming timing_temperature_reservoir; -mqttValueTiming timing_temperature_air; +mqttValueTiming timing_temperature_reservoir_a; +mqttValueTiming timing_temperature_reservoir_b; mqttValueTiming timing_temperature_case; #include @@ -28,17 +28,19 @@ DallasTemperature sensors(&oneWire); #define TEMPMEAN_SIZE 16 uint16_t tempCmean_pos=0; // arrays to hold device addresses -DeviceAddress thermometerReservoir={0x28,0xFF,0x30,0xBA,0x85,0x16,0x03,0xB5}; -float tempC_reservoir; //last reading -float tempCmean_reservoir_array[TEMPMEAN_SIZE]; -float tempCmean_reservoir=DEVICE_DISCONNECTED_C; +DeviceAddress thermometerReservoirA={0x28,0xFF,0x6F,0x19,0x72,0x16,0x05,0x44}; +float tempC_reservoir_a; //last reading +float tempCmean_reservoir_a_array[TEMPMEAN_SIZE]; +float tempCmean_reservoir_a=DEVICE_DISCONNECTED_C; -DeviceAddress thermometerAir={0x28,0xFF,0x6C,0x1C,0x72,0x16,0x05,0x8B}; -float tempC_air; //last reading -float tempCmean_air_array[TEMPMEAN_SIZE]; -float tempCmean_air=DEVICE_DISCONNECTED_C; +//DeviceAddress thermometerAir={0x28,0xFF,0x6C,0x1C,0x72,0x16,0x05,0x8B}; + +DeviceAddress thermometerReservoirB={0x28,0xFF,0x30,0xBA,0x85,0x16,0x03,0xB5}; +float tempC_reservoir_b; //last reading +float tempCmean_reservoir_b_array[TEMPMEAN_SIZE]; +float tempCmean_reservoir_b=DEVICE_DISCONNECTED_C; DeviceAddress thermometerCase={0x10,0x7E,0x22,0x99,0x01,0x08,0x00,0xA4}; float tempC_case; //last reading @@ -49,15 +51,16 @@ float tempCmean_case=DEVICE_DISCONNECTED_C; void temperature_setup() { - timing_temperature_reservoir.minchange=0.0; - timing_temperature_reservoir.maxchange=0.5; - timing_temperature_reservoir.mintime=2*1000; - timing_temperature_reservoir.maxtime=60*60*1000; + timing_temperature_reservoir_a.minchange=0.0; + timing_temperature_reservoir_a.maxchange=0.5; + timing_temperature_reservoir_a.mintime=2*1000; + timing_temperature_reservoir_a.maxtime=60*60*1000; + + timing_temperature_reservoir_b.minchange=0.0; + timing_temperature_reservoir_b.maxchange=0.5; + timing_temperature_reservoir_b.mintime=2*1000; + timing_temperature_reservoir_b.maxtime=60*60*1000; - timing_temperature_air.minchange=0.0; - timing_temperature_air.maxchange=0.5; - timing_temperature_air.mintime=2*1000; - timing_temperature_air.maxtime=60*60*1000; timing_temperature_case.minchange=0.0; timing_temperature_case.maxchange=0.5; @@ -66,8 +69,8 @@ void temperature_setup() { //initialize mean array for (uint16_t i=0;i