//Float Switches
// int L3 = 7; //highest
int L2 = 9;
int L1 = 10;
int L0 = 12; // lowest
int percentage;
//Led Indicators
int ledG = 8;
int ledY = 7;
int ledR = 6;
//OTHER
int relay = 2;
int mode = 11; // spst switch
int startStop = 4; //push-pull
int dryRun = 5; //float switch
//bool state;
bool pump, isDry;
//-------------------------------------------------
void setup()
{
Serial.begin(9600);
//float switch
// pinMode(L3, INPUT_PULLUP);
pinMode(L2, INPUT_PULLUP);
pinMode(L1, INPUT_PULLUP);
pinMode(L0, INPUT_PULLUP);
pinMode(ledG, OUTPUT);
pinMode(ledY, OUTPUT);
pinMode(ledR, OUTPUT);
pinMode(relay, OUTPUT);
pinMode(mode, INPUT_PULLUP);
pinMode(startStop, INPUT_PULLUP);
pinMode(dryRun, INPUT_PULLUP);
percentage = 101; //safety
}
void loop()
{
//level check
if(!digitalRead(L2) & !digitalRead(L1) & !digitalRead(L0)){
percentage = 100;
}
else if(digitalRead(L2) & !digitalRead(L1) & !digitalRead(L0)){
percentage = 50;
}
else if(digitalRead(L2) & digitalRead(L1) & !digitalRead(L0)){
percentage = 25;
}
else if(digitalRead(L2) & digitalRead(L1) & digitalRead(L0)){
percentage = 5;
}
else{
percentage = 101; //safety
pump = 0;
}
//Indicator
if(!pump & percentage == 100){
digitalWrite(ledG, HIGH);
digitalWrite(ledY, LOW);
digitalWrite(ledR, LOW);
}else if(!pump & percentage == 50){
digitalWrite(ledG, LOW);
digitalWrite(ledY, HIGH);
digitalWrite(ledR, LOW);
}else if(!pump & percentage == 25){
digitalWrite(ledG, LOW);
digitalWrite(ledY, LOW);
digitalWrite(ledR, HIGH);
}else if(!pump & percentage == 5){
digitalWrite(ledG, LOW);
digitalWrite(ledY, LOW);
digitalWrite(ledR, HIGH);
}
else if(pump & percentage == 100){// blink effect when pump ON
digitalWrite(ledG, HIGH);
delay(500);
digitalWrite(ledG, LOW);
digitalWrite(ledY, HIGH);
digitalWrite(ledR, HIGH);
}else if(pump & percentage == 50){
digitalWrite(ledG, LOW);
digitalWrite(ledY, HIGH);
delay(500);
digitalWrite(ledY, LOW);
digitalWrite(ledR, HIGH);
}else if(pump & percentage == 25){
digitalWrite(ledG, LOW);
digitalWrite(ledY, LOW);
digitalWrite(ledR, HIGH);
delay(500);
digitalWrite(ledR, LOW);
}else if(pump & percentage == 5){
digitalWrite(ledG, LOW);
digitalWrite(ledY, LOW);
digitalWrite(ledR, HIGH);
delay(500);
digitalWrite(ledR, LOW);
}
//AUTO
if (digitalRead(mode) & percentage == 5) {
pump = 1;
}
if (percentage == 100) {
pump = 0;
}
//MANUAL
if (!digitalRead(mode) & !digitalRead(startStop)) {
pump = !pump;
}
while (!digitalRead(startStop)) { // to make toggle perfect
delay(50);
}
//(*)Dry Run protection
if ((pump == 1) & digitalRead(dryRun)) {
delay(5000);
pump = 0;
isDry = !isDry; // step 1 to run motor only once till next digitalRead(!dryRun) and avoid repeated ON/OFF;
}else {
isDry = 0;
}
//(*)control point (isDry case)
if (isDry) {
digitalWrite(relay, 1);
delay(5000);
digitalWrite(relay, 0);
isDry = 1; // step 2 to run motor only once till next digitalRead(!dryRun) and avoid repeated ON/OFF;
} else {
isDry = 1; // step 2 to run motor only once till next digitalRead(!dryRun) and avoid repeated ON/OFF;
}
//control point
digitalWrite(relay, pump);
delay(500);
}
//NOTE:: (*) do Dry-run the code for "dryRun" and "isDry" cases.