3 * (c) Tomas 'Harvie' Mudrunka 2018
8 #define DISARM_CODE "73138477"
9 #define TIME_COUNTDOWN 600 //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 //////////////////////////////////////////////////////////////////
33 #include <PS2Keyboard.h>
36 #include <SoftwareSerial.h>
37 SoftwareSerial mySerial(PIN_KEY_CLK, PIN_KEY_DATA);
40 //#include <Wire.h> // Enable this line if using Arduino Uno, Mega, etc.
41 #include <Adafruit_GFX.h>
42 #include "Adafruit_LEDBackpack.h"
44 Adafruit_7segment display = Adafruit_7segment();
46 #define cnt_sec(s) (s%60)
47 #define cnt_min(s) (s/60)
48 #define cnt_dec(s) (cnt_min(s)*100+cnt_sec(s))
52 //Pripravime periferie
54 Serial.println("zaciname");
56 keyboard.begin(PIN_KEY_DATA, PIN_KEY_CLK);
60 display.begin(ADDR_DISPLAY);
62 pinMode(PIN_LED_R, OUTPUT);
63 pinMode(PIN_LED_G, OUTPUT);
64 pinMode(PIN_LED_B, OUTPUT);
65 pinMode(PIN_COIL_LO, OUTPUT);
66 pinMode(PIN_COIL_HI, OUTPUT);
67 pinMode(PIN_CABLE_CHECK, INPUT_PULLUP);
70 int test_disarmed(int reset)
73 static int guessed = 0, disarmed = 0;
80 while (keyboard.available()) {
81 char c = keyboard.read();
82 //Serial.print("Klavesa: ");
85 while (mySerial.available()) {
86 char c = mySerial.read();
98 if (c < '0' || c > '9') {
99 Serial.println("IGNORED!");
103 if (c == DISARM_CODE[guessed]) {
105 Serial.println("\nGOT!");
108 Serial.println("\nFAIL!");
109 if (c == DISARM_CODE[guessed]) {
111 Serial.println("\nGOT!");
114 if (DISARM_CODE[guessed] == 0) {
116 Serial.println("\nDISARMED!");
126 //Vynulujem periferie
127 digitalWrite(PIN_COIL_LO, LOW);
128 digitalWrite(PIN_COIL_HI, LOW);
129 analogWrite(PIN_LED_R, 0);
130 analogWrite(PIN_LED_G, 0);
131 analogWrite(PIN_LED_B, 0);
134 display.setBrightness(15);
135 display.writeDisplay();
138 while (keyboard.available())
141 while (mySerial.available())
146 //Pockame na pripojeni kabelu
147 display.print(0xCAB1, HEX);
148 display.writeDisplay();
149 while (digitalRead(PIN_CABLE_CHECK))
152 //Pockame na odpojeni kabelu
154 display.writeDisplay();
155 while (!digitalRead(PIN_CABLE_CHECK))
159 for (int cnt = TIME_COUNTDOWN; cnt >= 0 && !test_disarmed(0); cnt--) {
160 display.print(cnt_dec(cnt), DEC);
161 display.drawColon((cnt + 1) % 2);
162 display.writeDisplay();
164 analogWrite(PIN_LED_R, random(0, 3));
165 analogWrite(PIN_LED_G, random(0, 3));
166 analogWrite(PIN_LED_B, random(0, 3));
169 tone(PIN_COIL_LO, 1000, 50);
171 digitalWrite(PIN_COIL_LO, HIGH);
173 digitalWrite(PIN_COIL_LO, LOW);
180 while (!test_disarmed(0)) {
184 analogWrite(PIN_LED_R, random(0, 255));
185 analogWrite(PIN_LED_G, random(0, 0));
186 analogWrite(PIN_LED_B, random(0, 255));
188 for (i = 0; i < 10; i++)
189 display.writeDigitRaw(i, random(0, 255));
190 display.setBrightness(random(0, 15));
191 display.writeDisplay();
193 digitalWrite(PIN_COIL_HI, HIGH);
195 digitalWrite(PIN_COIL_HI, LOW);
196 int rnd = random(30, 100);
197 tone(PIN_COIL_LO, random(100, 8000), rnd);
202 //Bomba byla deaktivovana
203 tone(PIN_COIL_LO, 3000, 500);
205 tone(PIN_COIL_LO, 5000, 500);
206 analogWrite(PIN_LED_R, 0);
207 analogWrite(PIN_LED_G, 0);
208 analogWrite(PIN_LED_B, 0);
209 display.print(0xDEFD, HEX);
210 display.writeDisplay();
214 //Pockame na zmenu kabelu
215 char s = digitalRead(PIN_CABLE_CHECK);
216 while (digitalRead(PIN_CABLE_CHECK) == s)