Advertisement
Al_Ninyo

key_code_ver2_4

Aug 30th, 2016
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.53 KB | None | 0 0
  1. /************************
  2.  * Author:
  3.  * Kolpakov Vladimir aka Al'Ninyo
  4.  * http://alninyo.ru
  5.  * 25.08.2016
  6.  ************************/
  7.  
  8. #define greenLed 19 // пин подключения зелёного светодиода A5
  9. #define redLed 18 // пин подключения красного светодиода A4
  10. #define push HIGH // на какое состояние кнопки реагировать HIGH или LOW
  11. #define relay1 A0 // пин подключения реле 1
  12. #define relay2 A1 // пин подключения реле 2 (не используется в этой версии)
  13. #define buzzerPin A3 // пин подключения пищалки
  14. #define checkButton A2 // пин подключения кнопки проверки кода
  15.  
  16. int buttonPins[] = {2,3,4,5,6,7}; // пины подключения кнопок
  17. boolean buttonState[] = {0,0,0,0,0,0}; // состояние кнопок. 0 = не нажата, 1 = нажата
  18. int rightCode[] = {1,1,1,0,1,0}; // правильное состояние тумблеров
  19. int ledPins[] = {8,9,10,11,12,13}; // пины подключения светодиодов над тумблерами
  20. int S; // служебная переменная
  21.  
  22. int melody[] = {
  23.   262, 196, 196, 220, 196, 0, 247, 262
  24. };
  25. int noteDurations[] = {
  26.   4, 8, 8, 4, 4, 4, 4, 4
  27. };
  28.  
  29. void winMusic() {
  30.   for (int thisNote = 0; thisNote < 8; thisNote++) {
  31.     int noteDuration = 1000 / noteDurations[thisNote];
  32.     tone(buzzerPin, melody[thisNote], noteDuration);
  33.     int pauseBetweenNotes = noteDuration * 1.30;
  34.     delay(pauseBetweenNotes);
  35.     noTone(buzzerPin);
  36.   }
  37. }
  38.  
  39. void setup() {
  40.   for (int i = 0; i < 6; i++) {
  41.     pinMode(buttonPins[i], INPUT);
  42.     pinMode(ledPins[i], OUTPUT);
  43.     digitalWrite(ledPins[i], LOW);
  44.   }
  45.   pinMode(checkButton, INPUT);
  46.   pinMode(relay1, OUTPUT);
  47.   pinMode(relay2, OUTPUT);
  48.   pinMode(buzzerPin, OUTPUT);
  49.   pinMode(greenLed, OUTPUT);
  50.   pinMode(redLed, OUTPUT);
  51.   digitalWrite(greenLed, LOW);
  52.   digitalWrite(redLed, HIGH);
  53.   digitalWrite(relay1, LOW);
  54. }
  55.  
  56. void loop() {
  57.   for (int i = 0; i < 6; i++) {
  58.     digitalWrite(ledPins[i], digitalRead(buttonPins[i]));
  59.   }
  60.   if (digitalRead(checkButton) == HIGH) {
  61.     delay(20);
  62.     for (int i = 0; i < 6; i++) {
  63.       if (digitalRead(buttonPins[i]) == push) {
  64.         buttonState[i] = 1;
  65.         delay(10);
  66.       }
  67.     }
  68.    for (int i = 0; i < 6; i++) {
  69.     if (buttonState[i] == rightCode[i]) {
  70.       S = S+1;
  71.     }
  72.     else {
  73.       S = S-1;
  74.     }
  75.   }
  76.   if (S == 6) {
  77.     for (int i = 0; i < 6; i++) {
  78.       buttonState[i] = 0;
  79.     }
  80.     S = 0;
  81.     digitalWrite(greenLed, HIGH);
  82.     digitalWrite(redLed, LOW);
  83.     winMusic();
  84.     delay(500); //горит зелёный
  85.     digitalWrite(relay1, HIGH);
  86.     delay(1000);
  87.     digitalWrite(relay1, LOW);
  88.     delay(10000);
  89.     digitalWrite(greenLed, LOW);
  90.     digitalWrite(redLed, HIGH);
  91.     for (int i = 0; i < 6; i++) {
  92.     digitalWrite(ledPins[i], LOW);
  93.   }
  94.  
  95.   } else {
  96.     S = 0;
  97.     tone(buzzerPin, 200, 1000);
  98.     delay(500);
  99.     noTone(buzzerPin);
  100.     for (int i = 0; i < 5; i++) {
  101.       digitalWrite(redLed, HIGH);
  102.       delay(300);
  103.       digitalWrite(redLed, LOW);
  104.       delay(300);
  105.     }
  106.     digitalWrite(redLed, HIGH);
  107.     delay(5000); //ожидание после неправильного кода
  108.     for (int i = 0; i < 6; i++) {
  109.       digitalWrite(ledPins[i], LOW);
  110.       buttonState[i] = 0;
  111.   }
  112.     digitalWrite(greenLed, HIGH);
  113.     delay(500);
  114.     digitalWrite(greenLed, LOW);
  115.   }
  116.   }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement