// Timings (ms) — змінюй при потребі
const unsigned long NS_GREEN_MS = 35000; // 35s
const unsigned long NS_YELLOW_MS = 3000; // 3s
const unsigned long ALL_RED_MS = 2000; // 2s
const unsigned long EW_GREEN_MS = 25000; // 25s
const unsigned long EW_YELLOW_MS = 3000; // 3s
// Pin mapping (Nucleo C031C6 in Wokwi)
#define NS_GREEN PA0
#define NS_YELLOW PA1
#define NS_RED PA2
#define EW_GREEN PA3
#define EW_YELLOW PA4
#define EW_RED PA5
void setup() {
pinMode(NS_GREEN, OUTPUT);
pinMode(NS_YELLOW, OUTPUT);
pinMode(NS_RED, OUTPUT);
pinMode(EW_GREEN, OUTPUT);
pinMode(EW_YELLOW, OUTPUT);
pinMode(EW_RED, OUTPUT);
// Безпечний старт: всі червоні
setState(false, false, true, false, false, true);
}
void loop() {
// 1) NS green
setState(true, false, false, false, false, true); // NS:G, EW:R
delay(NS_GREEN_MS);
// 2) NS yellow
setState(false, true, false, false, false, true);
delay(NS_YELLOW_MS);
// 3) All red
setState(false, false, true, false, false, true);
delay(ALL_RED_MS);
// 4) EW green
setState(false, false, true, true, false, false); // EW:G, NS:R
delay(EW_GREEN_MS);
// 5) EW yellow
setState(false, false, true, false, true, false);
delay(EW_YELLOW_MS);
// 6) All red
setState(false, false, true, false, false, true);
delay(ALL_RED_MS);
// цикл повторюється
}
// Утиліта для безпечної установки виходів
void setState(bool ns_g, bool ns_y, bool ns_r, bool ew_g, bool ew_y, bool ew_r) {
// Перед вмикненням зеленого обов'язково вимикаємо протилежний зелений
if (ns_g) digitalWrite(EW_GREEN, LOW);
if (ew_g) digitalWrite(NS_GREEN, LOW);
digitalWrite(NS_GREEN, ns_g ? HIGH : LOW);
digitalWrite(NS_YELLOW, ns_y ? HIGH : LOW);
digitalWrite(NS_RED, ns_r ? HIGH : LOW);
digitalWrite(EW_GREEN, ew_g ? HIGH : LOW);
digitalWrite(EW_YELLOW, ew_y ? HIGH : LOW);
digitalWrite(EW_RED, ew_r ? HIGH : LOW);
}