//  rtc22 set time start stop

#include "RTClib.h"                  //rtc  ต้องมี
#include <LiquidCrystal_I2C.h>       //lcd  ต้องมี
#include "DHT.h"                     //dht22

RTC_DS1307 rtc;                      // rtc ต้องมี
LiquidCrystal_I2C lcd(0x27, 16, 2 ); // lcd ต้องมี
DHT  dht(8, DHT22);                  //dht22

int h = 0;      
int m = 0;
int s = 0;

int h1 = 0;
int m1 = 0;
int s1 = 0;

int h2 = 0;
int m2 = 0;
int s2 = 0;
int st = 0;
////dht22
int tmax = 38;  //temp >38 fan on 2 m stop 1 m to 25, <25 lamp on
int tmin = 25;
int hmax = 80;  //<70 pump on 2 m stop  1m check hum 80pump off
int hmin = 70; 

int pump = 13;   /////relay
int fan  = 12;   /////relay
int lamp = 11;   /////relay

int hum;
int temp;

///////////////////////////////


void setup() {
  dht.begin();                   // dht22
  rtc.begin();                   //ต้องมีrct
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(pump, OUTPUT);
  pinMode(fan, OUTPUT);
  pinMode(lamp, OUTPUT);
  lcd.init();                   //ต้องมี lcd
  lcd.backlight();              //ต้องมี lcd
}///////////////////////////

void loop() {
  int sw1 = digitalRead(4);
  delay(100);
 if (sw1 == 0) {
    st++;
 if (st >= 7) {
      st = 0;
      lcd.clear();
    
    }
  }
 ///////////////////
  if ( st == 0){
  time();
  ht();
  } else{
    start ();
    stop();
  }
 
  
 
}////////////end loop

/////////////////////function ///////  start
void start() {
  if (st == 1) {
  int sw2 = digitalRead(3);
    delay(50);
  if (sw2 == 0) {
      h1++;
      if ( h1 >= 24) {
        h1 = 0;
      }
    }
   ///////// 
  int sw3 = digitalRead(5);
    delay(50);
  if (sw3 == 0) {
      h1--;
      if ( h1 <= 0) {
        h1 = 23;
      }
    }
    lcd.setCursor(6, 0);
    lcd.print("  ");
    delay(200);  ///////////500
  }

  if (st == 2) {
    int sw2 = digitalRead(3);
    delay(50);
  if (sw2 == 0) {
      m1++;
      if ( m1 >= 60) {
        m1 = 0;
      }
    }
  ///////////////////////////  
    int sw3 = digitalRead(5);
    delay(50);
  if (sw3 == 0) {
      m1--;
      if ( m1 <= 0) {
        m1 = 59;
      }
    }
    lcd.setCursor(9, 0);
    lcd.print("  ");
    delay(200);/////////////500
  }
  if (st == 3) {
    int sw2 = digitalRead(3);
    delay(50);
  if (sw2 == 0) {
      s1++;
  if ( s1 >= 60) {
        s1 = 0;
      }
    }
    int sw3 = digitalRead(5);
    delay(50);
    if (sw3 == 0) {
      s1--;
      if ( s1 <= 0) {
        s1 = 59;
      }
    }
    lcd.setCursor(12, 0);
    lcd.print("  ");
    delay(200);///////////////
  }

  ////////////////////////
  lcd.setCursor(0, 0);
  lcd.print("Start");
  lcd.setCursor(6, 0);
  if (h1 <= 9) {
    lcd.print("0");
  }
  lcd.print(h1);
  lcd.setCursor(8, 0);
  lcd.print(":");
  ////////////////////////minute
  lcd.setCursor(9, 0);
  if (m1 <= 9) {
    lcd.print("0");
  }
  lcd.print(m1);
  lcd.setCursor(11, 0);
  lcd.print(":");
  ////////////////////////second
  lcd.setCursor(12, 0);
  if (s1 <= 9) {
    lcd.print("0");
  }
  lcd.print(s1);
  
}///////////////end loop

//////////////////////////function stop
void stop() {
  if (st == 4) {
    int sw2 = digitalRead(3);
    delay(50);
    if (sw2 == 0) {
      h2++;
      if ( h2 >= 24) {
        h2 = 0;
      }
    }
    int sw3 = digitalRead(5);
    delay(50);
    if (sw3 == 0) {
      h2--;
      if ( h2 <= 0) {
        h2 = 23;
      }
    }
    lcd.setCursor(6, 1);
    lcd.print("  ");
    delay(200);/////////////////////500
  }
  if (st == 5) {
    int sw2 = digitalRead(3);
    delay(50);
    if (sw2 == 0) {
      m2++;
      if ( m2 >= 60) {
        m2 = 0;
      }
    }
    int sw3 = digitalRead(5);
    delay(50);
    if (sw3 == 0) {
      m2--;
      if ( m2 <= 0) {
        m2 = 59;
      }
    }
    lcd.setCursor(9, 1);
    lcd.print("  ");
    delay(200);///////////500
  }
  if (st == 6) {
    int sw2 = digitalRead(3);
    delay(50);
    if (sw2 == 0) {
      s2++;
      if ( s2 >= 60) {
        s2 = 0;
      }
    }
    int sw3 = digitalRead(5);
    delay(50);
    if (sw3 == 0) {
      s2--;
      if ( s2 <= 0) {
        s2 = 59;
      }
    }
    lcd.setCursor(12, 1);
    lcd.print("  ");
    delay(200); //////////////500
  }
  ////////////////////////
  lcd.setCursor(0, 1);         //copy
  lcd.print("Stop");
   lcd.setCursor(4, 1);    ////////clear
   lcd.print("  ");
  lcd.setCursor(6, 1);
  if (h2 <= 9) {
    lcd.print("0");
  }
  lcd.print(h2);
  lcd.setCursor(8, 1);
  lcd.print(":");
  ////////////////////////minute
  lcd.setCursor(9, 1);
  if (m2 <= 9) {
    lcd.print("0");
  }
  lcd.print(m2);
  lcd.setCursor(11, 1);
  lcd.print(":");
  ////////////////////////second
  lcd.setCursor(12, 1);
  if (s2 <= 9) {
    lcd.print("0");
  }
  lcd.print(s2);
   lcd.setCursor(14, 1); ////////clear
  lcd.print("  ");
}
////////
void time() {
  DateTime now = rtc.now();   /////// rtc
 h = now.hour();
 m = now.minute();
 s = now.second();
 hum = dht.readHumidity();          ////hum
 temp = dht.readTemperature();      ////temp

 lcd.setCursor(0, 0);
  lcd.print("Time");
  lcd.setCursor(6, 0);
  if (h <= 9) {
    lcd.print("0");
  }
  lcd.print(h);
  lcd.setCursor(8, 0);
  lcd.print(":");
  ////////////////////////minute
  lcd.setCursor(9, 0);
  if (m <= 9) {
    lcd.print("0");
  }
  lcd.print(m);
  lcd.setCursor(11, 0);
  lcd.print(":");
  lcd.setCursor(12, 0);
  if (s <= 9) {
    lcd.print("0");
  }
  lcd.print(s);
}////////////////////////end loop

void ht(){       /////////////////////function dht22
  hum  = dht.readHumidity();   // อ่าน hum
  temp = dht.readTemperature();// อ่าน temp
  lcd.setCursor(0, 1);         
  lcd.print("Hum");
    lcd.setCursor(5 , 1);
  lcd.print("  ");
  lcd.setCursor(4, 1);
  lcd.print(hum);
  lcd.setCursor(8, 1);
  lcd.print("Temp");
  lcd.setCursor(12 , 1); /////clear
  lcd.print("  ");
  lcd.setCursor(13, 1);
  lcd.print(temp);
   if(hum<70){
  digitalWrite( pump, HIGH);
  delay(2000);
  digitalWrite( pump, LOW);
  delay(1000);
 }
 else{
  digitalWrite(pump, LOW);
  delay(500);
 }
 if (temp > 38) {
    digitalWrite(fan, HIGH);
    delay(2000);
    digitalWrite(fan, LOW);
    delay(1000);
  } 
  else if( temp <= 25){
    digitalWrite(fan, LOW);
  }
 if (temp <25){
  digitalWrite(lamp, HIGH);
 }
 else {
    digitalWrite(lamp, LOW);
    
 }

 

}///////////////////////end loop


  
GND5VSDASCLSQWRTCDS1307+
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module