#include <LiquidCrystal_I2C.h>
/* Arduino example code for DHT11, DHT22/AM2302 and DHT21/AM2301 temperature and humidity sensors. More info: www.www.makerguides.com */
// Include the libraries:
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows
// Set DHT pin:
#define DHTPIN 12
// Set DHT type, uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Initialize DHT sensor for normal 16mhz Arduino:
DHT dht = DHT(DHTPIN, DHTTYPE);
float Humback[30];
float Tempback[30];
int cycles = 0;
byte ArrowUp[8] = {
B00100,
B01110,
B10101,
B00100,
B00100,
B00100,
B00100,
};
byte ArrowDown[8] = {
B00100,
B00100,
B00100,
B00100,
B10101,
B01110,
B00100,
};
void setup() {
// Setup sensor:
dht.begin();
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.clear();
lcd.createChar(0, ArrowUp);
lcd.createChar(1, ArrowDown);
}
void loop() {
// Read the humidity in %:
float h = dht.readHumidity();
// Read the temperature as Celsius:
float t = dht.readTemperature();
// Check if any reads failed and exit early (to try again):
if (isnan(h) || isnan(t)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Failed to read from DHT sensor!");
return;
}
// Compute heat index in Celsius:
float hic = dht.computeHeatIndex(t, h, false);
Tempback[cycles] = t;
Humback[cycles] = h;
cycles ++;
if (cycles == 30)
{
cycles = 0;
lcd.clear();
}
if (t >= 45)
{
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("TOO HOT!!");
delay(1000);
lcd.clear();
}
//lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Hum: ");
lcd.print(h);
lcd.print("%");
if (h > Humback[cycles+1])
{
lcd.write(byte(0));
}
else if (h < Humback[cycles+1])
{
lcd.write(byte(1));
}
else
{
lcd.print(" ");
}
lcd.setCursor(1, 1);
lcd.print("Temp: ");
lcd.print(t);
lcd.print("C");
if (t > Tempback[cycles+1])
{
lcd.write(byte(0));
}
else if (t < Tempback[cycles+1])
{
lcd.write(byte(1));
}
else
{
lcd.print(" ");
}
// Wait a few seconds between measurements:
delay(2000);
}