/////////////////////////////
// Airsoft Bomb //
// by BitStorm //
/////////////////////////////
#include <LiquidCrystal.h>
//#include <tone.h>
//#define pound 14
#define LED_RED 13
#define LED_GREEN 2
#define buttonPin 4
byte buttonState;
byte lastbuttonState;
//TODO Variablen setzen
unsigned int timerSeconds = 120; //edit Timer in Sekunden
int plantTimer = 5; //edit for Planting Time in Sekunden
int inactiveTimer = 5; //edit for inactivity Time bei defuse in Sekunden; wenn 0, dann gibt es keine inactivity
int bombexplode = 0;
int defuseCheck = 9;
int dCheck = 0;
int pressed = 0;
int inactivity = 0;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
void setup()
{
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
lcd.begin(16, 2);
lcd.print("Rush B");
lcd.cursor();
lcd.setCursor(6, 1);
pinMode(buttonPin, INPUT);
lcd.noCursor();
lastbuttonState = digitalRead(buttonPin);
inactivity = 0;
//tone1.begin(9);
}
void loop()
{
buttonState = digitalRead(buttonPin);
delay(50);
if (buttonState != lastbuttonState && pressed == 0)
{
lastbuttonState = buttonState;
if (buttonState == LOW)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Bombe wird ");
lcd.setCursor(0, 1);
lcd.print("plaziert!");
pressed = 1;
delay(plantTimer*1000);
lcd.clear();
timer();
}
}
}
void timer()
{
inactivity = 0;
defuseCheck = 9;
while (dCheck == 0)
{
lcd.setCursor(0, 1);
lcd.print("Timer: ");
lcd.print(timerSeconds / 60);
lcd.print(":");
if (timerSeconds % 60 < 10)
{
lcd.print("0");
lcd.print(timerSeconds % 60);
} else
{
lcd.print(timerSeconds % 60);
}
delay(950);
digitalWrite(LED_RED, HIGH);
tone(6, 1600, 50);
delay(50);
//digitalWrite(LED_RED, LOW);
timerSeconds--;
buttonState = digitalRead(buttonPin);
delay(50);
if (timerSeconds > 0 && buttonState != lastbuttonState && dCheck == 0)
{
lastbuttonState = buttonState;
//if (buttonState == LOW && dCheck == 0)
//{
defuse();
dCheck = 1;
//}
}
if (timerSeconds <= 0 && dCheck == 0)
{
dCheck = 2;
explode();
}
}
}
void defuse()
{
while (defuseCheck != 7)
{
inactivity++;
if (inactivity == inactiveTimer*20) //inactivitytime 100 = 5 sekunden
{
inactivity = 0;
dCheck = 0;
lcd.clear();
timerSeconds = timerSeconds + 10;
timer();
}
if (defuseCheck == 9)
{
dCheck = 1;
lcd.noCursor();
lcd.clear();
lcd.print("Bombe wird");
lcd.setCursor(0, 1);
lcd.print("defused");
defuseCheck = 0;
}
if (defuseCheck == 0)
{
delay(500);
while (lastbuttonState == HIGH)
{
buttonState = digitalRead(buttonPin);
lastbuttonState = buttonState;
}
lastbuttonState = buttonState;
delay(500);
defuseCheck = 1;
lcd.clear();
lcd.print("Press Button!");
pressed = 1;
//inactivity = 0;
}
lastbuttonState = buttonState;
buttonState = digitalRead(buttonPin);
delay(50);
if (buttonState != lastbuttonState && pressed == 1)
{
lastbuttonState = buttonState;
if (buttonState == LOW)
{
if (defuseCheck == 1)
{
lcd.clear();
lcd.setCursor(5, 1);
lcd.print("6");
tone(6, 800, 50);
delay(950);
defuseCheck = 2;
lcd.setCursor(0, 0);
lcd.print("Press Button!");
lcd.setCursor(5, 1);
lcd.print("*");
inactivity = 0;
} else if (defuseCheck == 2)
{
lcd.clear();
lcd.setCursor(5, 1);
lcd.print("*9");
tone(6, 800, 50);
delay(950);
defuseCheck = 3;
lcd.setCursor(0, 0);
lcd.print("Press Button!");
lcd.setCursor(5, 1);
lcd.print("**");
inactivity = 0;
} else if (defuseCheck == 3)
{
lcd.clear();
lcd.setCursor(5, 1);
lcd.print("**4");
tone(6, 800, 50);
delay(950);
defuseCheck = 4;
lcd.setCursor(0, 0);
lcd.print("Press Button!");
lcd.setCursor(5, 1);
lcd.print("***");
inactivity = 0;
} else if (defuseCheck == 4)
{
lcd.clear();
lcd.setCursor(5, 1);
lcd.print("***2");
tone(6, 800, 50);
delay(950);
defuseCheck = 5;
lcd.setCursor(0, 0);
lcd.print("Press Button!");
lcd.setCursor(5, 1);
lcd.print("****");
inactivity = 0;
} else if (defuseCheck == 5)
{
lcd.clear();
lcd.setCursor(5, 1);
lcd.print("****0");
tone(6, 800, 50);
delay(950);
defuseCheck = 6;
lcd.setCursor(0, 0);
lcd.print("Press Button!");
lcd.setCursor(5, 1);
lcd.print("*****");
inactivity = 0;
} else if (defuseCheck == 6)
{
lcd.clear();
lcd.print("Bomb defused!");
delay(200000);
defuseCheck = 7;
}
}
}
}
}
void explode()
{
bombexplode = 1;
lcd.noCursor();
lcd.clear();
lcd.print("Allahu Akbar");
lcd.setCursor(0, 1);
lcd.print("Bombe detoniert");
while (bombexplode == 1)
{
tone(6, 110, 100);
digitalWrite(LED_RED, HIGH);
delay(500);
tone(6, 110, 100);
delay(500);
digitalWrite(LED_RED, LOW);
digitalWrite(LED_GREEN, HIGH);
tone(6, 110, 100);
delay(500);
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_GREEN, LOW);
tone(6, 110, 100);
delay(500);
digitalWrite(LED_RED, LOW);
digitalWrite(LED_GREEN, HIGH);
tone(6, 110, 100);
delay(500);
}
}