#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
#include "DHT.h"
//////////NickName incude
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS1307 rtc;
DHT dht(8, DHT22);
unsigned long pre1 = 0;
unsigned long pre2 = 0;
unsigned long pre3 = 0;
unsigned long pre4 = 0;
////////////////////////////ตั้งค่าเวลาน้อยสุดในการคำนวน
unsigned long time1 = 1000;
unsigned long time2 = 1000;
unsigned long time3 = 1000;
unsigned long time4 = 1000;
////////////////////////////ตั้งค่าเวลาในการเปิดค้าง
int time01 = 4000;
int time02 = 4000;
int time03 = 4000;
int time04 = 4000;
////////////////////////////Millis
unsigned long current1 = 0;
unsigned long current2 = 0;
unsigned long current3 = 0;
unsigned long current4 = 0;
int s = 0; //Sec
int m = 0; //Min
int h = 0; //Ho
int s1 = 0; //Sec
int m1 = 0; //Min
int h1 = 0; //Ho
int s2 = 0; //Sec
int m2 = 0; //Min
int h2 = 0; //Ho
int sm = 0; //Select
int tmax = 38; //Open fan 2Min Off 1Min Chk Tmpe if tmp.=25 off
int tmin = 25; //<25 Fan on >=25 Fan off
int hmax = 80;
int hmin = 70; //Open Pum 2min Off 1Min ChkHum if Hum80 Off
int pump = 13;
int fan = 12;
int lamp = 11;
int hum;
int temp;
int led1=1;
void setup() {
dht.begin();
rtc.begin(); //////เรียกใช้งาน RTC
//StartLcd
lcd.init();
lcd.backlight();
Serial.begin(115200);
pinMode(lamp, OUTPUT);
pinMode(fan, OUTPUT);
pinMode(pump, OUTPUT);
pinMode(4, INPUT_PULLUP); //Sec
pinMode(3, INPUT_PULLUP); //Min
pinMode(2, INPUT_PULLUP); //H
} //end setup
void loop() {
//Select
int sw1 = digitalRead(4); // Select
if (sw1 == 0) {
sm++;
}
////tm();
if (sm == 0) {
time();
ht();
}
if (sm >= 4 && sm <= 6) {
start();
delay(100);
}
if (sm >= 7 && sm <= 10) {
delay(100);
stop();
}
if (h == h1 && m == m1 && s == s1) {
digitalWrite(13, HIGH);
}
if (h == h2 && m == m2 && s == s2) {
digitalWrite(13, LOW);
}
} //end loop
void tm() {
///////////////////////Read Hum,Temp
int hum = dht.readHumidity();
int temp = dht.readTemperature();
lcd.setCursor(0, 1);
lcd.print("Hum:"); lcd.print(hum);
lcd.print(" / Temp:"); lcd.print(temp);
}
void time() {
DateTime now = rtc.now(); ///Set Time = Day Time
h = now.hour();
m = now.minute();
s = now.second();
int sw2 = digitalRead(3); // +
int sw3 = digitalRead(2); // -
// H
if (sm == 1) {
if (sw2 == 0) {
h++;
}
if (sw3 == 0) {
h--;
}
if (h >= 24 || h <= 0) {
h = 0;
}
/////////กระพริบตอนเซ็ต
lcd.setCursor(7, 0);
lcd.print(" ");
delay(200);
}
// Min
if (sm == 2) {
if (sw2 == 0) {
m++;
}
if (sw3 == 0) {
m--;
}
if (m >= 60 || m <= 0) {
m = 0;
}
lcd.setCursor(10, 0);
lcd.print(" ");
delay(200);
}
//Sec
if (sm == 3) {
if (sw2 == 0) {
s++;
}
if (sw3 == 0) {
s--;
}
if (s >= 60 || s <= 0) {
s = 0;
}
lcd.setCursor(13, 0);
lcd.print(" ");
delay(200);
}
//Select Mode 0-3
if (sm >= 10) {
sm = 0;
}
//////////////////////////Displat
lcd.setCursor(0, 0); lcd.print("Times");
lcd.setCursor(9, 0); lcd.print( ":");
lcd.setCursor(12, 0); lcd.print( ":");
///////////แก้ไขตัวเลขให้เป็นสองหลัก
lcd.setCursor(7, 0);
if (h <= 9) {
lcd.print("0");
}
lcd.print(h);
lcd.setCursor(10, 0);
if (m <= 9) {
lcd.print("0");
}
lcd.print(m);
lcd.setCursor(13, 0);
if (s <= 9) {
lcd.print("0");
}
lcd.print(s);
}
void start() {
int sw2 = digitalRead(3); // +
int sw3 = digitalRead(2); // -
// H
if (sm == 4) {
if (sw2 == 0) {
h1++;
}
if (sw3 == 0) {
h1--;
}
if (h1 >= 24 || h1 <= 0) {
h1 = 0;
}
/////////กระพริบตอนเซ็ต
lcd.setCursor(7, 1);
lcd.print(" ");
delay(200);
}
// Min
if (sm == 5) {
if (sw2 == 0) {
m1++;
}
if (sw3 == 0) {
m1--;
}
if (m1 >= 60 || m1 <= 0) {
m1 = 0;
}
lcd.setCursor(10, 1);
lcd.print(" ");
delay(200);
}
//Sec
if (sm == 6) {
if (sw2 == 0) {
s1++;
}
if (sw3 == 0) {
s1--;
}
if (s1 >= 60 || s1 <= 0) {
s1 = 0;
}
lcd.setCursor(13, 1);
lcd.print(" ");
delay(200);
}
//Select Mode 0-3
if (sm >= 10) {
sm = 0;
}
//////////////////////////Display
lcd.setCursor(0, 1); lcd.print("Start");
lcd.setCursor(9, 1); lcd.print( ":");
lcd.setCursor(12, 1); lcd.print( ":");
///////////แก้ไขตัวเลขให้เป็นสองหลัก
lcd.setCursor(7, 1);
if (h1 <= 9) {
lcd.print("0");
}
lcd.print(h1);
lcd.setCursor(10, 1);
if (m1 <= 9) {
lcd.print("0");
}
lcd.print(m1);
lcd.setCursor(13, 1);
if (s1 <= 9) {
lcd.print("0");
}
lcd.print(s1);
}
//////////////////////////////////////////////
void stop() {
int sw2 = digitalRead(3); // +
int sw3 = digitalRead(2); // -
// H
if (sm == 7) {
if (sw2 == 0) {
h2++;
}
if (sw3 == 0) {
h2--;
}
if (h2 >= 24 || h2 <= 0) {
h2 = 0;
}
/////////กระพริบตอนเซ็ต
lcd.setCursor(7, 1);
lcd.print(" ");
delay(200);
}
// Min
if (sm == 8) {
if (sw2 == 0) {
m2++;
}
if (sw3 == 0) {
m2--;
}
if (m2 >= 60 || m2 <= 0) {
m2 = 0;
}
lcd.setCursor(10, 1);
lcd.print(" ");
delay(200);
}
//Sec
if (sm == 9) {
if (sw2 == 0) {
s2++;
}
if (sw3 == 0) {
s2--;
}
if (s2 >= 60 || s2 <= 0) {
s2 = 0;
}
lcd.setCursor(13, 1);
lcd.print(" ");
delay(200);
}
//Select Mode 0-3
if (sm >= 10) {
sm = 0;
}
//////////////////////////Display
lcd.setCursor(0, 1 ); lcd.print(" Stop");
lcd.setCursor(9, 1); lcd.print( ":");
lcd.setCursor(12, 1); lcd.print( ":");
///////////แก้ไขตัวเลขให้เป็นสองหลัก
lcd.setCursor(7, 1);
if (h2 <= 9) {
lcd.print("0");
}
lcd.print(h2);
lcd.setCursor(10, 1);
if (m2 <= 9) {
lcd.print("0");
}
lcd.print(m2);
lcd.setCursor(13, 1);
if (s2 <= 9) {
lcd.print("0");
}
lcd.print(s2);
}
void ht() {
int hum = dht.readHumidity();
int temp = dht.readTemperature();
lcd.setCursor(0, 1);
lcd.print("Hum:"); lcd.print(hum);
lcd.setCursor(8, 1);
lcd.print("Temp:"); lcd.print(temp);
if (hum <= 70) {
// attachInterrupt(digitalPinToInterrupt(2), blink, CHANGE);
current1 = millis();
if (current1 - pre1 >= time1) {
pre1 = current1;
if (led1 == LOW) {
led1 = HIGH;
} else {
led1 = LOW;
}
digitalWrite(13, led1);
if (led1 == HIGH) {
time1 = time1 + time01;
} else {
(time1 = 1000);
}
}
digitalWrite(pump, HIGH);
delay(1000);
digitalWrite(pump, LOW);
delay(300);
}
else {
digitalWrite(pump, LOW);
delay(300);
}
if (temp >=38 ) {
digitalWrite(fan, HIGH);
delay(1000);
}
else if(temp<=25) {
digitalWrite(fan, LOW);
delay(300);
}
if (temp < 25 ) {
digitalWrite(lamp, HIGH);
delay(1000);
}
else {
digitalWrite(lamp, LOW);
delay(300);
}
}