const int redPins[] = {2, 5, 8, 11}; // 북, 남, 동, 서 빨간불
const int yellowPins[] = {3, 6, 9, 12}; // 북, 남, 동, 서 노란불
const int greenPins[] = {4, 7, 10, 13}; // 북, 남, 동, 서 초록불
const int delayGreen = 5000; // 초록불 지속 시간 (5초)
const int delayYellow = 2000; // 노란불 지속 시간 (2초)
const int delayRed = 500; // 빨간불 대기 시간 (0.5초)
// 신호 변경 함수 (마주 보는 방향 동시 제어)
void changeLights(int dir1, int dir2) {
// 모든 신호등 초기화 (전부 빨간불)
for (int i = 0; i < 4; i++) {
digitalWrite(redPins[i], HIGH);
digitalWrite(yellowPins[i], LOW);
digitalWrite(greenPins[i], LOW);
}
// 선택된 두 방향에 초록불 점등
digitalWrite(redPins[dir1], LOW);
digitalWrite(greenPins[dir1], HIGH);
digitalWrite(redPins[dir2], LOW);
digitalWrite(greenPins[dir2], HIGH);
delay(delayGreen); // 초록불 유지
// 노란불 점등
digitalWrite(greenPins[dir1], LOW);
digitalWrite(yellowPins[dir1], HIGH);
digitalWrite(greenPins[dir2], LOW);
digitalWrite(yellowPins[dir2], HIGH);
delay(delayYellow); // 노란불 유지
// 다시 빨간불로 변경 후 다음 방향으로 이동
digitalWrite(yellowPins[dir1], LOW);
digitalWrite(redPins[dir1], HIGH);
digitalWrite(yellowPins[dir2], LOW);
digitalWrite(redPins[dir2], HIGH);
delay(delayRed); // 신호 변경 간 짧은 대기
}
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(redPins[i], OUTPUT);
pinMode(yellowPins[i], OUTPUT);
pinMode(greenPins[i], OUTPUT);
}
}
void loop() {
// 북(N)-남(S) 신호 → 동(E)-서(W) 신호 순서로 변경
changeLights(0, 2); // 북(N) & 남(S)
changeLights(1, 3); // 동(E) & 서(W)
}