#include "DHT.h"
#define DHTPIN 7
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define btn1 4
#define btn2 2
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
bool Dis = true;
void setup() {
Serial.begin(115200); // เริ่มต้น Serial communication ที่ความเร็ว 115200 bps
pinMode(btn1, INPUT_PULLUP); // ตั้งโหมดของปุ่ม btn1 เป็น INPUT_PULLUP เพื่อให้ปุ่มทำงานในโหมด Pull-up
pinMode(btn2, INPUT_PULLUP); // ตั้งโหมดของปุ่ม btn2 เป็น INPUT_PULLUP เพื่อให้ปุ่มทำงานในโหมด Pull-up
lcd.begin(16, 2); // เริ่มต้นการใช้งาน LCD ที่มีขนาด 16x2
lcd.init();
lcd.backlight(); // เปิดไฟหลังจอ LCD
dht.begin(); // เริ่มต้นการใช้งานเซ็นเซอร์ DHT
}
void loop() {
delay(100); // หน่วงเวลา 100 มิลลิวินาทีเพื่อให้ระบบทำงานได้โดยสมบูรณ์
float h = dht.readHumidity(); // อ่านค่าความชื้น
float t = dht.readTemperature(); // อ่านค่าอุณหภูมิ
bool btn1D = !digitalRead(btn1); // ตรวจสอบว่าปุ่ม btn1 ถูกกดหรือไม่
bool btn2S = !digitalRead(btn2); // ตรวจสอบว่าปุ่ม btn2 ถูกกดหรือไม่
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!")); // พิมพ์ข้อความลงบน Serial Monitor ในกรณีที่ไม่สามารถอ่านค่าจากเซ็นเซอร์ DHT ได้
return;
}
if (btn1D) {
Dis = true; // กำหนดค่า Dis เป็น true เมื่อปุ่ม btn1 ถูกกด
}
if (btn2S) {
Dis = false; // กำหนดค่า Dis เป็น false เมื่อปุ่ม btn2 ถูกกด
}
if (Dis) {
// แสดงค่าอุณหภูมิและความชื้นบน LCD และ Serial Monitor หาก Dis เป็น true
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.setCursor(6, 0);
lcd.print(t);
lcd.setCursor(0, 1);
lcd.print("Humidity:");
lcd.setCursor(10, 1);
lcd.print(h);
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(F("°C "));
Serial.print("Humidity: ");
Serial.print(h);
Serial.println(F("%"));
} else {
lcd.setCursor(0, 0);
lcd.clear(); // ล้างหน้าจอ LCD เมื่อ Dis เป็น false
}
}