Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // подключаем библиотеки для работы с LCD
- #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- // подключаем файл с нотами
- #include "pitches.h"
- int RcarPin = 10; // пин подключения красного света для машин
- int YcarPin = 9; // пин подключения жёлтого света для машин
- int GcarPin = 8; // пин подключения зелёного света для машин
- int RpeoplePin = 7; // пин подключения красного света для пешеходов
- int GpeoplePin = 6; // пин подключения зелёного света для пешеходов
- int speakerPin = 11; // пин подключения динамика
- int buttonPin = 2; // пин подключения кнопки
- int buttonState = 0; // переменная для хранения состояния кнопки
- LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
- /*
- * Экран подключается так:
- * SCL - пин А5;
- * SDA - пин А4;
- * GND - ground;
- * VCC - +5 V;
- */
- void setup() {
- lcd.init(); // инициализируем экран
- lcd.backlight(); // включаем подсветку экрана
- pinMode(buttonPin, INPUT); // устанавливаем buttonPin в режим ввода
- for (int p = 6; p <=11; p++) {
- pinMode(p, OUTPUT); // устанавливаем пины с 6 по 11 (LED + динамик) в режим вывода
- }
- digitalWrite(GcarPin, HIGH); // изначально горит зелёный машинам
- digitalWrite(RcarPin, LOW);
- digitalWrite(YcarPin, LOW);
- digitalWrite(RpeoplePin, HIGH); // изначально горит красный пешеходам
- digitalWrite(GpeoplePin, LOW);
- attachInterrupt(INT0, ChangeRejim, CHANGE);
- }
- void ChangeRejim() { // функция смены режима по кнопке
- if(digitalRead(buttonPin) == LOW && buttonState == 0)
- {
- buttonState = 1;
- }
- }
- void LCDStop() { // функция вывода STOP! на экран
- lcd.setCursor(0,0);
- lcd.print("STOP!");
- lcd.setCursor(0,1);
- lcd.print(" ");
- }
- void loop() {
- LCDStop(); // выводим STOP! на экран
- if (buttonState == 1) { // если нажата кнопка
- delay(3000); // ждём 3 секунды
- for (int i=0; i<3; i++) { // три раза моргаем зелёным для машин
- digitalWrite(GcarPin, LOW);
- delay(500); // ждём 500 мс
- digitalWrite(GcarPin, HIGH);
- delay(500); // ждём 500 мс
- }
- digitalWrite(GcarPin, LOW); // гасим зелёный для машин
- delay(50); // ждём 50 мс
- digitalWrite(YcarPin, HIGH); // зажигаем жёлтый для машин
- delay(3000); // ждём 3 секунды
- digitalWrite(YcarPin, LOW); // гасим жёлтый для машин
- delay(50); // ждём 50 мс
- digitalWrite(RcarPin, HIGH); // зажигаем красный для машин
- digitalWrite(RpeoplePin, LOW); // гасим красный для пешеходов
- digitalWrite(GpeoplePin, HIGH); // зажигаем зелёный для пешеходов
- lcd.setCursor(0,0);
- lcd.print("GO! ");
- for (int t = 0; t < 21; t++) { // запускаем обратный отсчёт
- lcd.setCursor(0,1); // выводим на экран обратный отсчёт
- lcd.print(" ");
- lcd.setCursor(0,1);
- lcd.print(20-t);
- tone(speakerPin, NOTE_G4, (500-15*t)); // включаем звуковое оповещение пешеходам
- if (t > 17) { // на последних 3-х секундах мигаем зелёным пешеходам
- digitalWrite(GpeoplePin, LOW); // гасим зелёный для пешеходов
- delay(150); // ждём 150 мс
- digitalWrite(GpeoplePin, HIGH); // зажигаем красный для пешеходов
- }
- delay(1000); // ждём 1 секунду
- }
- digitalWrite(GpeoplePin, LOW); // гасим зелёный для пешеходов
- LCDStop(); // выводим STOP! на экран
- digitalWrite(RpeoplePin, HIGH); // зажигаем красный для пешеходов
- delay(2000); // ждём 2 секунды
- digitalWrite(YcarPin, HIGH); // зажигаем жёлтый + красный (уже горит) для машин
- delay(2000); // ждём 2 секунды
- digitalWrite(RcarPin, LOW); // гасим красный для машин
- digitalWrite(YcarPin, LOW); // гасим жёлтый для машин
- digitalWrite(GcarPin, HIGH); // зажигаем зелёный для машин
- buttonState = 0; // меняем состояние кнопки на "не нажата"
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement