// เรียกใช้ไลบรารีสำหรับ DHT22 และ LCD I2C
#include <Wire.h> // ไลบรารีสำหรับการสื่อสาร I2C
#include <LiquidCrystal_I2C.h> // ไลบรารีสำหรับควบคุมจอ LCD I2C
#include <DHT.h> // ไลบรารีสำหรับเซ็นเซอร์ DHT22
// กำหนดพารามิเตอร์ของ DHT22
#define DHTPIN 10 // ขาที่เชื่อมต่อกับ DHT22
#define DHTTYPE DHT22 // ระบุชนิดเซ็นเซอร์ DHT22
DHT dht(DHTPIN, DHTTYPE); // สร้างออบเจ็กต์ DHT ด้วยพินที่ใช้และชนิดเซ็นเซอร์
// กำหนดที่อยู่ I2C ของจอ LCD และขนาด (20x4)
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
// เริ่มต้นการทำงานของจอ LCD
lcd.init(); // ตั้งค่าจอ LCD ขนาด 20x4
lcd.backlight(); // เปิดไฟ backlight ของจอ LCD
// เริ่มต้นการทำงานของ DHT22
dht.begin();
// เริ่มต้นการสื่อสารกับ Serial Monitor (ถ้าต้องการตรวจสอบค่า)
Serial.begin(9600);
}
void loop() {
// อ่านค่าอุณหภูมิและความชื้นจาก DHT22
float humidity = dht.readHumidity(); // อ่านค่าความชื้นจาก DHT22
float temperature = dht.readTemperature(); // อ่านค่าอุณหภูมิจาก DHT22
// ตรวจสอบว่าการอ่านค่าล้มเหลวหรือไม่
if (isnan(humidity) || isnan(temperature)) {
// แสดงข้อความ error บน Serial Monitor
Serial.println("Failed to read from DHT sensor!");
// แสดงข้อความ error บนจอ LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
return;
}
// แสดงค่าอุณหภูมิและความชื้นใน Serial Monitor
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("% Temperature: ");
Serial.print(temperature);
Serial.println("C");
// ล้างจอ LCD ก่อนแสดงผลใหม่
lcd.clear();
// แสดงค่าความชื้นบนจอ LCD
lcd.setCursor(0, 0); // กำหนดตำแหน่งตัวชี้ไปที่แถวบนซ้ายสุด
lcd.print("Humidity: "); // แสดงข้อความ "Humidity: "
lcd.print(humidity); // แสดงค่าความชื้นที่อ่านได้
lcd.print("%"); // แสดงสัญลักษณ์ %
// แสดงค่าอุณหภูมิบนจอ LCD
lcd.setCursor(0, 1); // กำหนดตัวชี้ไปที่แถวที่สอง
lcd.print("Temp: "); // แสดงข้อความ "Temp: "
lcd.print(temperature); // แสดงค่าอุณหภูมิที่อ่านได้
lcd.print("C"); // แสดงหน่วยองศาเซลเซียส
// หน่วงเวลา 2 วินาที (2000 ms) ก่อนการอ่านค่าครั้งถัดไป
delay(2000);
}