// Пины для машин
#define LED_R_A 13
#define LED_Y_A 12
#define LED_G_A 11
#define LED_R_B 7
#define LED_Y_B 6
#define LED_G_B 5
// Пины для пешеходов
#define LED_R_P_A 9
#define LED_G_P_A 8
#define LED_R_P_B 4
#define LED_G_P_B 3
// Управление
#define POT A2
#define BUZZER 10
void setup() {
// Машины A
pinMode(LED_R_A, OUTPUT);
pinMode(LED_Y_A, OUTPUT);
pinMode(LED_G_A, OUTPUT);
// Машины B
pinMode(LED_R_B, OUTPUT);
pinMode(LED_Y_B, OUTPUT);
pinMode(LED_G_B, OUTPUT);
// Пешеходы A
pinMode(LED_R_P_A, OUTPUT);
pinMode(LED_G_P_A, OUTPUT);
// Пешеходы B
pinMode(LED_R_P_B, OUTPUT);
pinMode(LED_G_P_B, OUTPUT);
// Потенциометр и буззер
pinMode(POT, INPUT);
pinMode(BUZZER, OUTPUT);
// Начальное состояние: фаза A активна
setPhaseA();
}
void loop() {
// Чтение времени фазы с потенциометра (от 5 до 15 секунд)
int raw = analogRead(POT);
int phaseDuration = map(raw, 0, 1023, 5000, 15000);
// === ФАЗА A: Машины A едут, пешеходы B идут ===
setPhaseA();
delay(phaseDuration);
// Мигающий зелёный для A (предупреждение)
flashGreen(LED_G_A, 3);
// Жёлтый для A
digitalWrite(LED_G_A, LOW);
digitalWrite(LED_Y_A, HIGH);
delay(3000); // Жёлтый — 3 сек по ГОСТ
digitalWrite(LED_Y_A, LOW);
digitalWrite(LED_R_A, HIGH); // A — красный
// === ФАЗА B: Машины B едут, пешеходы A идут ===
setPhaseB();
delay(phaseDuration);
// Мигающий зелёный для B (предупреждение)
flashGreen(LED_G_B, 3);
// Жёлтый для B
digitalWrite(LED_G_B, LOW);
digitalWrite(LED_Y_B, HIGH);
delay(3000);
digitalWrite(LED_Y_B, LOW);
digitalWrite(LED_R_B, HIGH); // B — красный
// Цикл повторяется
}
// Установка фазы A: машины A — зелёный, машины B — красный
void setPhaseA() {
// Машины
digitalWrite(LED_G_A, HIGH);
digitalWrite(LED_Y_A, LOW);
digitalWrite(LED_R_A, LOW);
digitalWrite(LED_G_B, LOW);
digitalWrite(LED_Y_B, LOW);
digitalWrite(LED_R_B, HIGH);
// Пешеходы: A — стоп, B — идти
digitalWrite(LED_G_P_A, LOW);
digitalWrite(LED_R_P_A, HIGH);
digitalWrite(LED_G_P_B, HIGH);
digitalWrite(LED_R_P_B, LOW);
// Звук для пешеходов B
pedestrianBeep();
}
// Установка фазы B: машины B — зелёный, машины A — красный
void setPhaseB() {
// Машины
digitalWrite(LED_G_A, LOW);
digitalWrite(LED_Y_A, LOW);
digitalWrite(LED_R_A, HIGH);
digitalWrite(LED_G_B, HIGH);
digitalWrite(LED_Y_B, LOW);
digitalWrite(LED_R_B, LOW);
// Пешеходы: B — стоп, A — идти
digitalWrite(LED_G_P_A, HIGH);
digitalWrite(LED_R_P_A, LOW);
digitalWrite(LED_G_P_B, LOW);
digitalWrite(LED_R_P_B, HIGH);
// Звук для пешеходов A
pedestrianBeep();
}
// Мигание зелёного (предупреждение перед сменой фазы)
void flashGreen(int pin, int flashes) {
for (int i = 0; i < flashes; i++) {
digitalWrite(pin, HIGH);
delay(500);
digitalWrite(pin, LOW);
delay(500);
}
}
// Короткие звуковые сигналы для пешеходов при включении зелёного
void pedestrianBeep() {
for (int i = 0; i < 3; i++) {
digitalWrite(BUZZER, HIGH);
delay(150);
digitalWrite(BUZZER, LOW);
delay(150);
}
}