Advertisement
Al_Ninyo

Svetofor_full

May 14th, 2015
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.17 KB | None | 0 0
  1. // подключаем файл с нотами
  2. #include "pitches.h"
  3.  
  4. int RcarPin1 = 13; // пин подключения красного света для машин
  5. int RcarPin2 = 7; // пин подключения красного света для машин
  6. int YcarPin1 = 12; // пин подключения жёлтого света для машин
  7. int YcarPin2 = 6; // пин подключения жёлтого света для машин
  8. int GcarPin1 = 11; // пин подключения зелёного света для машин
  9. int GcarPin2 = 5; // пин подключения зелёного света для машин
  10.  
  11. int RpeoplePin1 = 10; // пин подключения красного света для пешеходов
  12. int RpeoplePin2 = 4; // пин подключения красного света для пешеходов
  13. int GpeoplePin1 = 9; // пин подключения зелёного света для пешеходов
  14. int GpeoplePin2 = 3; // пин подключения зелёного света для пешеходов
  15.  
  16. int speakerPin = 8; // пин подключения динамика
  17. int buttonPin = 2; // пин подключения кнопки
  18.  
  19. int buttonState = 0; // переменная для хранения состояния кнопки
  20.  
  21. void setup() {
  22.   pinMode(buttonPin, INPUT); // устанавливаем buttonPin в режим ввода
  23.   for (int p = 3; p <=13; p++) {
  24.     pinMode(p, OUTPUT); // устанавливаем пины с 6 по 11 (LED + динамик) в режим вывода
  25.   }
  26.  
  27.   digitalWrite(GcarPin1, HIGH); // изначально горит зелёный машинам
  28.   digitalWrite(GcarPin2, HIGH); // изначально горит зелёный машинам
  29.   digitalWrite(RcarPin1, LOW);
  30.   digitalWrite(RcarPin2, LOW);
  31.   digitalWrite(YcarPin1, LOW);
  32.   digitalWrite(YcarPin2, LOW);
  33.  
  34.   digitalWrite(RpeoplePin1, HIGH); // изначально горит красный пешеходам
  35.   digitalWrite(RpeoplePin2, HIGH); // изначально горит красный пешеходам
  36.   digitalWrite(GpeoplePin1, LOW);
  37.   digitalWrite(GpeoplePin2, LOW);
  38.  
  39.   attachInterrupt(INT0, ChangeRejim, CHANGE);
  40.   }
  41.  
  42. void ChangeRejim() { // функция смены режима по кнопке
  43.   if(digitalRead(buttonPin) == LOW && buttonState == 0)      
  44.     {
  45.       buttonState = 1;
  46.     }
  47.   }
  48.  
  49. void loop() {
  50.   if (buttonState == 1) { // если нажата кнопка
  51.     delay(3000); // ждём 3 секунды
  52.     for (int i=0; i<3; i++) { // три раза моргаем зелёным для машин
  53.       digitalWrite(GcarPin1, LOW);
  54.       digitalWrite(GcarPin2, LOW);
  55.         delay(500); // ждём 500 мс
  56.       digitalWrite(GcarPin1, HIGH);
  57.       digitalWrite(GcarPin2, HIGH);
  58.         delay(500); // ждём 500 мс
  59.     }
  60.     digitalWrite(GcarPin1, LOW); // гасим зелёный для машин
  61.     digitalWrite(GcarPin2, LOW); // гасим зелёный для машин
  62.       delay(50); // ждём 50 мс
  63.     digitalWrite(YcarPin1, HIGH); // зажигаем жёлтый для машин
  64.     digitalWrite(YcarPin2, HIGH); // зажигаем жёлтый для машин
  65.       delay(3000); // ждём 3 секунды
  66.     digitalWrite(YcarPin1, LOW); // гасим жёлтый для машин
  67.     digitalWrite(YcarPin2, LOW); // гасим жёлтый для машин
  68.       delay(50); // ждём 50 мс
  69.     digitalWrite(RcarPin1, HIGH); // зажигаем красный для машин
  70.     digitalWrite(RcarPin2, HIGH); // зажигаем красный для машин
  71.     digitalWrite(RpeoplePin1, LOW); // гасим красный для пешеходов
  72.     digitalWrite(RpeoplePin2, LOW); // гасим красный для пешеходов
  73.     digitalWrite(GpeoplePin1, HIGH); // зажигаем зелёный для пешеходов
  74.     digitalWrite(GpeoplePin2, HIGH); // зажигаем зелёный для пешеходов
  75.       for (int t = 0; t < 21; t++) { // запускаем обратный отсчёт
  76.         tone(speakerPin, NOTE_G4, (500-15*t)); // включаем звуковое оповещение пешеходам
  77.           if (t > 17) { // на последних 3-х секундах мигаем зелёным пешеходам
  78.             digitalWrite(GpeoplePin1, LOW); // гасим зелёный для пешеходов
  79.             digitalWrite(GpeoplePin2, LOW); // гасим зелёный для пешеходов
  80.               delay(150); // ждём 150 мс
  81.             digitalWrite(GpeoplePin1, HIGH); // зажигаем красный для пешеходов
  82.             digitalWrite(GpeoplePin2, HIGH); // зажигаем красный для пешеходов
  83.           }
  84.         delay(1000); // ждём 1 секунду
  85.       }
  86.     digitalWrite(GpeoplePin1, LOW); // гасим зелёный для пешеходов
  87.     digitalWrite(GpeoplePin2, LOW); // гасим зелёный для пешеходов
  88.     digitalWrite(RpeoplePin1, HIGH); // зажигаем красный для пешеходов
  89.     digitalWrite(RpeoplePin2, HIGH); // зажигаем красный для пешеходов
  90.       delay(2000); // ждём 2 секунды
  91.     digitalWrite(YcarPin1, HIGH); // зажигаем жёлтый + красный (уже горит) для машин
  92.     digitalWrite(YcarPin2, HIGH); // зажигаем жёлтый + красный (уже горит) для машин
  93.       delay(2000); // ждём 2 секунды
  94.     digitalWrite(RcarPin1, LOW); // гасим красный для машин
  95.     digitalWrite(RcarPin2, LOW); // гасим красный для машин
  96.     digitalWrite(YcarPin1, LOW); // гасим жёлтый для машин
  97.     digitalWrite(YcarPin2, LOW); // гасим жёлтый для машин
  98.     digitalWrite(GcarPin1, HIGH); // зажигаем зелёный для машин
  99.     digitalWrite(GcarPin2, HIGH); // зажигаем зелёный для машин
  100.     buttonState = 0; // меняем состояние кнопки на "не нажата"
  101.   }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement