#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd (0x27, 20,4);

float ver=00.01;

#define Blower 16     //Relay activated
#define COctrl 17     //Relay activated
#define Fan  19       //Relay activated
#define Pump 18       //Relay activated
#define Dayled 2      //Day phase Relay and led (now blue)
#define Humid 5       //Gnd goes to MOSFET 
#define Alarmled 15   //General Alarm led (now yello)

//New Button pads
#define OKbtn 32
#define UPbtn 33
#define DNbtn 25
#define LTbtn 26
#define RTbtn 27
bool okV=1;

int outRA[]={16, 17, 19, 18, 2, 5}; //total 6 0-5
bool sttRA[6]; 

bool dayStt = 1;
bool niteStt = 0;
bool blowStt = 1;
bool coStt = 0;  //CO2 gas RELAY
bool PumpStt=1;
bool fanStt=1;
bool alarmStt=0;
bool tstV;
bool ledV;

//Massage flags
bool msgA=0;  //Main alarm OFF
bool msgB=0;  //Light alarm
bool msgC=0;
bool msgD=0;
bool msgE=0;  //Fan alarm
bool msgF=0;
bool msgG=0;

int AT=0;    //Alarm Type
int i, j, k;

//Timing
unsigned long curT;
unsigned long prvT=0;
unsigned long dbncA;
unsigned long dbncB=0;


void setup() {
  Serial.begin(115200);
  lcd.init();
  lcd.backlight();
  pinMode(Blower, OUTPUT);
  pinMode(COctrl, OUTPUT);
  pinMode(Fan, OUTPUT);
  pinMode(Pump, OUTPUT);
  pinMode(Dayled, OUTPUT);
  pinMode(Humid, OUTPUT);
  pinMode(Alarmled, OUTPUT);

  pinMode(OKbtn, INPUT_PULLUP);
  pinMode(UPbtn, INPUT_PULLUP);
  pinMode(DNbtn, INPUT_PULLUP);
  pinMode(LTbtn, INPUT_PULLUP);
  pinMode(RTbtn, INPUT_PULLUP);

  //digitalWrite(Dayled, 1);

  lcd.setCursor(4,0);
  lcd.print("Wellcome to:");
  lcd.setCursor(4,1);
  lcd.print("CAMP-Arduino");
  lcd.setCursor(3,1);
  lcd.print("AlarmSeq ver:");
  lcd.setCursor(8,2);
  lcd.print(ver);
  delay(3000);

}

void loop() {

curT=millis();
//tstV=digitalRead(Fan);
//ledV=digitalRead(Dayled);
okV=digitalRead(OKbtn);

//Alarm OFF
if(okV==0){
  dbncA=millis();
  if(dbncA-dbncB>50){
    okV=digitalRead(OKbtn);
    if(okV==0){
      msgE=0;
      AT=0;
     }
  }
}

//Pin scan
if(curT-prvT>500){
  
  if(digitalRead(Dayled)==0){
    lcd.clear();
    AT=1;    
  }
  if(digitalRead(Fan)==0){
    lcd.clear();
    AT=3;
  }
  prvT=curT;
}



switch(AT){
  case 0:
  alarmStt=0;
  digitalWrite(Alarmled, alarmStt);
  if(msgA==0){
      //lcd.clear();
      lcd.setCursor(4,0);
      lcd.print("CAMP-Arduino");
      lcd.setCursor(1,1);
      lcd.print("Alarm Sequence ver");
      lcd.setCursor(8,2);
      lcd.print(ver);
    msgA=1;
    msgB=0;
    msgD=0;
    msgE=0;
    msgG=0;
    delay(3000);
  }
  break;
  
  case 1:
  alarmStt=1;
  digitalWrite(Alarmled, alarmStt);
  if(msgB==0){
    msgA=0;
    msgD=0;
      lcd.clear();
      lcd.setCursor(4,0);
      lcd.print("CAMP-Arduino");
      lcd.setCursor(1,1);
      lcd.print("LED isn't working!");
      delay(1000);
     msgB=1;
     msgG=0;
  }
  break;
  
  case 2:
  alarmStt=1;
  if(msgC==0){
    Serial.println("Blower ERROR!");
    msgC=1;
  }
  break;
  
  case 3:
  alarmStt=1;
  digitalWrite(Alarmled, alarmStt);
  if(msgD==0){
    msgA=0;
    msgB=0;
    //lcd.clear();
      lcd.setCursor(4,0);
      lcd.print("CAMP-Arduino");
      lcd.setCursor(1,2);
      lcd.print("FAN isn't working!");
      delay(1000);
    msgD=1;
    msgG=0;
  }
  break;
  
  case 4:
  alarmStt=1;
  if(msgE==0){
    Serial.println("Pump ERROR!");
    msgE=1;
  }
  break;
  
  case 5:
  alarmStt=1;
  if(msgF==0){
    Serial.println("CO2 ERROR!");
    msgF=1;
  }
  break;
}
digitalWrite(Alarmled, alarmStt);
}