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 activeDirection) {
// 모든 신호등 초기화 (전부 빨간불)
for (int i = 0; i < 4; i++) {
digitalWrite(redPins[i], HIGH);
digitalWrite(yellowPins[i], LOW);
digitalWrite(greenPins[i], LOW);
}
// 선택된 방향에 초록불 점등
digitalWrite(redPins[activeDirection], LOW);
digitalWrite(greenPins[activeDirection], HIGH);
delay(delayGreen); // 초록불 유지
// 노란불 점등
digitalWrite(greenPins[activeDirection], LOW);
digitalWrite(yellowPins[activeDirection], HIGH);
delay(delayYellow); // 노란불 유지
// 다시 빨간불로 변경 후 다음 방향으로 이동
digitalWrite(yellowPins[activeDirection], LOW);
digitalWrite(redPins[activeDirection], 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() {
for (int i = 0; i < 4; i++) {
changeLights(i); // 각 방향별 신호 전환
}
}