const int redCarPin = 2; // Красный для автомобилей
const int yellowCarPin = 3; // Желтый для автомобилей
const int greenCarPin = 4; // Зеленый для автомобилей
const int yellowPedestrianPin = 5; // Желтый для пешеходов
const int redPedestrianPin = 6; // Красный для пешеходов
const int piezoPin = 11; // Пин для пьезоэлемента
// Пины для 7-сегментного дисплея
const int latchPin = 7; // Пин latch
const int dataPin = 8; // Пин данных
const int clockPin = 9; // Пин тактирования
// Время для светофора
const unsigned long carRedTime = 12000; // Красный для автомобилей
const unsigned long pedestrianGreenTime = 12000; // Зеленый для пешеходов
const unsigned long carYellowTime = 3000; // Желтый для автомобилей
const unsigned long pedestrianYellowTime = 3000; // Желтый для пешеходов
void setup() {
pinMode(redCarPin, OUTPUT);
pinMode(yellowCarPin, OUTPUT);
pinMode(greenCarPin, OUTPUT);
pinMode(yellowPedestrianPin, OUTPUT);
pinMode(redPedestrianPin, OUTPUT);
pinMode(piezoPin, OUTPUT);
// Настройка пинов для 7-сегментного дисплея
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
void loop() {
// Автомобильный светофор: красный
setTrafficLights(1); // Красный
delay(carRedTime);
// Автомобильный светофор: желтый
setTrafficLights(2); // Желтый
delay(carYellowTime);
// Автомобильный светофор: зеленый
setTrafficLights(3); // Зеленый
delay(pedestrianGreenTime);
// Пешеходный светофор: обратный отсчет с звуковой индикацией
for (int i = pedestrianGreenTime / 1000; i > 0; i--) {
displayNumber(i); // Отображаем оставшееся время на индикаторе
tone(piezoPin, 1000 + (i * 50)); // Звук увеличивается по мере уменьшения времени
delay(1000);
}
// Пешеходный светофор: желтый
setTrafficLights(4); // Желтый для пешеходов
delay(pedestrianYellowTime);
// Пешеходный светофор: красный
setTrafficLights(5); // Красный для пешеходов
}
void displayNumber(int num) {
byte segment[10] = {
B00111111, // 0
B00000110, // 1
B01011011, // 2
B01001111, // 3
B01100110, // 4
B01101101, // 5
B01111101, // 6
B00000111, // 7
B01111111, // 8
B01101111 // 9
};
if (num >= 0 && num < 10) {
digitalWrite(latchPin, LOW); // Установите пин latch в низкое состояние
shiftOut(dataPin, clockPin, MSBFIRST, segment[num]); // Отправляем данные
digitalWrite(latchPin, HIGH); // Установите пин latch в высокое состояние
}
}
void setTrafficLights(int state) {
switch (state) {
case 1: // Красный для автомобилей
digitalWrite(redCarPin, HIGH);
digitalWrite(yellowCarPin, LOW);
digitalWrite(greenCarPin, LOW);
digitalWrite(yellowPedestrianPin, LOW);
digitalWrite(redPedestrianPin, HIGH);
break;
case 2: // Желтый для автомобилей
digitalWrite(redCarPin, LOW);
digitalWrite(yellowCarPin, HIGH);
digitalWrite(greenCarPin, LOW);
digitalWrite(yellowPedestrianPin, LOW);
digitalWrite(redPedestrianPin, HIGH);
break;
case 3: // Зеленый для автомобилей
digitalWrite(redCarPin, LOW);
digitalWrite(yellowCarPin, LOW);
digitalWrite(greenCarPin, HIGH);
digitalWrite(yellowPedestrianPin, LOW);
digitalWrite(redPedestrianPin, HIGH);
break;
case 4: // Желтый для пешеходов
digitalWrite(redCarPin, LOW);
digitalWrite(yellowCarPin, LOW);
digitalWrite(greenCarPin, LOW);
digitalWrite(yellowPedestrianPin, HIGH);
digitalWrite(redPedestrianPin, HIGH);
break;
case 5: // Красный для пешеходов
digitalWrite(redCarPin, LOW);
digitalWrite(yellowCarPin, LOW);
digitalWrite(greenCarPin, LOW);
digitalWrite(yellowPedestrianPin, LOW);
digitalWrite(redPedestrianPin, HIGH);
break;
default:
digitalWrite(redCarPin, LOW);
digitalWrite(yellowCarPin, LOW);
digitalWrite(greenCarPin, LOW);
digitalWrite(yellowPedestrianPin, LOW);
digitalWrite(redPedestrianPin, LOW);
break;
}
}