const int dataPin = 8; // DS
const int latchPin = 10; // ST_CP
const int clockPin = 9; // SH_CP
// Пины для светодиодов
const int redLight1 = 6;
const int redLight2 = 3;
const int yellowLight = 5;
const int greenLight1 = 4;
const int greenLight2 = 2;
const int piezoPin = 11;
// Время для светофора
const unsigned long carRedTime = 12000; // Красный для автомобилей
const unsigned long pedestrianGreenTime = 12000; // Зеленый для пешеходов
const unsigned long carYellowTime = 3000; // Желтый для автомобилей
const unsigned long pedestrianYellowTime = 3000; // Желтый для пешеходов
void setup() {
pinMode(redLight1, OUTPUT);
pinMode(redLight2, OUTPUT);
pinMode(yellowLight, OUTPUT);
pinMode(greenLight1, OUTPUT);
pinMode(greenLight2, OUTPUT);
pinMode(piezoPin, OUTPUT);
// Установите пин latch в выходной режим
pinMode(latchPin, OUTPUT);
}
void loop() {
// Автомобильный светофор: красный
digitalWrite(redLight1, HIGH);
digitalWrite(redLight2, HIGH);
digitalWrite(yellowLight, LOW);
digitalWrite(greenLight1, LOW);
digitalWrite(greenLight2, LOW);
delay(carRedTime);
// Автомобильный светофор: желтый
digitalWrite(redLight1, HIGH);
digitalWrite(redLight2, HIGH);
digitalWrite(yellowLight, HIGH);
delay(carYellowTime);
// Автомобильный светофор: зеленый
digitalWrite(redLight1, LOW);
digitalWrite(redLight2, LOW);
digitalWrite(yellowLight, LOW);
digitalWrite(greenLight1, HIGH);
digitalWrite(greenLight2, HIGH);
delay(pedestrianGreenTime);
// Пешеходный светофор: зеленый с обратным отсчетом
for (int i = pedestrianGreenTime / 1000; i > 0; i--) {
displayNumber(i); // Отображаем оставшееся время на индикаторе
tone(piezoPin, 1000 + (i * 50)); // Звук увеличивается по мере уменьшения времени
delay(1000);
}
// Пешеходный светофор: желтый
digitalWrite(greenLight1, LOW);
digitalWrite(greenLight2, LOW);
digitalWrite(yellowLight, HIGH);
delay(pedestrianYellowTime);
// Пешеходный светофор: красный
digitalWrite(redLight1, HIGH);
digitalWrite(redLight2, HIGH);
digitalWrite(yellowLight, LOW);
}
void displayNumber(int num) {
byte segment[10][7] = {
{1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 0, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 0, 0, 1, 1, 1}, // 3
{0, 1, 1, 0, 0, 1, 0}, // 4
{1, 0, 1, 0, 1, 1, 1}, // 5
{1, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 0, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 0, 0, 1, 0} // 9
};
if (num >= 0 && num <10) {
digitalWrite(latchPin, LOW); // Установите пин latch в низкое состояние
for (int i = 0; i < 7; i++) {
shiftOut(dataPin, clockPin, MSBFIRST, segment[num][i]); // Отправляем данные
}
digitalWrite(latchPin, HIGH); // Установите пин latch в высокое состояние
}
}