const int poten1 = 35; // ขา Analog Input สำหรับ Potentiometer 1 (ปรับความสว่าง LED1)
const int poten2 = 34; // ขา Analog Input สำหรับ Potentiometer 2 (ควบคุม LED2,3,4 เปิด-ปิด)
const int led1 = 12; // ขา Digital Output สำหรับ LED 1 (รองรับ PWM)
const int led2 = 14; // ขา Digital Output สำหรับ LED 2
const int led3 = 27; // ขา Digital Output สำหรับ LED 3
const int led4 = 26; // ขา Digital Output สำหรับ LED 4
// กำหนดช่วงค่าของ Potentiometer 2 สำหรับการเปิด-ปิด LED2, LED3, LED4
// ค่า Analog Read ของ ESP32 จะอยู่ในช่วง 0 ถึง 4095
const int THRESHOLD_OFF_ALL = 300; // ถ้า PotenValue2 ต่ำกว่าหรือเท่ากับค่านี้ LED2,3,4 จะดับทั้งหมด
const int THRESHOLD_LED2_ON = 1300; // ถ้า PotenValue2 เกินค่านี้ขึ้นไป LED2 จะติด
const int THRESHOLD_LED3_ON = 2600; // ถ้า PotenValue2 เกินค่านี้ขึ้นไป LED3 จะติด
const int THRESHOLD_LED4_ON = 3900; // ถ้า PotenValue2 เกินค่านี้ขึ้นไป LED4 จะติด (ทุกดวงจะติด)
void setup() {
Serial.begin(115200); // เริ่มต้น Serial Communication ที่ความเร็ว 115200 เพื่อดูค่า
// กำหนดโหมดของขา Potentiometer เป็น INPUT
pinMode(poten1, INPUT);
pinMode(poten2, INPUT);
// กำหนดโหมดของขา LED เป็น OUTPUT
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
// ตั้งค่าเริ่มต้นให้ LED ทั้งหมดดับเมื่อเริ่มต้นโปรแกรม
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
}
void loop() {
// --- ส่วนควบคุม LED 1 ด้วย Potentiometer 1 (ปรับความสว่างแบบ Analog) ---
int potenValue1 = analogRead(poten1); // อ่านค่าจาก Potentiometer 1 (0-4095)
// แปลงค่าจากช่วง 0-4095 ไปเป็น 0-255 สำหรับ PWM (analogWrite)
int brightness1 = map(potenValue1, 0, 4095, 0, 255);
analogWrite(led1, brightness1); // กำหนดความสว่างของ LED 1
Serial.print("Poten1 Value: ");
Serial.print(potenValue1);
Serial.print(", LED1 Brightness: ");
Serial.print(brightness1);
// --- ส่วนควบคุม LED 2, 3, 4 ด้วย Potentiometer 2 (เปิด-ปิดแบบ Digital 3 ช่วง) ---
int potenValue2 = analogRead(poten2); // อ่านค่าจาก Potentiometer 2 (0-4095)
Serial.print(" | Poten2 Value: ");
Serial.print(potenValue2);
Serial.print(" | LEDs 2-4 Status: ");
// หากค่าต่ำกว่า THRESHOLD_OFF_ALL (ค่าต่ำสุด) ให้ดับทุกดวง
if (potenValue2 <= THRESHOLD_OFF_ALL) {
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
Serial.println("All OFF");
}
// หากค่าเกิน THRESHOLD_OFF_ALL แต่ไม่เกิน THRESHOLD_LED2_ON: LED2 ติด
else if (potenValue2 > THRESHOLD_OFF_ALL && potenValue2 <= THRESHOLD_LED2_ON) {
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
Serial.println("LED2 ON");
}
// หากค่าเกิน THRESHOLD_LED2_ON แต่ไม่เกิน THRESHOLD_LED3_ON: LED2 และ LED3 ติด
else if (potenValue2 > THRESHOLD_LED2_ON && potenValue2 <= THRESHOLD_LED3_ON) {
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
Serial.println("LED2 & 3 ON");
}
// หากค่าเกิน THRESHOLD_LED3_ON (จนถึงค่าสูงสุด): LED2, LED3, และ LED4 ติด
else { // ใช้ else สุดท้ายเพื่อครอบคลุมกรณีที่เหลือทั้งหมด (potenValue2 > THRESHOLD_LED3_ON)
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
Serial.println("LED2, 3 & 4 ON (All)");
}
delay(50); // หน่วงเวลาเล็กน้อย เพื่อให้การอ่านค่าเสถียรและ Serial Monitor แสดงผลได้ทัน
}