// sketch.ino — L-ОБРАЗНЫЙ СВЕТОФОР (ФИНАЛЬНЫЙ, БЕЗ МИГАНИЙ НА ОБЕИХ ФАЗАХ!)
#define MAIN_RED PA7
#define MAIN_YELLOW PA6
#define MAIN_GREEN PA5
#define TURN_RED PA0
#define TURN_YELLOW PA1
#define TURN_GREEN PA4
// Пешеходы
#define PED_MAIN_RED1 PB10
#define PED_MAIN_GREEN1 PB9
#define PED_MAIN_RED2 PB8
#define PED_MAIN_GREEN2 PB7
#define PED_TURN_RED1 PB5
#define PED_TURN_GREEN1 PB1
#define PED_TURN_RED2 PB6
#define PED_TURN_GREEN2 PB2
// === ТАЙМИНГИ ===
const unsigned long MAIN_GREEN_MS = 6000;
const unsigned long YELLOW_BOTH_MS = 3000;
const unsigned long TURN_GREEN_MS = 5000;
const unsigned long ALL_RED_MS = 500;
// === УПРАВЛЕНИЕ ===
void setMain(bool r, bool y, bool g) {
digitalWrite(MAIN_RED, r);
digitalWrite(MAIN_YELLOW, y);
digitalWrite(MAIN_GREEN, g);
}
void setTurn(bool r, bool y, bool g) {
digitalWrite(TURN_RED, r);
digitalWrite(TURN_YELLOW, y);
digitalWrite(TURN_GREEN, g);
}
void setPedPair(int redPin, int greenPin, bool greenOn) {
digitalWrite(greenPin, greenOn);
digitalWrite(redPin, !greenOn);
}
void allOff() {
setMain(false, false, false);
setTurn(false, false, false);
}
void allYellow() {
allOff(); // ВАЖНО!
setMain(false, true, false);
setTurn(false, true, false);
}
void allVehicleRed() {
allOff(); // ← ВАЖНО! Было без этого!
setMain(true, false, false); // КРАСНЫЙ
setTurn(true, false, false); // КРАСНЫЙ
}
void allPedRed() {
setPedPair(PED_MAIN_RED1, PED_MAIN_GREEN1, false);
setPedPair(PED_MAIN_RED2, PED_MAIN_GREEN2, false);
setPedPair(PED_TURN_RED1, PED_TURN_GREEN1, false);
setPedPair(PED_TURN_RED2, PED_TURN_GREEN2, false);
}
void setup() {
Serial.begin(115200);
pinMode(MAIN_RED, OUTPUT); pinMode(MAIN_YELLOW, OUTPUT); pinMode(MAIN_GREEN, OUTPUT);
pinMode(TURN_RED, OUTPUT); pinMode(TURN_YELLOW, OUTPUT); pinMode(TURN_GREEN, OUTPUT);
pinMode(PED_MAIN_RED1, OUTPUT); pinMode(PED_MAIN_GREEN1, OUTPUT);
pinMode(PED_MAIN_RED2, OUTPUT); pinMode(PED_MAIN_GREEN2, OUTPUT);
pinMode(PED_TURN_RED1, OUTPUT); pinMode(PED_TURN_GREEN1, OUTPUT);
pinMode(PED_TURN_RED2, OUTPUT); pinMode(PED_TURN_GREEN2, OUTPUT);
allVehicleRed();
allPedRed();
delay(200);
Serial.println("Светофор запущен!");
}
void loop() {
// === ФАЗА 1: MAIN ЗЕЛЁНЫЙ ===
Serial.println("=== MAIN ЗЕЛЁНЫЙ ===");
allOff(); // ← ВАЖНО!
setMain(true, false, false); // ЗЕЛЁНЫЙ
setTurn(true, false, false); // КРАСНЫЙ
setPedPair(PED_TURN_RED1, PED_TURN_GREEN1, true);
setPedPair(PED_TURN_RED2, PED_TURN_GREEN2, true);
delay(MAIN_GREEN_MS);
// === ЖЁЛТЫЙ НА ОБА ===
Serial.println("ЖЁЛТЫЙ НА ОБА");
allYellow();
setPedPair(PED_TURN_RED1, PED_TURN_GREEN1, true);
setPedPair(PED_TURN_RED2, PED_TURN_GREEN2, true);
delay(YELLOW_BOTH_MS);
// === ПАУЗА (все красные) ===
allVehicleRed(); // ← allOff() внутри!
allPedRed();
delay(ALL_RED_MS);
// === ФАЗА 2: TURN ЗЕЛЁНЫЙ ===
Serial.println("=== TURN ЗЕЛЁНЫЙ ===");
allOff(); // ← ВАЖНО!
setMain(false, false, true); // КРАСНЫЙ
setTurn(false, false, true); // ЗЕЛЁНЫЙ
setPedPair(PED_MAIN_RED1, PED_MAIN_GREEN1, true);
setPedPair(PED_MAIN_RED2, PED_MAIN_GREEN2, true);
delay(TURN_GREEN_MS);
// === ЖЁЛТЫЙ НА ОБА ===
Serial.println("ЖЁЛТЫЙ НА ОБА");
allYellow();
setPedPair(PED_MAIN_RED1, PED_MAIN_GREEN1, true);
setPedPair(PED_MAIN_RED2, PED_MAIN_GREEN2, true);
delay(YELLOW_BOTH_MS);
// === ПАУЗА ===
allVehicleRed(); // ← allOff() внутри!
allPedRed();
delay(ALL_RED_MS);
}