// Перекрёсток: Светофор A и Светофор B
// A: D9 - красный, D4 - жёлтый, D2 - зелёный
// B: D5 - красный, D6 - жёлтый, D3 - зелёный
const int A_RED = D9;
const int A_YELLOW = D4;
const int A_GREEN = D2;
const int B_RED = D5;
const int B_YELLOW = D6;
const int B_GREEN = D3;
const int GREEN_TIME = 4000;
const int BLINK_DELAY = 300;
const int GREEN_BLINKS = 4;
const int YELLOW_TIME = 2000;
const int RED_YELLOW = 1500;
// ------------------ Вспомогательные функции ------------------
void blinkGreen(int pin) {
for (int i = 0; i < GREEN_BLINKS; i++) {
digitalWrite(pin, LOW);
delay(BLINK_DELAY);
digitalWrite(pin, HIGH);
delay(BLINK_DELAY);
}
}
void phaseA() {
delay(GREEN_TIME);
blinkGreen(A_GREEN);
digitalWrite(A_GREEN, LOW);
digitalWrite(A_YELLOW, HIGH);
delay(YELLOW_TIME);
digitalWrite(A_YELLOW, LOW);
digitalWrite(A_RED, HIGH);
digitalWrite(B_YELLOW, HIGH);
delay(RED_YELLOW);
digitalWrite(B_RED, LOW);
digitalWrite(B_YELLOW, LOW);
digitalWrite(B_GREEN, HIGH);
}
void phaseB() {
delay(GREEN_TIME);
blinkGreen(B_GREEN);
digitalWrite(B_GREEN, LOW);
digitalWrite(B_YELLOW, HIGH);
delay(YELLOW_TIME);
digitalWrite(B_YELLOW, LOW);
digitalWrite(B_RED, HIGH);
digitalWrite(A_YELLOW, HIGH);
delay(RED_YELLOW);
digitalWrite(A_YELLOW, LOW);
digitalWrite(A_RED, LOW);
digitalWrite(A_GREEN, HIGH);
}
void setup() {
pinMode(A_RED, OUTPUT);
pinMode(A_YELLOW, OUTPUT);
pinMode(A_GREEN, OUTPUT);
pinMode(B_RED, OUTPUT);
pinMode(B_YELLOW, OUTPUT);
pinMode(B_GREEN, OUTPUT);
digitalWrite(A_GREEN, HIGH);
digitalWrite(B_RED, HIGH);
}
void loop() {
phaseA();
phaseB();
}