#define SW1 13 //float sensor
#define PB1 10 //to system ready
#define PB2 9 //to open SolFill
#define PB3 8 //to pause the process
#define SolFill 7
#define SolDrain 6
#define Pump 5
#define LeftorRight 4 //0 = left, 1 = right
#define MotorRun 3
int ProcessStatus = 0; //to indicate currenct process
bool ReadyStatus = 0; //Status Ready
bool pb1_pressed, pb2_pressed, pb3_pressed;
unsigned long T_nowP2, T_nowP3, T_nowP4, T_nowP5, T_nowP6, T_nowP7, T_nowP8;
unsigned long DurationP2 = 6000; //durasi proses 2 in ms pump running
unsigned long DurationP3 = 10000; //durasi proses 3 in ms motor running bergantian
unsigned long DurationP4 = 5000; //durasi proses 4 in ms SolDrain
unsigned long DurationP5 = 8000; //durasi proses 5 in ms motor running bergantian
unsigned long DurationP7 = 6000; //durasi proses 7 in ms motor running bergantian
unsigned long DurationP8 = 5000; //durasi proses 8 in ms SolDrain
unsigned long DurationP9 = 6000; //delay off pumpa bergatin in ms
void setup() {
Serial.begin(9600);
pinMode(SW1, INPUT);
pinMode(PB1, INPUT);
pinMode(PB2, INPUT);
pinMode(PB3, INPUT);
pinMode(SolFill, OUTPUT);
pinMode(SolDrain, OUTPUT);
pinMode(Pump, OUTPUT);
pinMode(LeftorRight, OUTPUT);
pinMode(MotorRun, OUTPUT);
//turn on Motor Run and LeftorRight
digitalWrite(SolFill, HIGH);
digitalWrite(SolDrain, HIGH);
digitalWrite(Pump, HIGH);
digitalWrite(LeftorRight, HIGH);
digitalWrite(MotorRun, HIGH);
}
void loop()
{
if (digitalRead(PB1)) {
if (!pb1_pressed) {
ReadyStatus = !ReadyStatus;
Serial.println("ready");
pb1_pressed = !pb1_pressed;
}
} else pb1_pressed = !pb1_pressed;
if (digitalRead(PB2)) {
if (!pb2_pressed && ReadyStatus) {
ProcessStatus = 1;
pb2_pressed = !pb2_pressed;
}
} else pb2_pressed = !pb2_pressed;
switch (ProcessStatus) {
case 1: //SolFill Activation
Serial.println("Process 1 Running SolFill Activation");
digitalWrite(SolFill, digitalRead(SW1));
if (digitalRead(SW1))
{
ProcessStatus = 2;
digitalWrite(Pump, LOW);
T_nowP2 = millis(); //get first time for proses 2
}
break;
case 2: //Pump Running
Serial.println("Process 2 Running Pump Running");
if (millis() - T_nowP2 > DurationP2)
{
digitalWrite(Pump, HIGH);
ProcessStatus = 3;
digitalWrite(MotorRun, LOW);
T_nowP3 = millis(); //get first time for proses 3a
}
break;
case 3: //Motor Running
Serial.println("Process 3 Running Motor Running");
if (millis() - T_nowP3 > (DurationP3 / 2))
{
if (digitalRead(LeftorRight)) {
digitalWrite(MotorRun, HIGH); //untuk mematikan motor
digitalWrite(LeftorRight, LOW);
delay(DurationP9); //off motor
digitalWrite(MotorRun, LOW); //hidupkan motor lagi
T_nowP3 = millis(); //get first time for proses 3b or reset timer
break;
}
if (digitalRead(!LeftorRight)) {
digitalWrite(MotorRun, HIGH);
digitalWrite(LeftorRight, HIGH);
ProcessStatus = 4;
digitalWrite(SolDrain, LOW);
T_nowP4 = millis(); //get first time for proses 4
}
}
break;
case 4: //SolDrain Activation
Serial.println("Process 4 Running SolDrain Activation");
if (millis() - T_nowP4 > DurationP4)
{
digitalWrite(SolDrain, HIGH);
ProcessStatus = 5;
digitalWrite(MotorRun, LOW);
T_nowP5 = millis(); //get first time for proses 5a
}
break;
case 5: //Motor Running
Serial.println("Process 5 Running Motor Running");
if (millis() - T_nowP5 > (DurationP5 / 2))
{
if (digitalRead(LeftorRight)) {
digitalWrite(MotorRun, HIGH); //untuk mematikan motor
digitalWrite(LeftorRight, LOW);
delay(DurationP9); //off motor
digitalWrite(MotorRun, LOW); //hidupkan motor lagi
T_nowP5 = millis(); //get first time for proses 5b or reset timer
break;
}
if (digitalRead(!LeftorRight)) {
digitalWrite(MotorRun, HIGH);
digitalWrite(LeftorRight, HIGH);
ProcessStatus = 6;
}
}
break;
case 6: //SolFill Activation
Serial.println("Process 6 Running SolFill Activation");
digitalWrite(SolFill, digitalRead(SW1));
if (digitalRead(SW1))
{
ProcessStatus = 7;
digitalWrite(MotorRun, LOW);
T_nowP7 = millis(); //get first time for proses 7a
}
break;
case 7: //Motor Running
Serial.println("Process 7 Running Motor Running");
if (millis() - T_nowP7 > (DurationP7 / 2))
{
if (digitalRead(LeftorRight)) {
digitalWrite(MotorRun, HIGH); //untuk mematikan motor
digitalWrite(LeftorRight, LOW);
delay(DurationP9); //off motor
digitalWrite(MotorRun, LOW); //hidupkan motor lagi
T_nowP7 = millis(); //get first time for proses 7b or reset timer
break;
}
if (digitalRead(!LeftorRight)) {
digitalWrite(MotorRun, HIGH);
digitalWrite(LeftorRight, HIGH);
ProcessStatus = 8;
digitalWrite(SolDrain, LOW);
T_nowP8 = millis(); //get first time for proses 8
}
}
break;
case 8: //SolDrain Activation
Serial.println("Process 8 Running SolDrain Activation");
if (millis() - T_nowP8 > DurationP8)
{
digitalWrite(SolDrain, HIGH);
ProcessStatus = 0;
ReadyStatus = 0;
Serial.println("Process Finish");
}
break;
}
}