//R ปรับค่าได้

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

LiquidCrystal_I2C lcd(0x27, 16, 2 ); //ต้องมี
RTC_DS1307 rtc;
DHT dht(8, 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;

int tmax = 38;//temp เกิน 38 พัดลมทำงาน 2นาที หยุด 1นาที จนได้ 25
int tmin = 25;/// ถ้าต่ำกว่า 25 หลอดไฟติด
int hmax = 80;
int hmin = 70;///ต่ำกว่า ปั้มทำงาน 2นาที หยุด 1นาที
/////อ่านค่าhum จนถึง 80 หยุดทำงาน

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

int hum;
int temp;


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

void loop() {
  int sw1 = digitalRead(4);
  delay(100);
  if (sw1 == 0) {
    st++;
    if (st >= 7) {
      st = 0;
      lcd.clear();
      delay(300);
    }
  }
//////////

  ht ();
  if (hum < 70) {
    digitalWrite(pump, HIGH);
  } else {
    digitalWrite(pump, LOW);
  }
  if (temp > 38) {
    digitalWrite(fan, HIGH);
  } else {
    digitalWrite(fan, LOW);
  }
  if (temp < 25) {
    digitalWrite(lamp, HIGH);
  } else {
    digitalWrite(lamp, LOW);
  }
 
}////////////////////////end loop


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);
  }
  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);
  }
  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


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);
  }
  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);
  }
  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);
  }
  ////////////////////////
  lcd.setCursor(0, 1);
  lcd.print("Stop");
  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(0, 0);
  //lcd.print(String(h) + ":" + String(m) + ":" + String(s) + "  ");
}
void time() {
  DateTime now = rtc.now();
  h = now.hour();
  m = now.minute();
  s = now.second();
  hum = dht.readHumidity();///อ่านความชื่น
  temp = dht.readTemperature();////อ่านอุณหภูมิ

  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() {
  hum = dht.readHumidity();///อ่านความชื่น
  temp = dht.readTemperature();////อ่านอุณหภูมิ
  lcd.setCursor(0, 1);
  lcd.print("Hum");
  lcd.setCursor(4, 1);
  lcd.print(hum);
  lcd.setCursor(8, 1);
  lcd.print("Temp");
  lcd.setCursor(13, 1);
  lcd.print(temp);
}
GND5VSDASCLSQWRTCDS1307+
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module