Advertisement
Guest User

Svetofor s knopkoy

a guest
Feb 7th, 2015
536
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.99 KB | None | 0 0
  1. // подключаем библиотеки для работы с LCD
  2. #include <Wire.h>
  3. #include <LiquidCrystal_I2C.h>
  4.  
  5. // подключаем файл с нотами
  6. #include "pitches.h"
  7.  
  8. int RcarPin = 10; // пин подключения красного света для машин
  9. int YcarPin = 9; // пин подключения жёлтого света для машин
  10. int GcarPin = 8; // пин подключения зелёного света для машин
  11.  
  12. int RpeoplePin = 7; // пин подключения красного света для пешеходов
  13. int GpeoplePin = 6; // пин подключения зелёного света для пешеходов
  14.  
  15. int speakerPin = 11; // пин подключения динамика
  16. int buttonPin = 2; // пин подключения кнопки
  17.  
  18. int buttonState = 0; // переменная для хранения состояния кнопки
  19.  
  20. LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
  21. /*
  22. * Экран подключается так:
  23. * SCL - пин А5;
  24. * SDA - пин А4;
  25. * GND - ground;
  26. * VCC - +5 V;
  27. */
  28.  
  29. void setup() {
  30.   lcd.init(); // инициализируем экран
  31.   lcd.backlight(); // включаем подсветку экрана
  32.  
  33.   pinMode(buttonPin, INPUT); // устанавливаем buttonPin в режим ввода
  34.   for (int p = 6; p <=11; p++) {
  35.     pinMode(p, OUTPUT); // устанавливаем пины с 6 по 11 (LED + динамик) в режим вывода
  36.   }
  37.  
  38.   digitalWrite(GcarPin, HIGH); // изначально горит зелёный машинам
  39.   digitalWrite(RcarPin, LOW);
  40.   digitalWrite(YcarPin, LOW);
  41.  
  42.   digitalWrite(RpeoplePin, HIGH); // изначально горит красный пешеходам
  43.   digitalWrite(GpeoplePin, LOW);
  44.  
  45.   attachInterrupt(INT0, ChangeRejim, CHANGE);
  46.   }
  47.  
  48.   void ChangeRejim() { // функция смены режима по кнопке
  49.   if(digitalRead(buttonPin) == LOW && buttonState == 0)      
  50.     {
  51.       buttonState = 1;
  52.     }
  53.   }
  54.  
  55.   void LCDStop() { // функция вывода STOP! на экран
  56.     lcd.setCursor(0,0);
  57.     lcd.print("STOP!");
  58.     lcd.setCursor(0,1);
  59.     lcd.print("  ");
  60.   }
  61.  
  62. void loop() {
  63.   LCDStop(); // выводим STOP! на экран
  64.   if (buttonState == 1) { // если нажата кнопка
  65.     delay(3000); // ждём 3 секунды
  66.     for (int i=0; i<3; i++) { // три раза моргаем зелёным для машин
  67.       digitalWrite(GcarPin, LOW);
  68.         delay(500); // ждём 500 мс
  69.       digitalWrite(GcarPin, HIGH);
  70.         delay(500); // ждём 500 мс
  71.     }
  72.     digitalWrite(GcarPin, LOW); // гасим зелёный для машин
  73.       delay(50); // ждём 50 мс
  74.     digitalWrite(YcarPin, HIGH); // зажигаем жёлтый для машин
  75.       delay(3000); // ждём 3 секунды
  76.     digitalWrite(YcarPin, LOW); // гасим жёлтый для машин
  77.       delay(50); // ждём 50 мс
  78.     digitalWrite(RcarPin, HIGH); // зажигаем красный для машин
  79.     digitalWrite(RpeoplePin, LOW); // гасим красный для пешеходов
  80.     digitalWrite(GpeoplePin, HIGH); // зажигаем зелёный для пешеходов
  81.     lcd.setCursor(0,0);
  82.     lcd.print("GO!  ");
  83.       for (int t = 0; t < 21; t++) { // запускаем обратный отсчёт
  84.         lcd.setCursor(0,1); // выводим на экран обратный отсчёт
  85.         lcd.print("  ");
  86.         lcd.setCursor(0,1);
  87.         lcd.print(20-t);
  88.         tone(speakerPin, NOTE_G4, (500-15*t)); // включаем звуковое оповещение пешеходам
  89.           if (t > 17) { // на последних 3-х секундах мигаем зелёным пешеходам
  90.             digitalWrite(GpeoplePin, LOW); // гасим зелёный для пешеходов
  91.               delay(150); // ждём 150 мс
  92.             digitalWrite(GpeoplePin, HIGH); // зажигаем красный для пешеходов
  93.           }
  94.         delay(1000); // ждём 1 секунду
  95.       }
  96.     digitalWrite(GpeoplePin, LOW); // гасим зелёный для пешеходов
  97.     LCDStop(); // выводим STOP! на экран
  98.     digitalWrite(RpeoplePin, HIGH); // зажигаем красный для пешеходов
  99.       delay(2000); // ждём 2 секунды
  100.     digitalWrite(YcarPin, HIGH); // зажигаем жёлтый + красный (уже горит) для машин
  101.       delay(2000); // ждём 2 секунды
  102.     digitalWrite(RcarPin, LOW); // гасим красный для машин
  103.     digitalWrite(YcarPin, LOW); // гасим жёлтый для машин
  104.     digitalWrite(GcarPin, HIGH); // зажигаем зелёный для машин
  105.     buttonState = 0; // меняем состояние кнопки на "не нажата"
  106.   }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement