#include "DHT.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define pumpPin 8
#define fanPin 9
#define lampPin 10
#define dhtPin 2
#define DHTTYPE DHT22
DHT dht(dhtPin, DHTTYPE);
int h;
int t;
unsigned long curTime = 0;
unsigned long pPre = 0;
unsigned long pfanPre = 0;
unsigned long plampPre = 0;
int pTime = 1000;
int pfanTime = 1000;
int plampTime = 1000;
int ledPumpState = LOW;
int ledFanState = LOW;
int ledLampState = LOW;
void setup() {
//Serial.begin(115200);
pinMode(pumpPin, OUTPUT);
pinMode(fanPin, OUTPUT);
pinMode(lampPin, OUTPUT);
pinMode(dhtPin, INPUT);
dht.begin();
lcd.begin(20, 4);
lcd.init();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("Hum. : " );
lcd.setCursor(3, 1);
lcd.print("Temp. : " );
}
void loop() {
curTime = millis();
h = dht.readHumidity();
t = dht.readTemperature();
lcd.setCursor(13, 0);
lcd.print(h);
lcd.print(" ");
lcd.setCursor(13, 1);
lcd.print(t);
lcd.print(" ");
if (h <= 40) {
if (curTime - pPre >= pTime) {
pPre = curTime;
if (ledPumpState == LOW) {
ledPumpState = HIGH;
pTime = 3000;
} else {
ledPumpState = LOW;
pTime = 500;
}
digitalWrite(pumpPin, ledPumpState);
}
} else if (h > 40 && h < 80) {
if (curTime - pPre >= pTime) {
pPre = curTime;
if (ledPumpState == LOW) {
ledPumpState = HIGH;
pTime = 1000;
} else {
ledPumpState = LOW;
pTime = 2000;
}
digitalWrite(pumpPin, ledPumpState);
}
} else {
digitalWrite(pumpPin, LOW);
}
///////////////// lamp off, fan on (t>40), lamp on, fan off (t<20)
if (t <= 20) {
if (curTime - plampPre >= plampTime) {
plampPre = curTime;
if (ledLampState == LOW) {
ledLampState = HIGH;
plampTime = 1000;
} else {
ledLampState = LOW;
plampTime = 1000;
}
digitalWrite(lampPin, ledLampState);
digitalWrite(fanPin, LOW);
}
} else if (t >= 40) {
if (curTime - pfanPre >= pfanTime) {
pfanPre = curTime;
if (ledFanState == LOW) {
ledFanState = HIGH;
pfanTime = 1000;
} else {
ledFanState = LOW;
pfanTime = 1000;
}
digitalWrite(fanPin, ledFanState);
digitalWrite(lampPin, LOW);
}
} else {
digitalWrite(fanPin, LOW);
digitalWrite(lampPin, LOW);
}
}