#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 4, 5, 6, 7);
volatile boolean disp=0;
unsigned char cycle=1;
unsigned long time_run1=0;
unsigned long total_time_run1=0;
unsigned long time_stop1=0;
unsigned long total_time_stop1=0;
unsigned long time_run2=0;
unsigned long total_time_run2=0;
unsigned long time_stop2=0;
unsigned long total_time_stop2=0;
unsigned long time0=0;
unsigned long time_temp1=0;
unsigned long time_temp2=0;
void setup() {
// Init
Serial.begin(115200);
lcd.begin(16, 2);
// Print something
lcd.setCursor(1, 0);
lcd.print("Initialisation");
lcd.setCursor(3, 1);
lcd.print("controller");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pump_1 OFF");
lcd.setCursor(0, 1);
lcd.print("Pump_2 OFF");
pinMode(10, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
attachInterrupt(1, change_disp, FALLING);
}
void loop() {
if(digitalRead(10)==0 & cycle==1){
time0=millis()/1000;
time_temp2=time_stop2;
lcd.setCursor(0, 0);
lcd.print("Pump_1 ON ");
lcd.setCursor(0, 1);
lcd.print("Pump_2 OFF ");
}
if(digitalRead(10)==0 & cycle==0){
time0=millis()/1000;
time_temp1=time_stop1;
lcd.setCursor(0, 0);
lcd.print("Pump_1 OFF ");
lcd.setCursor(0, 1);
lcd.print("Pump_2 ON ");
}
if(digitalRead(10)==0 & cycle==2){
time0=millis()/1000;
time_temp2=time_stop2;
lcd.setCursor(0, 0);
lcd.print("Pump_1 ON ");
lcd.setCursor(0, 1);
lcd.print("Pump_2 OFF ");
}
while(digitalRead(10)==0)
{
digitalWrite(13,1);
switch(cycle){
case 1: {
digitalWrite(8,LOW);
time_stop1=0;
time_stop2=time_temp2+millis()/1000-time0;
lcd.setCursor(11, 1);
disp_time(time_stop2);
time_run1=millis()/1000-time0;
lcd.setCursor(10, 0);
disp_time(time_run1);} break;
case 0: {
digitalWrite(9,LOW);
time_stop1=time_temp1+millis()/1000-time0;
time_stop2=0;
lcd.setCursor(11, 0);
disp_time(time_stop1);
time_run2=millis()/1000-time0;
lcd.setCursor(10, 1);
disp_time(time_run2);} break;
case 2: {
digitalWrite(8,LOW);
time_stop1=0;
time_stop2=time_temp2+millis()/1000-time0;
lcd.setCursor(11, 1);
disp_time(time_stop2);
time_run1=millis()/1000-time0;
lcd.setCursor(10, 0);
disp_time(time_run1);}
}
delay(500);
}
total_time_run1=total_time_run1+time_run1;
time_run1=0;
total_time_run2=total_time_run2+time_run2;
time_run2=0;
if(digitalRead(10)){
time0=millis()/1000;
time_temp1=time_stop1;
time_temp2=time_stop2;
lcd.setCursor(0, 0);
lcd.print("Pump_1 OFF ");
lcd.setCursor(0, 1);
lcd.print("Pump_2 OFF ");
}
while(digitalRead(10))
{
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
lcd.setCursor(0, 0);
lcd.print("Pump_1 OFF ");
lcd.setCursor(0, 1);
lcd.print("Pump_2 OFF ");
//lcd.setCursor(0, 1);
//lcd.print("Pump_2 OFF");
time_stop1=millis()/1000-time0+time_temp1;
lcd.setCursor(11, 0);
disp_time(time_stop1);
time_stop2=millis()/1000-time0+time_temp2;
lcd.setCursor(11, 1);
disp_time(time_stop2);
digitalWrite(13,1);
delay(100);
digitalWrite(13,0);
delay(1000);
if(digitalRead(3)==0){
delay(200);
lcd.setCursor(0, 0);
lcd.print("Run time 1 ");
lcd.setCursor(11, 0);
disp_time(total_time_run1);
lcd.setCursor(0, 1);
lcd.print("Run time 2 ");
lcd.setCursor(11, 1);
disp_time(total_time_run2);
delay(3000);
}
}
delay(200);
cycle++;
if(cycle>2)
cycle=0;
Serial.println(!cycle);
}
void change_disp() {
disp=!disp;
Serial.println(disp);
}
void disp_time(unsigned long sec) {
int time_m;
int time_s;
if(sec>59){
time_m=(sec % 3600ul)/60ul;
time_s=sec-(time_m % 60ul)*60ul;
lcd.print(time_m);
lcd.print(":");
if(time_s>9)
lcd.print(time_s);
else {
lcd.print("0");
lcd.print(time_s);
}
}
else {
time_s=(sec % 3600ul) % 60ul;
if(time_s>9)
lcd.print(time_s);
else {
lcd.print("0");
lcd.print(time_s);
}
lcd.print("s");
}
}