#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <Servo.h>
// กำหนดที่อยู่ของจอ LCD และขนาด (16x2)
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27 เป็นที่อยู่ I2C ของจอ LCD
#define DHTPIN 14
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define SERVO_PIN 2 // กำหนดขาที่ต่อ Servo
Servo myservo;
#define LDR_PIN 12 // กำหนดขาที่ต่อ LDR sensor module
#define LED_PIN 4 // กำหนดขาที่ต่อ LED
#define FAN_PIN // กำหนดขาที่ต่อพัดลม
void setup() {
// เริ่มต้นการสื่อสารผ่าน I2C
Wire.begin();
dht.begin();
// เริ่มต้นการใช้งานจอ LCD
lcd.init();
// เริ่มต้นการใช้งานจอ LCD
lcd.begin(16, 2); // ระบุจำนวนคอลัมน์และแถวของจอ LCD
// ปรับความสว่างของจอ (0-255)
lcd.setBacklight(255);
// ใช้ขา SERVO_PIN เป็นขาควบคุม Servo
myservo.attach(SERVO_PIN);
// กำหนดขา LED_PIN เป็น OUTPUT
pinMode(LED_PIN, OUTPUT);
// กำหนดขา LDR_PIN เป็น INPUT
pinMode(LDR_PIN, INPUT);
}
/// Shows parameters on LCD.
void refershDisplay() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (temperature <= 25) {
myservo.write(0); // หมุน Servo ไปที่ตำแหน่ง 0 องศา
} else if (temperature >= 35) {
myservo.write(180); // หมุน Servo ไปที่ตำแหน่ง 180 องศา
} else {
// ให้ Servo อยู่ในตำแหน่งกลาง 90 องศา
myservo.write(90);
}
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperature);
lcd.print("(C) H:");
lcd.print(humidity);
int ldrValue = analogRead(LDR_PIN);
lcd.setCursor(0, 1);
lcd.print("LDR:");
lcd.print(ldrValue);
}
void loop() {
refershDisplay();
// ควบคุม Servo
//myservo.write(90); // ให้ Servo หมุนไปที่มุม 90 องศา
// อ่านค่าจาก LDR sensor
int ldrValue = analogRead(LDR_PIN);
// เปิด-ปิด LED ตามค่า LDR
if (ldrValue < 500) {
digitalWrite(LED_PIN, HIGH); // เปิด LED
} else {
digitalWrite(LED_PIN, LOW); // ปิด LED
}
// ทำงานเพิ่มเติมสำหรับพัดลม
// ทำงานเพิ่มเติมสำหรับควบคุมปั้มน้ำ
}