// https://wokwi.com/projects/344892587898831442 program dht22
//---- LCD 20X4 (I2C)
#include <LiquidCrystal_I2C.h> // LCD 20X4 (I2C)
LiquidCrystal_I2C lcd(0X27, 20, 4); // LCD 20X4 (I2C) can use address 0X3f
// -- DHT
#include "DHT.h" // DHT
#define dhtPin 2 // dhtPin is digital led pin 2 use for DHT22
#define DHTTYPE DHT22 // DHT
DHT dht(dhtPin, DHTTYPE); // DHT
// ---
#define dly1000 1000
//#define d8 8 // digital led pin 8 use Relay or pump can use define
// --- Relay use for ป้๊ม Servo
int pumPin = 8; // variable val for keep value digital leg pin 8 equiment Relay
// --- DHT22
int h; // Humidity
int t; // Temperature
//--- baurate for Serial monitor
void Sbaudrate() {
Serial.begin(115200);
}
//---
void InitPinMode() {
pinMode(pumPin, OUTPUT); // Relay
pinMode(dhtPin, INPUT); // DHT22
}
//--- DHT22
void InitDHT22() {
dht.begin();
}
//--- DHT22 humidity/temperature sensors, display to Serial Monitor
void Dht22() {
h = dht.readHumidity();
t = dht.readTemperature();
Serial.print("Hum: ");
Serial.print(h);
Serial.print(" Temp: ");
Serial.println(t);
delay(dly1000);
}
//---- LCD 20X4 (I2C), display to LCD 20X4 (I2C)
void InitLCD20X4() { // initialize LCD 20X4 (I2C)
lcd.init();
lcd.backlight();
}
// --- use LCD20X4 (I2C)
void UseLCD20X4() { // initialize LCD 20X4 (I2C)
h = dht.readHumidity();
t = dht.readTemperature();
lcd.setCursor(0,0);
lcd.print("Hum: ");
lcd.print(h);
lcd.print(" ");
CHumInterval(h); //--- Hum <40 pump on , Hum >80 pump off
lcd.print(" Temp: ");
lcd.print(t);
lcd.print(" ");
}
//--- Hum <40 pump on , Hum >80 pump off
void CHumInterval(int h) {
if (h<40) {
digitalWrite(pumPin, HIGH);
} else if (h>70) {
digitalWrite(pumPin, LOW);
}
}
//---
void setup() {
Sbaudrate(); // Serial monitor
InitPinMode(); // Set pinMode
InitDHT22(); // DHT22
InitLCD20X4(); // initialize LCD 20X4 (I2C)
}
void loop() {
Dht22(); // DHT22
UseLCD20X4(); // LCD 20X4 (I2C)
}