// กำหนด Pins สำหรับสัญญาณไฟจราจรแต่ละแยก
const int greenPin1 = 10; // แยกที่ 1 - ไฟเขียว
const int yellowPin1 = 6; // แยกที่ 1 - ไฟเหลือง
const int redPin1 = 2; // แยกที่ 1 - ไฟแดง
const int greenPin2 = 11; // แยกที่ 2 - ไฟเขียว
const int yellowPin2 = 7; // แยกที่ 2 - ไฟเหลือง
const int redPin2 = 3; // แยกที่ 2 - ไฟแดง
const int greenPin3 = 12; // แยกที่ 3 - ไฟเขียว
const int yellowPin3 = 8; // แยกที่ 3 - ไฟเหลือง
const int redPin3 = 4; // แยกที่ 3 - ไฟแดง
const int greenPin4 = 13; // แยกที่ 4 - ไฟเขียว
const int yellowPin4 = 9; // แยกที่ 4 - ไฟเหลือง
const int redPin4 = 5; // แยกที่ 4 - ไฟแดง
// โครงสร้างข้อมูลสำหรับเก็บระยะเวลาของแต่ละ Phase (หน่วยเป็น milliseconds)
struct TrafficPhase {
int greenTime;
int yellowTime;
int redTime;
};
// สร้าง array เพื่อเก็บข้อมูลระยะเวลาของแต่ละ Phase
TrafficPhase phases[4] = {
{120000, 5000, 280000}, // Phase 1 (G=120 , Y=5 , R=280)
{124000, 5000, 276000}, // Phase 2 (G=124 , Y=5 , R=276)
{65000, 5000, 335000}, // Phase 3 (G=65 , Y=5 , R=335)
{92000, 5000, 308000} // Phase 4 (G=92 , Y=5 , R=308)
};
// ฟังก์ชันสำหรับเปิดไฟ
void turnOnLight(int pin) {
digitalWrite(pin, HIGH);
}
// ฟังก์ชันสำหรับปิดไฟ
void turnOffLight(int pin) {
digitalWrite(pin, LOW);
}
// ฟังก์ชันควบคุมสัญญาณไฟในแต่ละ Phase
void controlPhase(int phaseNumber) {
Serial.print("Phase ");
Serial.println(phaseNumber);
// ปิดไฟทั้งหมดก่อนเริ่ม Phase ใหม่ (เพื่อความชัดเจน)
turnOffLight(greenPin1); turnOffLight(yellowPin1); turnOffLight(redPin1);
turnOffLight(greenPin2); turnOffLight(yellowPin2); turnOffLight(redPin2);
turnOffLight(greenPin3); turnOffLight(yellowPin3); turnOffLight(redPin3);
turnOffLight(greenPin4); turnOffLight(yellowPin4); turnOffLight(redPin4);
switch (phaseNumber) {
case 1: // ควบคุมสัญญาณไฟของแยกที่ 1 ใน Phase 1
turnOnLight(greenPin1);
Serial.println("แยกที่ 1 (ผังเมือง2): ไฟเขียว");
delay(phases[0].greenTime);
turnOffLight(greenPin1);
turnOnLight(yellowPin1);
Serial.println("แยกที่ 1 (ผังเมือง2): ไฟเหลือง");
delay(phases[0].yellowTime);
turnOffLight(yellowPin1);
turnOnLight(redPin1);
Serial.println("แยกที่ 1 (ผังเมือง2): ไฟแดง");
delay(phases[0].redTime);
break;
case 2: // ควบคุมสัญญาณไฟของแยกที่ 2 ใน Phase 2
turnOnLight(greenPin2);
Serial.println("แยกที่ 2 (ผังเมือง4-): ไฟเขียว");
delay(phases[1].greenTime);
turnOffLight(greenPin2);
turnOnLight(yellowPin2);
Serial.println("แยกที่ 2 (ผังเมือง4-): ไฟเหลือง");
delay(phases[1].yellowTime);
turnOffLight(yellowPin2);
turnOnLight(redPin2);
Serial.println("แยกที่ 2 (ผังเมือง4-): ไฟแดง");
delay(phases[1].redTime);
break;
case 3: // ควบคุมสัญญาณไฟของแยกที่ 3 ใน Phase 3
turnOnLight(greenPin3);
Serial.println("แยกที่ 3 (ผังเมือง 4+): ไฟเขียว");
delay(phases[2].greenTime);
turnOffLight(greenPin3);
turnOnLight(yellowPin3);
Serial.println("แยกที่ 3 (ผังเมือง 4+): ไฟเหลือง");
delay(phases[2].yellowTime);
turnOffLight(yellowPin3);
turnOnLight(redPin3);
Serial.println("แยกที่ 3 (ผังเมือง 4+): ไฟแดง");
delay(phases[2].redTime);
break;
case 4: // ควบคุมสัญญาณไฟของแยกที่ 4 ใน Phase 4
turnOnLight(greenPin4);
Serial.println("แยกที่ 4 (สุขยางค์1): ไฟเขียว");
delay(phases[3].greenTime);
turnOffLight(greenPin4);
turnOnLight(yellowPin4);
Serial.println("แยกที่ 4 (สุขยางค์1): ไฟเหลือง");
delay(phases[3].yellowTime);
turnOffLight(yellowPin4);
turnOnLight(redPin4);
Serial.println("แยกที่ (สุขยางค์1): ไฟแดง");
delay(phases[3].redTime);
break;
}
}
void setup() {
Serial.begin(9600); // เริ่มต้น Serial Communication สำหรับแสดงผล
// กำหนดให้ Pins เป็น Output
pinMode(greenPin1, OUTPUT); pinMode(yellowPin1, OUTPUT); pinMode(redPin1, OUTPUT);
pinMode(greenPin2, OUTPUT); pinMode(yellowPin2, OUTPUT); pinMode(redPin2, OUTPUT);
pinMode(greenPin3, OUTPUT); pinMode(yellowPin3, OUTPUT); pinMode(redPin3, OUTPUT);
pinMode(greenPin4, OUTPUT); pinMode(yellowPin4, OUTPUT); pinMode(redPin4, OUTPUT);
// ปิดไฟทั้งหมดเริ่มต้น
turnOffLight(greenPin1); turnOffLight(yellowPin1); turnOffLight(redPin1);
turnOffLight(greenPin2); turnOffLight(yellowPin2); turnOffLight(redPin2);
turnOffLight(greenPin3); turnOffLight(yellowPin3); turnOffLight(redPin3);
turnOffLight(greenPin4); turnOffLight(yellowPin4); turnOffLight(redPin4);
}
void loop() {
// วนลูปควบคุมแต่ละ Phase ตามลำดับ
controlPhase(1);
controlPhase(2);
controlPhase(3);
controlPhase(4);
}