#include <DHT.h>
#define MODE_COUNT 3
#define DHTPIN 15 // ขาของเซ็นเซอร์ DHT
#define DHTTYPE DHT22 // ใช้เซ็นเซอร์ DHT11
#define BUTTON_PIN 12 // ปุ่มกด (สามารถเปลี่ยนขาตามต้องการ)
#define MODE_SWITCH_PIN 14 // ปุ่มกดสำหรับสลับโหมด (Manual/Automatic)
const int ledIndicator[MODE_COUNT] = {16, 17, 18}; // LED สีเขียว, ฟ้า, เหลือง
const int temperatureThreshold[MODE_COUNT] = {25, 30, 35}; // เกณฑ์อุณหภูมิแต่ละสี
DHT dht(DHTPIN, DHTTYPE); // สร้างออบเจกต์ DHT
bool isRunning = false; // สถานะการทำงาน (เริ่มต้นหยุดการทำงาน)
bool isManualMode = false; // โหมดการทำงาน (Manual หรือ Automatic)
void setup() {
Serial.begin(115200);
dht.begin(); // เริ่มต้นการทำงานของเซ็นเซอร์ DHT
pinMode(BUTTON_PIN, INPUT_PULLUP); // กำหนดขาของปุ่มเป็น INPUT_PULLUP
pinMode(MODE_SWITCH_PIN, INPUT_PULLUP); // กำหนดขาของปุ่มสลับโหมดเป็น INPUT_PULLUP
for (int i = 0; i < MODE_COUNT; i++) {
pinMode(ledIndicator[i], OUTPUT); // กำหนดขาของหลอดไฟเป็น OUTPUT
}
}
void loop() {
// ตรวจสอบสถานะของปุ่มสำหรับเริ่ม/หยุด
static unsigned long lastButtonPress = 0;
if (digitalRead(BUTTON_PIN) == LOW && millis() - lastButtonPress > 200) {
isRunning = !isRunning; // เปลี่ยนสถานะการทำงาน (เริ่ม/หยุด)
lastButtonPress = millis();
if (isRunning) {
Serial.println("System Started");
} else {
Serial.println("System Stopped");
}
}
// ตรวจสอบสถานะของปุ่มสลับโหมด (Manual/Automatic)
static unsigned long lastModeSwitch = 0;
if (digitalRead(MODE_SWITCH_PIN) == LOW && millis() - lastModeSwitch > 200) {
isManualMode = !isManualMode; // เปลี่ยนโหมด (Manual/Automatic)
lastModeSwitch = millis();
if (isManualMode) {
Serial.println("Manual Mode");
} else {
Serial.println("Automatic Mode");
}
}
if (isRunning) {
// อ่านค่าอุณหภูมิจากเซ็นเซอร์
float temperature = dht.readTemperature();
if (isnan(temperature)) {
Serial.println("Failed to read temperature!");
return;
}
Serial.print("Temperature: ");
Serial.println(temperature);
if (isManualMode) {
// โหมด Manual: แสดงอุณหภูมิเท่านั้น
Serial.println("Manual mode: Display temperature without controlling LEDs");
} else {
// โหมด Automatic: ควบคุม LED ตามอุณหภูมิ
if (temperature < temperatureThreshold[0]) {
// อุณหภูมิต่ำกว่า 25°C → สีเขียว
digitalWrite(ledIndicator[0], HIGH); // เปิดสีเขียว
digitalWrite(ledIndicator[1], LOW); // ปิดสีฟ้า
digitalWrite(ledIndicator[2], LOW); // ปิดสีเหลือง
} else if (temperature >= temperatureThreshold[0] && temperature < temperatureThreshold[1]) {
// อุณหภูมิระหว่าง 25–30°C → สีฟ้า
digitalWrite(ledIndicator[0], LOW); // ปิดสีเขียว
digitalWrite(ledIndicator[1], HIGH); // เปิดสีฟ้า
digitalWrite(ledIndicator[2], LOW); // ปิดสีเหลือง
} else {
// อุณหภูมิ 30°C ขึ้นไป → สีเหลือง
digitalWrite(ledIndicator[0], LOW); // ปิดสีเขียว
digitalWrite(ledIndicator[1], LOW); // ปิดสีฟ้า
digitalWrite(ledIndicator[2], HIGH); // เปิดสีเหลือง
}
}
} else {
// ถ้าหยุดการทำงานให้ปิด LED ทั้งหมด
digitalWrite(ledIndicator[0], LOW);
digitalWrite(ledIndicator[1], LOW);
digitalWrite(ledIndicator[2], LOW);
}
delay(100); // ทำให้การอ่านค่าปุ่มทำงานได้เร็วขึ้น
}