/* * Update Current Sensors and update the Sensors data Cache */ void Sensors::update_sensors(void){ float curr_moisture=moisture_read(); float curr_temps= getTemp(); float curr_flowrate=getWaterFlowRate(); sensors_values.cached_moisture=curr_moisture; sensors_values.cached_temperature=curr_temps; sensors_values.cached_waterlevel = getWaterLevel(); // Boolean indicates if we have water or not. sensors_values.cached_flowvolume+=curr_flowrate/60000;//FlowRate(L/m) to FlowRate(m3/s). sensors_values.cached_fieldCapacity=readFieldCapacity(); }
void demo_test(){ tempcounter=2; char c=0; //if(SolarStatus()==1){ if (BatteryCharged()){ // if (ReadInitFlag()==0){ //check if its first initialisation of device // GSM_ON(); //turn on GSM module // SIM900_SEND(2); //send a configuration request message to server // SetInitFlag(); //set initcheck flag // } for (char d=0; d<TRANSMIT_FREQ; d++){ days++; //increment days for (int i=0; i<tempcounter; i++){ getTempHum(); //get temperature and humidity sensor while ((TEMP_INT==0)&&(c<=3)){ //check DHT11 sensor 3 times for reading if no data received getTempHum(); c++; } DayTEMP[i]=TEMP_INT; DayHUM[i]=RH_INT; delay_1s(3); //wait 30 seconds between each temperature readings } avgTempHum(); //calculate average temperature and humidity minmaxTempHum(); //calculate minimum and maximum temperature and humidity getWaterLevel(); //get water level from ultrasonic sensor getConductivity(); getSolarReading(); getBatteryReading(); ShiftData(); //shift gathered data by offset if ((WaterLevel-OFFSET) >= WATER_THRESHOLD){ //check if water level is too low SMS_data[0]=WARNING_PREFIX; //initiate message with warning char SMS_data[1]=WaterLevel; //put water level in text message SMS_data[2]=DATA_SUFFIX; //end message with suffix GSM_ON(); //turn on sim900 delay_1s(5); //wait for GSM to connect to network SIM900_SEND(1); //Send data message to server GSM_OFF(); //turn off sim900 } SaveData(); //Sava sensor readings to memory } } if (!BatteryCharged()){ MonitorBattery(); } SMS_data[0]=DATA_PREFIX; //start message with prefix gatherData(); //read data from memory getCheckByte(); //calculate check byte GSM_ON(); //turn on sim900 delay_1s(10); //wait for GSM to connect to network puts1USART("AT\r\n"); delay_1s(5); SIM900_SEND(1); //Send data message to server //} //solarpanel check }
// MAIN ======================================================================================================================= void WaterController::main() { wait(start_flag); for (;;) { wait(interval_clock); int newlevel = getNewWaterLevel(); int level = getWaterLevel(); if (level >= newlevel) { valving(0); if (level > newlevel) { pumping(1); } } else { pumping(0); valving(1); } newlevel = getNewWaterLevel(); level = getWaterLevel(); if(level == newlevel) { wascontroller->setWaterLevelReached(); } } }
// MAIN ======================================================================================================================= void WaterController::main() { wait(start_flag); for (;;) { wait(interval_clock); int newlevel = getNewWaterLevel(); //std::cout << newlevel << " dit is het nieuwe level\n"; int level = getWaterLevel(); //std::cout << level << " dit is het huidige level\n"; if (level >= newlevel) { wascontroller->setWaterLevelReached(); valving(0); if (level > newlevel) { //std::cout << "teveel water.......\n"; pumping(1); } } else { //std::cout << "te weinig water... vullen\n"; pumping(0); valving(1); } } }
void routine(){ START: if(SolarStatus()==1){ //if solar-panel is on solarcounter = 0; while (BatteryCharged()){ //if battery is charged if (ReadInitFlag()==0){ //check if its first initialisation of device GSM_ON(); //turn on GSM module SIM900_SEND(2); //send a configuration request message to server SetInitFlag(); //set initcheck flag } char c=0; while ((TEMP_INT==0)&&(c<=3)){ //check DHT11 sensor 3 times for reading if no data received getTempHum(); c++; } DayTEMP[tempcounter]=TEMP_INT; DayHUM[tempcounter]=RH_INT; tempcounter++; delay_1ms(1); sleep(); if (tempcounter==2){ days++; //increment days avgTempHum(); //calculate average temperature and humidity minmaxTempHum(); //calculate minimum and maximum temperature and humidity getConductivity(); //get conductivity value from sensor getWaterLevel(); //get water level from ultrasonic sensor ShiftData(); //shift gathered data by offset if ((WaterLevel-OFFSET) >= WATER_THRESHOLD){ //check if water level is too low SMS_data[0]=WARNING_PREFIX; //initiate message with warning char SMS_data[1]=WaterLevel; //put water level in text message SMS_data[2]=DATA_SUFFIX; //end message with suffix GSM_ON(); //turn on sim900 delay_1s(10); //wait for GSM to connect to network SIM900_SEND(1); //Send data message to server } } } if (!BatteryCharged()){ MonitorBattery(); } if (SolarStatus()==0) //if solar-panel is off goto OFF; goto START; } else { //when solar-panel is off OFF: SaveData(); //Sava sensor readings to memory tempcounter=0; //check if data transmission frequency is met if (days >= TRANSMIT_FREQ){ SMS_data[0]=DATA_PREFIX; //start message with prefix gatherData(); //read data from memory getCheckByte(); //calculate check byte GSM_ON(); //turn on sim900 delay_1s(10); //wait for GSM to connect to network SIM900_SEND(1); //Send data message to server days=0; } //reset days counter only after successful tranmsission //sleep for 6h for (char z=0; z<3; z++){ sleep(); } while (SolarStatus()==2){ //if solar-panel is off for (char z=0; z<5; z++){ delay_1s(60); } solarcounter++; if (solarcounter > SOLAR_THRESHOLD){ //turn on Fault LED goto START; } } } }