#include <DHT.h> // ไลบรารีสำหรับเซ็นเซอร์ DHT
#include <LiquidCrystal_I2C.h> // ไลบรารีสำหรับจอ LCD I2C
#include <Wire.h>
#define LED_RED 27 // ขา GPIO สำหรับ LED สีแดง
#define LED_GREEN 26 // ขา GPIO สำหรับ LED สีฟ้า
#define DHT_PIN 12 // ขา GPIO ที่เชื่อมต่อกับเซ็นเซอร์
#define DHT_PIN1 15 // ขา GPIO ที่เชื่อมต่อกับเซ็นเซอร์
#define DHTTYPE DHT22 // ประเภทของเซ็นเซอร์ DHT22
#define SDA_PIN 21 // กำหนด GPIO 26 เป็น SDA
#define SCL_PIN 22 // กำหนด GPIO 25 เป็น SCL
DHT dht(DHT_PIN, DHTTYPE); // สร้างออบเจ็กต์ DHT
LiquidCrystal_I2C lcd(0x27, 16, 2); // ที่อยู่ I2C และขนาดจอ LCD (16x2)
void setup() {
Serial.begin(115200); // เริ่มการสื่อสาร Serial
pinMode(LED_RED, OUTPUT); // ตั้งค่า LED สีแดงเป็น OUTPUT
pinMode(LED_GREEN, OUTPUT); // ตั้งค่า LED สีฟ้าเป็น OUTPUT
dht.begin(); // เริ่มต้นการใช้งานเซ็นเซอร์ DHT
// เริ่มต้นจอ LCD
Wire.begin(SDA_PIN, SCL_PIN); ///จะกำหนดเเบบนี้ Wire.begin(26, 25); กำหนดขาไปเลย (ต่อSDA จอ LCD ,ต่อSCL จอ LCD)
lcd.begin(16, 2);
lcd.backlight(); // เปิดไฟพื้นหลังจอ LCD
lcd.setCursor(1, 0); // แสดงข้อความต้อนรับในแถวแรก
lcd.print("Welcome To");
lcd.setCursor(1, 1); // แสดงข้อความต้อนรับในแถวที่สอง
lcd.print("TEST");
delay(2000); // แสดงข้อความต้อนรับ 2 วินาที
lcd.clear(); // ลบข้อความต้อนรับ
lcd.print("Initializing..."); // แสดงข้อความเริ่มต้น
}
void loop() {
digitalWrite(LED_GREEN, HIGH);
// อ่านค่าความชื้นและอุณหภูมิจากเซ็นเซอร์
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// ตรวจสอบว่าการอ่านค่าประสบความสำเร็จหรือไม่
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
lcd.setCursor(0, 1);
lcd.print("Try Again ");
delay(2000);
return; // ออกจาก loop และรอการอ่านครั้งถัดไป
}
// แสดงค่าที่อ่านได้ใน Serial Monitor
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" C");
// แสดงผลในจอ LCD
lcd.clear();
lcd.setCursor(0, 0); // ตำแหน่งแถวที่ 1 คอลัมน์ที่ 0
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C ");
lcd.setCursor(0, 1); // ตำแหน่งแถวที่ 2 คอลัมน์ที่ 0
lcd.print("Hum: ");
lcd.print(humidity);
lcd.print(" % ");
delay(2000); // รอ 2 วินาทีเพื่ออ่านค่าใหม่
}