// Water Tank Simulation
#define pumpRun 2
#define pumpInd 13
#define HHLPin 10
#define HLPin 9
#define LLPin 8
#define LLLPin 7
#define OvFlwPin 6
#define printTimeout 5000
#define lvlupdatTimeout 5000
#define tankLevelRefresdly 300
#define maxTanklevel 1000
#define lowLevel 0.2
#define lowlLowLevel 0.1
#define highLevel 0.8
#define highHighLevel 0.9
#define pumpRate 12
#define flowRate 10
//boolean motorStart = false;
//boolean motorStop = false;
boolean pumpRunning = false;
boolean pump_State = false;
boolean overflow = false;
boolean LLL = false;
boolean LL = false;
boolean HL = false;
boolean HHL = false;
int tankLevel = 0;
int tankPrvLevel = 0;
int consumptionRate = 0;
int consumptionvalve =0;
int outflowrate = 0;
int prvConsumpRate = 0;
int pumpflow = 0;
unsigned long printTicks;
unsigned long lvlupdatTicks;
String pumpState = "Pump Stopped";
void setup() {
// put your setup code here, to run once:
pinMode(pumpRun, INPUT);
pinMode(pumpInd, OUTPUT);
Serial.begin(9600);
printTicks = millis();
lvlupdatTicks = millis();
}
void loop() {
// put your main code here, to run repeatedly:
pump_State = digitalRead(pumpRun);
consumptionvalve = map(analogRead(A0),0,1023,0,flowRate);
delay(5);
if (pump_State == true){
digitalWrite(pumpInd, HIGH);
pumpState = "Pump Running";
Serial.println(pumpState);
}
else{
digitalWrite(pumpInd, LOW);
pumpState = "Pump Stopped";
Serial.println(pumpState);
}
if(prvConsumpRate != consumptionRate ){
prvConsumpRate = consumptionRate;
Serial.print("Consump rate : ");
Serial.println(consumptionRate);
}
if(tankPrvLevel != tankLevel ){
Serial.print("Tank Level : ");
Serial.println(tankLevel);
tankPrvLevel = tankLevel;
}
if(pump_State) pumpflow = pumpRate;
else pumpflow = 0;
tankLevel += pumpflow;
tankLevel -= consumptionRate;
if(tankLevel > maxTanklevel){
tankLevel = maxTanklevel;
overflow = true;
}
else overflow = false;
if(tankLevel < 1){
tankLevel = 0;
consumptionRate = 0;
}
else consumptionRate = consumptionvalve;
delay(tankLevelRefresdly);
if(millis()-printTicks > printTimeout){
Serial.println(pumpState);
printTicks = millis();
}
if(millis()-lvlupdatTicks > lvlupdatTimeout){
Serial.print("Tank Level : ");
Serial.println(tankLevel);
lvlupdatTicks = millis();
}
LLL= false;
LL= false;
HL= false;
HHL= false;
if (tankLevel > lowlLowLevel*maxTanklevel){
LLL= true;
if(tankLevel > lowLevel*maxTanklevel){
LL= true;
if(tankLevel > highLevel*maxTanklevel){
HL= true;
if(tankLevel > highHighLevel*maxTanklevel){
HHL= true;
}
}
}
}
digitalWrite(LLLPin,LLL);
digitalWrite(LLPin,LL);
digitalWrite(HLPin,HL);
digitalWrite(HHLPin,HHL);
digitalWrite(OvFlwPin,overflow);
}