X-Git-Url: http://git.harvie.cz/?a=blobdiff_plain;f=arduino%2FExit_Rum%2Fbomba2b%2Fbomba2b.ino;h=5c49c1cd7565987805639ade2883a9e00fd3dbd6;hb=46a1695823fd4553a6f481c65b2594340d99dbc4;hp=f8774a1b423b142c81ef6bbf809989b2a0208288;hpb=436dacb78129f0944bdc63d395cbe38a921c201b;p=mirrors%2FPrograms.git diff --git a/arduino/Exit_Rum/bomba2b/bomba2b.ino b/arduino/Exit_Rum/bomba2b/bomba2b.ino index f8774a1..5c49c1c 100644 --- a/arduino/Exit_Rum/bomba2b/bomba2b.ino +++ b/arduino/Exit_Rum/bomba2b/bomba2b.ino @@ -3,19 +3,17 @@ * (c) Tomas 'Harvie' Mudrunka 2018 */ - //Nastaveni bomby -#define DISARM_CODE "12345678" -#define TIME_COUNTDOWN 600 -#define TIME_COUNTDOWN 15 - +#define DISARM_CODE "73138477" +#define TIME_COUNTDOWN 600 //600 +//#define TIME_COUNTDOWN 15 //Prirazeni pinu #define PIN_CABLE_CHECK 2 -#define PIN_KEY_CLK 3 //IRQ! +#define PIN_KEY_CLK 3 //IRQ! #define PIN_KEY_DATA 4 #define PIN_LED_G 5 @@ -29,128 +27,193 @@ ////////////////////////////////////////////////////////////////// +#define SOFTSERIAL + +#ifndef SOFTSERIAL #include +PS2Keyboard keyboard; +#else +#include +SoftwareSerial mySerial(PIN_KEY_CLK, PIN_KEY_DATA); +#endif //#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 setup() +{ + //Pripravime periferie + Serial.begin(9600); + Serial.println("zaciname"); +#ifndef SOFTSERIAL + keyboard.begin(PIN_KEY_DATA, PIN_KEY_CLK); +#else + mySerial.begin(4800); +#endif + 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); +} + +int test_disarmed(int reset) +{ + + static int guessed = 0, disarmed = 0; + if (reset) { + guessed = 0; + disarmed = 0; + } + //Cteme klavesnici +#ifndef SOFTSERIAL + while (keyboard.available()) { + char c = keyboard.read(); + //Serial.print("Klavesa: "); + //Serial.println(c); +#else + while (mySerial.available()) { + char c = mySerial.read(); +#endif +#ifndef SOFTSERIAL + if (c == PS2_ENTER) { + Serial.println(); + } else { +#else + if(1) { +#endif + Serial.print(c); + } + + if (c < '0' || c > '9') { + Serial.println("IGNORED!"); + continue; + } + if (c == DISARM_CODE[guessed]) { + guessed++; + Serial.println("\nGOT!"); + } else { + guessed = 0; + Serial.println("\nFAIL!"); + if (c == DISARM_CODE[guessed]) { + guessed++; + Serial.println("\nGOT!"); + } + } + if (DISARM_CODE[guessed] == 0) { + disarmed = 1; + Serial.println("\nDISARMED!"); + } } + return disarmed; -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(); +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.setBrightness(15); + display.writeDisplay(); +#ifndef SOFTSERIAL + while (keyboard.available()) + keyboard.read(); +#else + while (mySerial.available()) + mySerial.read(); +#endif + test_disarmed(1); + + //Pockame na pripojeni kabelu + display.print(0xCAB1, HEX); + display.writeDisplay(); + while (digitalRead(PIN_CABLE_CHECK)) + delay(100); - //Pockame na kabel + //Pockame na odpojeni kabelu + display.clear(); + display.writeDisplay(); + while (!digitalRead(PIN_CABLE_CHECK)) + delay(100); - 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 + for (int cnt = TIME_COUNTDOWN; cnt >= 0 && !test_disarmed(0); cnt--) { + display.print(cnt_dec(cnt), DEC); + display.drawColon((cnt + 1) % 2); + display.writeDisplay(); - //Odpocitavame + analogWrite(PIN_LED_R, random(0, 3)); + analogWrite(PIN_LED_G, random(0, 3)); + analogWrite(PIN_LED_B, random(0, 3)); - int guessed = 0, disarmed = 0; + //Tikani / pipani + tone(PIN_COIL_LO, 1000, 50); + delay(60); + digitalWrite(PIN_COIL_LO, HIGH); + delay(40); + digitalWrite(PIN_COIL_LO, LOW); - for(int cnt = TIME_COUNTDOWN; cnt>=0 && !disarmed; cnt--) { - display.print(cnt_dec(cnt), DEC); - display.drawColon((cnt+1)%2); - display.writeDisplay(); + delay(900); - 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!"); - } - } + while (!test_disarmed(0)) { + //Bomba vybouchla + 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); } - 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)); + //Bomba byla deaktivovana + tone(PIN_COIL_LO, 3000, 500); + delay(500); + tone(PIN_COIL_LO, 5000, 500); + analogWrite(PIN_LED_R, 0); + analogWrite(PIN_LED_G, 0); + analogWrite(PIN_LED_B, 0); + display.print(0xDEFD, HEX); display.writeDisplay(); + delay(1000); + + + //Pockame na zmenu kabelu + char s = digitalRead(PIN_CABLE_CHECK); + while (digitalRead(PIN_CABLE_CHECK) == s) + delay(100); - 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); - } } - - }