/////esp32 smart farm

#include <LiquidCrystal_I2C.h>        ///////lcd
#include "RTClib.h"                   ////////clock
#include <DHT.h>                      ///////hum & temp

LiquidCrystal_I2C lcd(0x27, 16, 2);   /// ชื่อจริงชื่อเล่น
RTC_DS1307 rtc;
DHT dht(32, DHT22);                   ///dhtกำหนดขา ต้องมี

   /// ประกาศ
int day;                            // day
int month;
int year;
int dnum;

int hum;                            //dht
int temp;
int led1 = 0;
int led2 = 0;

int h = 0;                           //time
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 set = 14;                        //sw
int up = 12;
int down = 13;

int pump = 5;                        // relay
int fan = 4;
int lamp = 2;

int st = 0;

char daysOfTheWeek[7][6] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

unsigned long pre1 = 0;
unsigned long pre2 = 0;

unsigned long timer1 = 100;
unsigned long timer2 = 100;

unsigned long current1 = 0;
unsigned long current2 = 0;

void setup() {

  Serial.begin(115200);
  rtc.begin();
  dht.begin();
  lcd.init();
  lcd.backlight();

  pinMode(up, INPUT_PULLUP);
  pinMode(down, INPUT_PULLUP);
  pinMode(set, INPUT_PULLUP);
  pinMode(26, INPUT_PULLUP);

  pinMode(lamp, OUTPUT);
  pinMode(fan, OUTPUT);
  pinMode(pump, OUTPUT);

}///// end setup


void loop() {

  hum = dht.readHumidity();       ///อ่านความชื่น
  temp = dht.readTemperature();  ////อ่านอุณหภูมิ
  int sw1 = digitalRead(set);
  delay(100);
  if (sw1 == 0) {
    st++;
    if (st >= 8) {
      st = 0;
      lcd.clear();
      delay(300);
    }
    Serial.println(st);
  }
  if (st == 0) {
    date_time ();
    fn ();
  } else if (st == 1) {
    ht ();
  } else {
    start ();
    stop ();
  }
  if (h == h1) {
    if (m == m1) {
      digitalWrite(pump, HIGH);
    }
  }
  if (h == h2) {
    if (m == m2) {
      digitalWrite(pump, LOW);
    }
  }
}//// end loop

void date_time () {///////////////////////// date time
  DateTime now = rtc.now();
  day = now.day();
  month = now.month();
  year = now.year();
  h = now.hour();
  //h = 8;
  m = now.minute();
  s = now.second();
  dnum = now.dayOfTheWeek();
  //dnum = 1;
  lcd.setCursor(0, 0);
  lcd.print(daysOfTheWeek[dnum]);
  lcd.setCursor(3, 0);
  lcd.print(" ");
  lcd.setCursor(6, 0);
  if (day <= 9) {
    lcd.print("0");
  }
  lcd.print(day);
  lcd.setCursor(8, 0);
  lcd.print("/");
  lcd.setCursor(9, 0);
  if (month <= 9) {
    lcd.print("0");
  }
  lcd.print(month);
  lcd.setCursor(11, 0);
  lcd.print("/");
  lcd.setCursor(12, 0);
  lcd.print(year + 543);
  lcd.setCursor(0, 1);
  lcd.print("Time");
  lcd.setCursor(6, 1);
  if (h <= 9) {
    lcd.print("0");
  }
  lcd.print(h);
  lcd.setCursor(8, 1);
  lcd.print(":");
  lcd.setCursor(9, 1);
  if (m <= 9) {
    lcd.print("0");
  }
  lcd.print(m);
  lcd.setCursor(11, 1);
  lcd.print(":");
  lcd.setCursor(12, 1);
  if (s <= 9) {
    lcd.print("0");
  }
  lcd.print(s);
  
}///////////////////////end loop


void start() {////////////////////////////////start
  if (st == 2) {
    int sw2 = digitalRead(up);
    delay(50);
    if (sw2 == 0) {
      h1++;
      if ( h1 >= 24) {
        h1 = 0;
      }
    }
    int sw3 = digitalRead(down);
    delay(50);
    if (sw3 == 0) {
      h1--;
      if ( h1 <= 0) {
        h1 = 23;
      }
    }
    lcd.setCursor(6, 0);
    lcd.print("  ");
    delay(200);
  }
  if (st == 3) {
    int sw2 = digitalRead(up);
    delay(50);
    if (sw2 == 0) {
      m1++;
      if ( m1 >= 60) {
        m1 = 0;
      }
    }
    int sw3 = digitalRead(down);
    delay(50);
    if (sw3 == 0) {
      m1--;
      if ( m1 <= 0) {
        m1 = 59;
      }
    }
    lcd.setCursor(9, 0);
    lcd.print("  ");
    delay(200);
  }
  if (st == 4) {
    int sw2 = digitalRead(up);
    delay(50);
    if (sw2 == 0) {
      s1++;
      if ( s1 >= 60) {
        s1 = 0;
      }
    }
    int sw3 = digitalRead(down);
    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(5, 0);
  lcd.print(" ");
  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);
  lcd.setCursor(14, 0);
  lcd.print("  ");
 
}////////////////////////end loop

void stop() {////////////////////////////////////stop
  if (st == 5) {
    int sw2 = digitalRead(up);
    delay(50);
    if (sw2 == 0) {
      h2++;
      if ( h2 >= 24) {
        h2 = 0;
      }
    }
    int sw3 = digitalRead(down);
    delay(50);
    if (sw3 == 0) {
      h2--;
      if ( h2 <= 0) {
        h2 = 23;
      }
    }
    lcd.setCursor(6, 1);
    lcd.print("  ");
    delay(200);
  }
  if (st == 6) {
    int sw2 = digitalRead(up);
    delay(50);
    if (sw2 == 0) {
      m2++;
      if ( m2 >= 60) {
        m2 = 0;
      }
    }
    int sw3 = digitalRead(down);
    delay(50);
    if (sw3 == 0) {
      m2--;
      if ( m2 <= 0) {
        m2 = 59;
      }
    }
    lcd.setCursor(9, 1);
    lcd.print("  ");
    delay(200);
  }
  if (st == 7) {
    int sw2 = digitalRead(up);
    delay(50);
    if (sw2 == 0) {
      s2++;
      if ( s2 >= 60) {
        s2 = 0;
      }
    }
    int sw3 = digitalRead(down);
    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(4, 1);
  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);
  lcd.print("  ");
  
}

void ht() {/////////////////////////////////////function ht
  //hum = dht.readHumidity();///อ่านความชื่น
  //temp = dht.readTemperature();////อ่านอุณหภูมิ
  lcd.setCursor(0, 0);
  lcd.print("Hum");
  lcd.setCursor(3, 0);
  lcd.print("     ");
  lcd.setCursor(4, 0);
  lcd.print(hum);
  lcd.setCursor(8, 0);
  lcd.print("Temp");
  lcd.setCursor(12, 0);
  lcd.print("    ");
  lcd.setCursor(13, 0);
  lcd.print(temp);
  lcd.setCursor(0, 1);
  lcd.print("               ");
}
void fn() { /////////////////////////////////////function fn
  //hum = dht.readHumidity();///อ่านความชื่น
  //temp = dht.readTemperature();////อ่านอุณหภูมิ
  if (hum < 70 ) {
    current1 = millis();

    if (current1 - pre1 >= timer1) {
      //Serial.println(pre1);
      pre1 = current1;
      if (led1 == LOW) {
        led1 = HIGH;
      } else {
        led1 = LOW;
      }
      digitalWrite(pump, led1);
      if (led1 == HIGH) {
        timer1 = timer1 + 120000;
      } else {
        timer1 = timer1 + 60000;
      }
    }
  }
  else {
    digitalWrite(pump, LOW);
  }
  if (temp > 38) {
    current2 = millis();

    if (current2 - pre2 >= timer2) {
      //Serial.println(pre1);
      pre2 = current2;
      if (led2 == LOW) {
        led2 = HIGH;
      } else {
        led2 = LOW;
      }
      digitalWrite(fan, led2);
      if (led2 == HIGH) {
        timer2 = timer2 + 120000;
      } else {
        timer2 = timer2 + 60000;
      }
    }
  }
  else {
    digitalWrite(fan, LOW);
  }
  if (temp < 25) {
    digitalWrite(lamp, HIGH);
  } else {
    digitalWrite(lamp, LOW);
  }
}
$abcdeabcde151015202530fghijfghij
GND5VSDASCLSQWRTCDS1307+
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module