209 lines
4.5 KiB
C++
209 lines
4.5 KiB
C++
#include <Arduino.h>
|
|
|
|
bool flag_print=false;
|
|
|
|
#include "helpfunctions.h"
|
|
#include "ADS1X15.h"
|
|
|
|
ADS1115 ADS(0x48);
|
|
|
|
// ######## EC
|
|
#include "ec.h"
|
|
|
|
// ######## Temperature
|
|
#include "temperature.h"
|
|
|
|
|
|
// ######## Water Level
|
|
#include "waterlevel.h"
|
|
|
|
|
|
// ######## Flow Rate
|
|
#include "flow.h"
|
|
|
|
// ######## Soilmoisture
|
|
#include "soilmoisture.h"
|
|
|
|
|
|
unsigned long last_print=0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define PIN_BUTTON 12
|
|
#define PIN_LED 2
|
|
|
|
|
|
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);
|
|
|
|
|
|
ec_setup();
|
|
|
|
waterlevel_setup();
|
|
|
|
temperature_setup();
|
|
|
|
flow_setup();
|
|
|
|
//Serial.println("Setup finished");
|
|
delay(200);
|
|
|
|
//Test adc to ec function output
|
|
/*
|
|
Serial.println();
|
|
for (int i=830;i<13300;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");
|
|
|
|
}
|
|
|
|
void loop() {
|
|
unsigned long loopmillis=millis();
|
|
|
|
flag_print=false;
|
|
|
|
|
|
|
|
//ec_loop(loopmillis);
|
|
|
|
|
|
//temperature_loop(loopmillis);
|
|
|
|
|
|
//waterlevel_loop(loopmillis);
|
|
|
|
|
|
flow_loop(loopmillis);
|
|
|
|
//sm_loop(loopmillis);
|
|
|
|
|
|
static bool getReading=false;
|
|
if (!getReading && !digitalRead(PIN_BUTTON)) {
|
|
getReading=true;
|
|
last_measurement_ec=0; //force ec reading now
|
|
|
|
ec_flag_measurement_available=false;
|
|
digitalWrite(PIN_LED,HIGH);
|
|
}
|
|
|
|
static bool started=false;
|
|
static bool ended=false;
|
|
static unsigned long started_time=0;
|
|
static unsigned long ended_time=0;
|
|
|
|
|
|
if (flow_counter_sum>10 && !started && !ended) { //start
|
|
started=true;
|
|
started_time=millis();
|
|
Serial.println("Started!");
|
|
}
|
|
static uint32_t last_flow_counter_sum=0;
|
|
if (loopmillis>last_print+1000) { //test check
|
|
last_print=loopmillis;
|
|
if (started && !ended) {
|
|
Serial.println(flow_counter_sum-last_flow_counter_sum);
|
|
if (flow_counter_sum-last_flow_counter_sum<=2){ //stopped
|
|
ended=true;
|
|
ended_time=millis();
|
|
Serial.println("Ended!");
|
|
}
|
|
|
|
last_flow_counter_sum=flow_counter_sum;
|
|
|
|
}
|
|
if (ended) {
|
|
Serial.println("counts,time");
|
|
Serial.print(flow_counter_sum);
|
|
Serial.print(",");
|
|
Serial.print((ended_time-started_time)/1000.0);
|
|
Serial.println();
|
|
delay(10000);
|
|
}
|
|
}
|
|
|
|
if (loopmillis>last_print+2000 && 1==2) {
|
|
//if (ec_flag_measurement_available && getReading) {
|
|
if (ec_flag_measurement_available) {
|
|
last_print=loopmillis;
|
|
getReading=false;
|
|
ec_flag_measurement_available=false;
|
|
digitalWrite(PIN_LED,LOW);
|
|
|
|
|
|
Serial.print(millis()/1000.0,2); Serial.print(",");
|
|
/*
|
|
Serial.print(getMeanf(tempCmean_reservoir,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.println();
|
|
|
|
|
|
/*
|
|
|
|
|
|
if (isValueArrayOKf(tempCmean_reservoir,TEMPMEAN_SIZE,DEVICE_DISCONNECTED_C)){
|
|
Serial.print("\t Treservoir="); Serial.print(getMeanf(tempCmean_reservoir,TEMPMEAN_SIZE)); Serial.print("\t Tair="); Serial.print(getMeanf(tempCmean_air,TEMPMEAN_SIZE));
|
|
}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();
|
|
*/
|
|
|
|
}
|
|
}
|
|
|
|
}
|