#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h" // รวมไลบรารี DHT เพื่อใช้สำหรับเซนเซอร์ DHT
#define DHTPIN 2 // กำหนดพินของ Arduino ที่เชื่อมต่อกับเซนเซอร์ DHT
#define DHTTYPE DHT22 // กำหนดประเภทของเซนเซอร์ DHT เป็น DHT22
DHT dht(DHTPIN, DHTTYPE); // สร้างออบเจกต์ dht จากคลาส DHT
#define LCD_ADDR 0x27 // กำหนดที่อยู่ I2C ของจอ LCD (ส่วนมากจะเป็น 0x27 หรือ 0x3F ขึ้นอยู่กับจอของคุณ)
#define LCD_COLUMNS 20
#define LCD_ROWS 4
LiquidCrystal_I2C lcd(LCD_ADDR, LCD_COLUMNS, LCD_ROWS); // สร้างออบเจกต์ lcd จากคลาส LiquidCrystal_I2C
void setup() {
Serial.begin(9600); // เริ่มต้นการสื่อสารผ่าน Serial ที่ความเร็ว 9600 บอดเรต
dht.begin(); // เริ่มต้นการใช้งานเซนเซอร์ DHT
lcd.begin(LCD_COLUMNS, LCD_ROWS); // เริ่มต้นการใช้งานจอ LCD
lcd.backlight(); // เปิดไฟแบ็คไลท์ของจอ LCD
}
void loop() {
float h = dht.readHumidity(); // อ่านค่าความชื้นจากเซนเซอร์ DHT และเก็บไว้ในตัวแปร h
float t = dht.readTemperature(); // อ่านค่าอุณหภูมิจากเซนเซอร์ DHT และเก็บไว้ในตัวแปร t
lcd.clear(); // เคลียร์หน้าจอ LCD ก่อนแสดงผลใหม่
lcd.setCursor(0, 0); // เลื่อนเคอร์เซอร์ไปที่คอลัมน์ 0 แถว 0
lcd.print("Temperature: "); // แสดงข้อความ "Temperature: " บนจอ LCD
lcd.print(t); // แสดงค่าอุณหภูมิที่อ่านได้
lcd.print(" C"); // แสดงหน่วย °C
lcd.setCursor(0, 1); // เลื่อนเคอร์เซอร์ไปที่คอลัมน์ 0 แถว 1
lcd.print("Humidity: "); // แสดงข้อความ "Humidity: " บนจอ LCD
lcd.print(h); // แสดงค่าความชื้นที่อ่านได้
lcd.print(" %"); // แสดงเครื่องหมาย %
if (t >= 50) { // ถ้าอุณหภูมิสูงกว่า 50 องศาเซลเซียส
lcd.setCursor(0, 3); // เลื่อนเคอร์เซอร์ไปที่คอลัมน์ 0 แถว 2
lcd.print("Temp too high!!"); // แสดงข้อความเตือนบนจอ LCD
Serial.println("ความร้อนสูงเกินไป!!"); // แสดงข้อความเตือนบน Serial Monitor
}
Serial.print("Temperature: "); // แสดงข้อความ "Temperature: " บน Serial Monitor
Serial.print(t); // แสดงค่าอุณหภูมิที่อ่านได้
Serial.println("°C"); // แสดงหน่วย °C และขึ้นบรรทัดใหม่
Serial.print("Humidity: "); // แสดงข้อความ "Humidity: " บน Serial Monitor
Serial.print(h); // แสดงค่าความชื้นที่อ่านได้
Serial.println("%"); // แสดงเครื่องหมาย % และขึ้นบรรทัดใหม่
Serial.println("-----------------------------"); // แสดงเส้นแบ่งเพื่อความชัดเจนและขึ้นบรรทัดใหม่
delay(2000); // รอเวลา 2 วินาที (2000 มิลลิวินาที) ระหว่างการอ่านค่าแต่ละครั้ง
}