#include bool debug=true; //print Serial information #include "helpfunctions.h" #include "ADS1X15.h" ADS1115 ADS(0x48); // ######## Temperature #include "temperature.h" // ######## EC #include "ec.h" // ######## Water Level #include "waterlevel.h" // ######## Flow Rate #include "flow.h" // ######## Soilmoisture #include "soilmoisture.h" unsigned long last_check=0; bool valueError=false; #define PIN_BUTTON 12 #define PIN_LED 13 void setup() { pinMode(PIN_BUTTON,INPUT_PULLUP); pinMode(PIN_LED,OUTPUT); digitalWrite(PIN_LED,LOW); Serial.begin(115200); //init ADS1115 if (!ADS.begin()) { Serial.println("Error:"); delay(2000); Serial.println("ADS1115 Init Error!"); } ADS.setGain(0); Serial.println("Setup EC"); ec_setup(); Serial.println("Setup Waterlevel"); waterlevel_setup(); Serial.println("Setup Temperature"); temperature_setup(); Serial.println("Setup Flow"); flow_setup(); Serial.println("Finished Setup"); delay(200); //Test adc to ec function output /* Serial.println(); for (int i=750;i<14183;i+=100) { float _ec=ec_getECfromADC(i); Serial.print(i); Serial.print(","); Serial.print(_ec); Serial.println(); } delay(100000); */ //Serial.println("time,tempReservoir,ECadcCalib,ECadc,ECadcAdjusted,EC,EC25"); //Serial.println("time,tempReservoir,ECadcCalib,ECadc,ECadcAdjusted,sm"); } void loop() { unsigned long loopmillis=millis(); ec_loop(loopmillis); temperature_loop(loopmillis); waterlevel_loop(loopmillis); flow_loop(loopmillis); sm_loop(loopmillis); if (!digitalRead(PIN_BUTTON)) { valueError=false; Serial.println("Reset ValueError flag by user"); digitalWrite(PIN_LED,valueError); delay(100); } if (loopmillis>last_check+2000) { //check values last_check=loopmillis; if (tempCmean_air==DEVICE_DISCONNECTED_C || tempCmean_reservoir==DEVICE_DISCONNECTED_C) { valueError=true; } if (waterlevel==WATERLEVEL_UNAVAILABLE) { valueError=true; } if (sm_mean1==SM_DISCONNECTED || sm_mean2==SM_DISCONNECTED) { valueError=true; } if (ec==EC_UNAVAILABLE){ valueError=true; } digitalWrite(PIN_LED,valueError); if (debug) { Serial.println("_______________________"); Serial.print(millis()/1000.0,2); Serial.println(":"); Serial.print("temperature reservoir,air = "); Serial.print(tempCmean_reservoir); Serial.print(","); Serial.print(tempCmean_air); Serial.println(); Serial.print("sm_mean 1,2,3 = "); Serial.print(sm_mean1); Serial.print(","); Serial.print(sm_mean2); Serial.print(","); Serial.print(sm_mean3); Serial.println(); /* Serial.print("sm_mean 1,2,3 = "); Serial.print(getMean(sm_mean1array,SM_SIZE)); Serial.print(","); Serial.print(getMean(sm_mean2array,SM_SIZE)); Serial.print(","); Serial.print(getMean(sm_mean3array,SM_SIZE)); Serial.println(); Serial.print("sm_max 1,2,3 = "); Serial.print(getMax(sm_mean1array,SM_SIZE)); Serial.print(","); Serial.print(getMax(sm_mean2array,SM_SIZE)); Serial.print(","); Serial.print(getMax(sm_mean3array,SM_SIZE)); Serial.println(); Serial.print("sm_min 1,2,3 = "); Serial.print(getMin(sm_mean1array,SM_SIZE)); Serial.print(","); Serial.print(getMin(sm_mean2array,SM_SIZE)); Serial.print(","); Serial.print(getMin(sm_mean3array,SM_SIZE)); Serial.println(); //Serial.print(getMax(sm_mean3array,SM_SIZE)); Serial.println(); */ Serial.print("Flow = "); Serial.print(flow); Serial.println(); Serial.print("EC ec_calib_adc,ec_adc,ec_adc_adjusted = "); Serial.print(ec_calib_adc); Serial.print(","); Serial.print(ec_adc); Serial.print(","); Serial.print(ec_adc_adjusted); Serial.println(); Serial.print("EC ec,ec25 = "); Serial.print(ec); Serial.print(","); Serial.print(ec25); Serial.println(); Serial.print("Waterlevel="); Serial.print(waterlevel); Serial.println(); } /* Serial.print(millis()/1000.0,2); Serial.print(","); Serial.print(getMeanf(tempCmean_reservoir_array,TEMPMEAN_SIZE)); Serial.print(","); //Serial.print(getMean(sm_mean,SM_SIZE)); Serial.print(","); Serial.print(ec_calib_adc); Serial.print(","); Serial.print(ec_adc); Serial.print(","); Serial.print(ec_adc_adjusted); Serial.print(","); Serial.print(ec); Serial.print(","); Serial.print(ec25); Serial.print(getMean(sm_mean,SM_SIZE)); Serial.println(); if (tempCmean_reservoir!=DEVICE_DISCONNECTED_C){ Serial.print("\t Treservoir="); Serial.print(tempCmean_reservoir); Serial.print("\t Tair="); Serial.print(tempCmean_air); }else{ Serial.print("\t waiting for temperature"); } if (isValueArrayOKf(waterlevelMean,WATERLEVELMEAN_SIZE,-1.0)){ float _max=getMaxf(waterlevelMean,WATERLEVELMEAN_SIZE); float _min=getMinf(waterlevelMean,WATERLEVELMEAN_SIZE); float _filteredWaterlevel=getFilteredf(waterlevelMean,WATERLEVELMEAN_SIZE,8); float _meanWaterlevel=getMeanf(waterlevelMean,WATERLEVELMEAN_SIZE); Serial.print("\t Dist="); Serial.print(_filteredWaterlevel); Serial.print("mm"); Serial.print("(+- "); Serial.print((_max-_min)/2.0); Serial.print(")"); Serial.print(" [mean="); Serial.print(_meanWaterlevel); Serial.print("]"); }else{ Serial.print("\t waiting for distance"); } Serial.print("\t Flow="); Serial.print(flow,2); Serial.print("\t Flowsum="); Serial.print(flow_counter_sum); Serial.println(); */ } } /* TODO: - waterlevel nur -1 - waterlevel distance to volume fukntion - soilmoisture min max calibartion einfügen */