From 436dacb78129f0944bdc63d395cbe38a921c201b Mon Sep 17 00:00:00 2001 From: Tomas Mudrunka Date: Fri, 8 Jun 2018 00:09:08 +0200 Subject: [PATCH] bomba2 --- arduino/Exit_Rum/bomba2b/bomba2b.ino | 156 +++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 arduino/Exit_Rum/bomba2b/bomba2b.ino diff --git a/arduino/Exit_Rum/bomba2b/bomba2b.ino b/arduino/Exit_Rum/bomba2b/bomba2b.ino new file mode 100644 index 0000000..f8774a1 --- /dev/null +++ b/arduino/Exit_Rum/bomba2b/bomba2b.ino @@ -0,0 +1,156 @@ +/* + * Exit Rum 2 + * (c) Tomas 'Harvie' Mudrunka 2018 + */ + + +//Nastaveni bomby + +#define DISARM_CODE "12345678" +#define TIME_COUNTDOWN 600 +#define TIME_COUNTDOWN 15 + + +//Prirazeni pinu + +#define PIN_CABLE_CHECK 2 + +#define PIN_KEY_CLK 3 //IRQ! +#define PIN_KEY_DATA 4 + +#define PIN_LED_G 5 +#define PIN_LED_B 6 +#define PIN_LED_R 7 + +#define PIN_COIL_LO 10 +#define PIN_COIL_HI 11 + +#define ADDR_DISPLAY 0x70 + +////////////////////////////////////////////////////////////////// + +#include + +//#include // Enable this line if using Arduino Uno, Mega, etc. +#include +#include "Adafruit_LEDBackpack.h" + +PS2Keyboard keyboard; +Adafruit_7segment display = Adafruit_7segment(); + +#define cnt_sec(s) (s%60) +#define cnt_min(s) (s/60) +#define cnt_dec(s) (cnt_min(s)*100+cnt_sec(s)) + +void setup() { + //Pripravime periferie + Serial.begin(9600); + keyboard.begin(PIN_KEY_DATA, PIN_KEY_CLK); + display.begin(ADDR_DISPLAY); + + pinMode(PIN_LED_R, OUTPUT); + pinMode(PIN_LED_G, OUTPUT); + pinMode(PIN_LED_B, OUTPUT); + pinMode(PIN_COIL_LO, OUTPUT); + pinMode(PIN_COIL_HI, OUTPUT); + pinMode(PIN_CABLE_CHECK, INPUT_PULLUP); + + } + + +void loop() { + //Vynulujem periferie + digitalWrite(PIN_COIL_LO, LOW); + digitalWrite(PIN_COIL_HI, LOW); + analogWrite(PIN_LED_R, 0); + analogWrite(PIN_LED_G, 0); + analogWrite(PIN_LED_B, 0); + + display.clear(); + display.writeDisplay(); + + + //Pockame na kabel + + display.print(0xCAB1,HEX); + display.writeDisplay(); + while(digitalRead(PIN_CABLE_CHECK)) delay(100); + display.clear(); + display.writeDisplay(); + + while(!digitalRead(PIN_CABLE_CHECK)) delay(100); + + //Odpocitavame + + int guessed = 0, disarmed = 0; + + for(int cnt = TIME_COUNTDOWN; cnt>=0 && !disarmed; cnt--) { + display.print(cnt_dec(cnt), DEC); + display.drawColon((cnt+1)%2); + display.writeDisplay(); + + analogWrite(PIN_LED_R, random(0,3)); + analogWrite(PIN_LED_G, random(0,3)); + analogWrite(PIN_LED_B, random(0,3)); + + tone(PIN_COIL_LO, 1000, 30); + + delay(1000); + + //Cteme klavesnici + while(keyboard.available()) { + char c = keyboard.read(); + if (c == PS2_ENTER) { + Serial.println(); + } else { + Serial.print(c); + } + if(c == DISARM_CODE[guessed]) { + guessed++; + Serial.println("\nGOT!"); + } else { + guessed=0; + Serial.println("\nFAIL!"); + } + if(DISARM_CODE[guessed]==0) { + disarmed = 1; + Serial.println("\nDISARMED!"); + } + } + } + + if(disarmed) { + tone(PIN_COIL_LO, 3000, 500); + delay(500); + tone(PIN_COIL_LO, 5000, 500); + analogWrite(PIN_LED_R, 0); + analogWrite(PIN_LED_G, 3); + analogWrite(PIN_LED_B, 0); + display.print(0xDEFD,HEX); + display.writeDisplay(); + delay(1000); + + } + +while(digitalRead(PIN_CABLE_CHECK)) { + + if(!disarmed) { + + int i; + + analogWrite(PIN_LED_R, random(0,255)); + analogWrite(PIN_LED_G, random(0,0)); + analogWrite(PIN_LED_B, random(0,255)); + + for(i = 0; i < 10; i++) display.writeDigitRaw(i,random(0,255)); + display.setBrightness(random(0,15)); + display.writeDisplay(); + + digitalWrite(PIN_COIL_HI,HIGH); delay(20); digitalWrite(PIN_COIL_HI,LOW); + int rnd = random(30,100); + tone(PIN_COIL_LO, random(100,8000), rnd); + delay(rnd); + } +} + + } -- 2.30.2