// home version
const byte ON = HIGH;
const byte OFF = LOW;
const byte OPEN = HIGH;
const byte CLOSED = LOW;
const byte WaterAvailable = LOW;
const byte tankFull = HIGH; // a HIGH reading of the upper sensor == tank is full
const byte tankEmpty = HIGH; // a HIGH reading of the lower sensor == tank is empty
const byte lowLevel1_Pin = 3;
const byte highLevel1_Pin = 4;
const byte sump_Pin = 5; // Sump Level
const byte lowLevel2_Pin = 6;
const byte highLevel2_Pin = 7;
const byte lowLevel3_Pin = 8;
const byte highLevel3_Pin = 9;
const byte motor_Pin = 12; // thirteen is unlucky.
const byte valve1_Pin = A0;
const byte valve2_Pin = 10;
const byte valve3_Pin = 11;
void setup() {
// INPUTS
pinMode(lowLevel1_Pin, INPUT_PULLUP);
pinMode(highLevel1_Pin, INPUT_PULLUP);
pinMode(lowLevel2_Pin, INPUT_PULLUP);
pinMode(highLevel2_Pin, INPUT_PULLUP);
pinMode(lowLevel3_Pin, INPUT_PULLUP);
pinMode(highLevel3_Pin, INPUT_PULLUP);
pinMode(sump_Pin, INPUT_PULLUP);
// OUTPUTS
digitalWrite(motor_Pin,OFF);
digitalWrite(valve1_Pin,CLOSED);
digitalWrite(valve2_Pin,CLOSED);
digitalWrite(valve3_Pin,CLOSED);
pinMode(motor_Pin, OUTPUT);
pinMode(valve1_Pin, OUTPUT);
pinMode(valve2_Pin, OUTPUT);
pinMode(valve3_Pin, OUTPUT);
// delay(1000); // why?
}
void loop() {
delay(125); // no need for speed here
static bool pumpState = OFF;
// static bool valveState = CLOSED;
/* real world section input
bool tank1Full = digitalRead(highLevel1_Pin);
bool tank2Full = digitalRead(highLevel2_Pin);
bool tank3Full = digitalRead(highLevel3_Pin);
bool tank1Empty = digitalRead(lowLevel1_Pin);
bool tank2Empty = digitalRead(lowLevel2_Pin);
bool tank3Empty = digitalRead(lowLevel3_Pin);
*/
/* simpulated input section */
analogRead(A1);
int tank1Level = analogRead(A1);
analogRead(A2);
int tank2Level = analogRead(A2);
analogRead(A3);
int tank3Level = analogRead(A3);
bool tank1Full = tank1Level > 923;
bool tank2Full = tank2Level > 923;
bool tank3Full = tank3Level > 923;
bool tank1Empty = tank1Level < 100;
bool tank2Empty = tank2Level < 100;
bool tank3Empty = tank3Level < 100;
/* end of simulated tank sensor input */
if (tank1Empty || tank2Empty || tank3Empty)
pumpState = ON;
if (tank1Full && tank2Full && tank3Full)
pumpState = OFF;
// only in case the sump has enough water for pumping
if (digitalRead(sump_Pin) != WaterAvailable) {
pumpState = OFF;
digitalWrite(valve1_Pin, CLOSED);
digitalWrite(valve2_Pin, CLOSED);
digitalWrite(valve3_Pin, CLOSED);
digitalWrite(motor_Pin, OFF);
return; // no water available, all done
}
// open the valse for tanks that are not already full
if ((pumpState == ON) && !tank1Full)
digitalWrite(valve1_Pin, OPEN);
else
digitalWrite(valve1_Pin, CLOSED);
if ((pumpState == ON) && !tank2Full)
digitalWrite(valve2_Pin, OPEN);
else
digitalWrite(valve2_Pin, CLOSED);
// alternate valve expression. terneray operator, nothing to be afraid of
digitalWrite(valve3_Pin, ((pumpState == ON) && !tank3Full) ? OPEN : CLOSED);
// and... that pump
digitalWrite(motor_Pin, pumpState);
}