#include "DHT.h"
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#define DHTPIN 13
#define DHTTYPE DHT22
#define Buzzer 4
const int servoPin = 18;
LiquidCrystal_I2C lcd(0x27, 20, 4);
DHT dht(DHTPIN, DHTTYPE);
Servo servo;
RTC_DS3231 RTC;
float Temp, Humi;
int pos = 0;
void setup() {
Serial.begin(115200);
dht.begin();
RTC.begin();
lcd.init();
lcd.backlight();
servo.attach(servoPin);
pinMode(Buzzer, OUTPUT);
}
void loop() {
DateTime now = RTC.now();
if (now.hour() == 11 && now.minute() == 49 ) {
for(pos = 0; pos <=180; pos++){
servo.write(pos);
delay(10);
}
}else if (now.hour() == 11 && now.minute() == 50 ) {
pos = 0;
servo.write(pos);
}else if (now.hour() == 16 && now.minute() == 00 ) {
for(pos = 0; pos <=180; pos++){
servo.write(pos);
delay(10);
}
}else if (now.hour() == 17 && now.minute() == 00 ) {
pos = 0;
servo.write(pos);
}
if((Temp >= 25 && Temp <= 35)&&(Humi >= 60 && Humi <= 80)){
lcd.clear();
lcd_display(0, 0, "TEMPERATURE:");
lcd_display_float(13, 0, Temp);
lcd_display(19, 0, "C");
lcd_display(0, 1,"HUMIDITY:");
lcd_display_float(13, 1, Humi);
lcd_display(19, 1, "%");
}else if((Temp < 25)&&(Humi >= 60 && Humi <= 80)){
lcd.clear();
lcd_display(0, 0, "WARNING!!!");
lcd_display(0, 1, "NOT ENOUGH TEMP");
digitalWrite(Buzzer, HIGH);
delay(500);
digitalWrite(Buzzer, LOW);
delay(500);
}else if((Temp > 35)&&(Humi >= 60 && Humi <= 80)){
lcd.clear();
lcd_display(0, 0, "WARNING!!!");
lcd_display(0, 1, "TOO MUCH TEMP");
digitalWrite(Buzzer, HIGH);
delay(500);
digitalWrite(Buzzer, LOW);
delay(500);
}else if((Temp >= 25 && Temp <= 35)&&(Humi < 60)){
lcd.clear();
lcd_display(0, 0, "WARNING!!!");
lcd_display(0, 1, "NOT ENOUGH HUMI");
digitalWrite(Buzzer, HIGH);
delay(500);
digitalWrite(Buzzer, LOW);
delay(500);
for(pos = 0; pos <=180; pos++){
servo.write(pos);
delay(10);
}
}else if((Temp >= 25 && Temp <= 35)&&(Humi > 80)){
lcd.clear();
lcd_display(0, 0, "WARNING!!!");
lcd_display(0, 1, "TOO MUCH HUMI");
digitalWrite(Buzzer, HIGH);
delay(500);
digitalWrite(Buzzer, LOW);
delay(500);
}else if((Temp < 25)&&(Humi < 60)){
lcd.clear();
lcd_display(0, 0, "WARNING!!!");
lcd_display(0, 1, "NOT ENOUGH HUMI&TEMP");
digitalWrite(Buzzer, HIGH);
delay(500);
digitalWrite(Buzzer, LOW);
delay(500);
for(pos = 0; pos <=180; pos++){
servo.write(pos);
delay(10);
}
}else if((Temp > 35)&&(Humi > 80)){
lcd.clear();
lcd_display(0, 0, "WARNING!!!");
lcd_display(0, 1, "TOO MUCH HUMI&TEMP");
digitalWrite(Buzzer, HIGH);
delay(500);
digitalWrite(Buzzer, LOW);
delay(500);
}else if((Temp < 25)&&(Humi > 80)){
lcd.clear();
lcd_display(0, 0, "WARNING!!!");
lcd_display(0, 1, "NOT ENOUGH TEMP");
lcd_display(0, 2, "TOO MUCH HUMI");
digitalWrite(Buzzer, HIGH);
delay(500);
digitalWrite(Buzzer, LOW);
delay(500);
}else if((Temp > 35)&&(Humi < 60)){
lcd.clear();
lcd_display(0, 0, "WARNING!!!");
lcd_display(0, 1, "TOO MUCH TEMP");
lcd_display(0, 2, "NOT ENOUGH HUMI");
digitalWrite(Buzzer, HIGH);
delay(500);
digitalWrite(Buzzer, LOW);
delay(500);
for(pos = 0; pos <=180; pos++){
servo.write(pos);
delay(10);
}
}
temp_and_humidity();
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(2000);
}
void temp_and_humidity(){
Temp = dht.readTemperature();
Humi = dht.readHumidity();
}
void lcd_display(int x, int y, String t){
lcd.setCursor(x,y);
lcd.print(t);
}
void lcd_display_float(int x, int y, float t){
lcd.setCursor(x,y);
lcd.print(String(t));
}