3 * (c) Tomas 'Harvie' Mudrunka 2018
8 #define DISARM_CODE "12345678"
9 #define TIME_COUNTDOWN 600
10 #define TIME_COUNTDOWN 15
14 #define PIN_CABLE_CHECK 2
16 #define PIN_KEY_CLK 3 //IRQ!
17 #define PIN_KEY_DATA 4
23 #define PIN_COIL_LO 10
24 #define PIN_COIL_HI 11
26 #define ADDR_DISPLAY 0x70
28 //////////////////////////////////////////////////////////////////
30 #include <PS2Keyboard.h>
32 //#include <Wire.h> // Enable this line if using Arduino Uno, Mega, etc.
33 #include <Adafruit_GFX.h>
34 #include "Adafruit_LEDBackpack.h"
37 Adafruit_7segment display = Adafruit_7segment();
39 #define cnt_sec(s) (s%60)
40 #define cnt_min(s) (s/60)
41 #define cnt_dec(s) (cnt_min(s)*100+cnt_sec(s))
45 //Pripravime periferie
47 keyboard.begin(PIN_KEY_DATA, PIN_KEY_CLK);
48 display.begin(ADDR_DISPLAY);
50 pinMode(PIN_LED_R, OUTPUT);
51 pinMode(PIN_LED_G, OUTPUT);
52 pinMode(PIN_LED_B, OUTPUT);
53 pinMode(PIN_COIL_LO, OUTPUT);
54 pinMode(PIN_COIL_HI, OUTPUT);
55 pinMode(PIN_CABLE_CHECK, INPUT_PULLUP);
61 digitalWrite(PIN_COIL_LO, LOW);
62 digitalWrite(PIN_COIL_HI, LOW);
63 analogWrite(PIN_LED_R, 0);
64 analogWrite(PIN_LED_G, 0);
65 analogWrite(PIN_LED_B, 0);
68 display.setBrightness(15);
69 display.writeDisplay();
71 while (keyboard.available())
74 //Pockame na pripojeni kabelu
75 display.print(0xCAB1, HEX);
76 display.writeDisplay();
77 while (digitalRead(PIN_CABLE_CHECK))
80 //Pockame na odpojeni kabelu
82 display.writeDisplay();
83 while (!digitalRead(PIN_CABLE_CHECK))
87 int guessed = 0, disarmed = 0;
89 for (int cnt = TIME_COUNTDOWN; cnt >= 0 && !disarmed; cnt--) {
90 display.print(cnt_dec(cnt), DEC);
91 display.drawColon((cnt + 1) % 2);
92 display.writeDisplay();
94 analogWrite(PIN_LED_R, random(0, 3));
95 analogWrite(PIN_LED_G, random(0, 3));
96 analogWrite(PIN_LED_B, random(0, 3));
98 tone(PIN_COIL_LO, 1000, 30);
103 while (keyboard.available()) {
104 char c = keyboard.read();
105 if (c == PS2_ENTER) {
110 if (c == DISARM_CODE[guessed]) {
112 Serial.println("\nGOT!");
115 Serial.println("\nFAIL!");
117 if (DISARM_CODE[guessed] == 0) {
119 Serial.println("\nDISARMED!");
125 //Bomba byla deaktivovana
126 tone(PIN_COIL_LO, 3000, 500);
128 tone(PIN_COIL_LO, 5000, 500);
129 analogWrite(PIN_LED_R, 0);
130 analogWrite(PIN_LED_G, 3);
131 analogWrite(PIN_LED_B, 0);
132 display.print(0xDEFD, HEX);
133 display.writeDisplay();
138 char s = digitalRead(PIN_CABLE_CHECK);
139 while (digitalRead(PIN_CABLE_CHECK) != s) {
146 analogWrite(PIN_LED_R, random(0, 255));
147 analogWrite(PIN_LED_G, random(0, 0));
148 analogWrite(PIN_LED_B, random(0, 255));
150 for (i = 0; i < 10; i++)
151 display.writeDigitRaw(i, random(0, 255));
152 display.setBrightness(random(0, 15));
153 display.writeDisplay();
155 digitalWrite(PIN_COIL_HI, HIGH);
157 digitalWrite(PIN_COIL_HI, LOW);
158 int rnd = random(30, 100);
159 tone(PIN_COIL_LO, random(100, 8000), rnd);