const int redPin = 9; // Пин для красного светодиода
const int yellowPin = 10; // Пин для желтого светодиода
const int greenPin = 11; // Пин для зеленого светодиода
const int buttonPin = 6; // Пин для кнопки пешехода
boolean pedestrianRequest = false;
unsigned long greenStartTime;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // Используем подтяжку к +5V
// Начальное состояние - зеленый свет
digitalWrite(greenPin, HIGH);
greenStartTime = millis();
}
void loop() {
unsigned long currentTime = millis();
// Проверка состояния кнопки
if (digitalRead(buttonPin) == LOW) {
pedestrianRequest = true; // Кнопка нажата
}
// Если прошло зеленое время или кнопка нажата и мин. время зел. света прошло
if ((currentTime - greenStartTime >= 30000) ||
(pedestrianRequest && currentTime - greenStartTime >= 15000)) {
processTrafficLightCycle();
}
}
void processTrafficLightCycle() {
// Зеленый мигает
for (int i = 0; i < 6; i++) {
digitalWrite(greenPin, LOW);
delay(250);
digitalWrite(greenPin, HIGH);
delay(250);
}
digitalWrite(greenPin, LOW);
// Желтый свет
digitalWrite(yellowPin, HIGH);
delay(3000); // 3 секунды
digitalWrite(yellowPin, LOW);
// Красный свет
digitalWrite(redPin, HIGH);
delay(10000); // 10 секунд
digitalWrite(redPin, LOW);
// Вернули зеленый свет
digitalWrite(greenPin, HIGH);
greenStartTime = millis(); // Обновляем время старта зеленого света
pedestrianRequest = false; // Сброс запроса пешехода
}