#define THRESHOLD 2045 // กำหนดค่าเกณฑ์สำหรับเซนเซอร์ LDR
const int BUTTON_1_PIN = 14; // พินของปุ่ม 1 (เปลี่ยนโหมด)
const int BUTTON_2_PIN = 27; // พินของปุ่ม 2 (ควบคุมรีเลย์ในโหมด Manual)
const int RELAY_PIN = 5; // พินของรีเลย์
#define WHITE_LED_PIN 2 // พินของไฟ LED สีขาว
#define RED_LED_PIN 12 // พินของไฟ LED สีแดง
const int LDR_SENSOR_PIN = 34; // พินของเซนเซอร์ LDR
bool isAutoMode = false; // ตัวแปรเก็บสถานะโหมด Auto หรือ Manual
bool manualRelayState = LOW; // ตัวแปรสถานะรีเลย์ในโหมด Manual
void setup() {
pinMode(WHITE_LED_PIN, OUTPUT); // ตั้งค่าพินไฟ LED สีขาวเป็นเอาต์พุต
pinMode(RED_LED_PIN, OUTPUT); // ตั้งค่าพินไฟ LED สีแดงเป็นเอาต์พุต
pinMode(RELAY_PIN, OUTPUT); // ตั้งค่าพินรีเลย์เป็นเอาต์พุต
pinMode(BUTTON_1_PIN, INPUT_PULLUP); // ตั้งค่าพินปุ่ม 1 เป็นอินพุต พร้อมเปิด Pull-up resistor
pinMode(BUTTON_2_PIN, INPUT_PULLUP); // ตั้งค่าพินปุ่ม 2 เป็นอินพุต พร้อมเปิด Pull-up resistor
pinMode(LDR_SENSOR_PIN, INPUT); // ตั้งค่าพินเซนเซอร์ LDR เป็นอินพุต
Serial.begin(115200); // เริ่มการสื่อสารผ่าน Serial Monitor ที่ความเร็ว 115200 baud
}
void loop() {
// อ่านสถานะปุ่ม 1 เพื่อเปลี่ยนโหมด
if (digitalRead(BUTTON_1_PIN) == LOW) {
isAutoMode = !isAutoMode; // สลับโหมดระหว่าง Auto และ Manual
delay(300); // ดีเลย์เพื่อป้องกันการสั่นไหวของปุ่ม
Serial.print("Mode Changed to: ");
Serial.println(isAutoMode ? "AUTO" : "MANUAL"); // แสดงสถานะโหมดใน Serial Monitor
}
if (isAutoMode) { // โหมดอัตโนมัติ
int ldrValue = analogRead(LDR_SENSOR_PIN); // อ่านค่าจากเซนเซอร์ LDR
Serial.print("LDR Value: ");
Serial.println(ldrValue); // แสดงค่า LDR ใน Serial Monitor
if (ldrValue < THRESHOLD) { // ตรวจสอบว่าแสงสว่างเพียงพอหรือไม่
Serial.print("Light!\n");
digitalWrite(RELAY_PIN, LOW); // ปิดรีเลย์
digitalWrite(WHITE_LED_PIN, LOW); // ปิดไฟ LED สีขาว
} else {
Serial.print("Dark!\n");
digitalWrite(RELAY_PIN, HIGH); // เปิดรีเลย์
digitalWrite(WHITE_LED_PIN, HIGH); // เปิดไฟ LED สีขาว
}
digitalWrite(RED_LED_PIN, HIGH); // เปิดไฟ LED สีแดงในโหมด Auto
} else { // โหมดแมนนวล
if (digitalRead(BUTTON_2_PIN) == LOW) { // อ่านสถานะปุ่ม 2 เพื่อสลับสถานะรีเลย์
manualRelayState = !manualRelayState; // สลับสถานะรีเลย์ในโหมด Manual
delay(300); // ดีเลย์เพื่อป้องกันการสั่นไหวของปุ่ม
}
digitalWrite(RED_LED_PIN, LOW); // ปิดไฟ LED สีแดงในโหมด Manual
digitalWrite(RELAY_PIN, manualRelayState); // ควบคุมรีเลย์ตามสถานะ manualRelayState
digitalWrite(WHITE_LED_PIN, manualRelayState); // ควบคุมไฟ LED สีขาวตาม manualRelayState
}
}