//DHT 22
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
float temperature;
float humidity;
DHT dht(DHTPIN, DHTTYPE);
unsigned long currentMillisDHT22;
unsigned long previousMillisDHT22 = 0;
const unsigned long periodDHT22 = 2500;
//LCD
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
//Buttons
const int blueButtonPin = 4;
const int greenButtonPin = 5;
bool blueButtonState = 0;
bool greenButtonState = 0;
bool lastBlueButtonState = 0;
bool lastGreenButtonState = 0;
int greenButtonCounter=0; //increment threshold humidity
int blueButtonCounter=0; //increment threshold temperature
int setTemp=5;
int setHum=0;
int relayPin=13;
void mainMenu(){
lcd.setCursor(0, 0);
lcd.print("Hum.: ");
lcd.print(humidity,1);
lcd.print(" ");
lcd.setCursor(11,0);
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("Temp.:");
lcd.print(temperature,1);
lcd.print(" ");
lcd.setCursor(11,1);
lcd.print(char(223)); lcd.print("C");
}
void setup() {
pinMode(relayPin, OUTPUT);
pinMode(blueButtonPin, INPUT);
pinMode(greenButtonPin, INPUT);
lcd.begin(16, 2);
lcd.print("System "); lcd.setCursor(1, 1);
lcd.print(" loading...");
lcd.blink();
delay(1000);
lcd.noBlink();
lcd.clear();
dht.begin();
}
void loop() {
currentMillisDHT22 = millis();
if (currentMillisDHT22 - previousMillisDHT22 >= periodDHT22) {
temperature = dht.readTemperature();
humidity = dht.readHumidity();
previousMillisDHT22 = currentMillisDHT22;
}
// Check if any reads failed and exit early (to try again).
if (isnan(temperature) || isnan(humidity)) {
lcd.println(F("Failed to read from DHT sensor!"));
return;
}
greenButtonState = digitalRead(greenButtonPin);
if (greenButtonState== HIGH ) {
setHum+=5;
lcd.home();
lcd.print("Set humidity: ");
lcd.setCursor(14, 0);
lcd.print(setHum);
//greenButtonCounter;
delay(200);
} else {
lcd.setCursor(14, 0);
lcd.print(setHum);
}
/*if (setHum=100){
lcd.setCursor(14, 0);
lcd.print(" ");
}
else {
lcd.setCursor(14, 0);
lcd.print(setHum);
setHum=0;
}*/
//lastGreenButtonState=greenButtonState;
blueButtonState = digitalRead(blueButtonPin);
if (blueButtonState == HIGH) {
lcd.setCursor(14, 1);
lcd.print(setTemp);
} else {
lcd.setCursor(14, 1);
lcd.print(setTemp);
}
if (greenButtonState==LOW && blueButtonState==LOW){
mainMenu();
}
if (humidity<=setHum && temperature>=setTemp){
digitalWrite(relayPin, HIGH);
}else {
digitalWrite(relayPin,LOW);
}
}