#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#define LED_gb A0
#define LED_r A1
#define BEEPER 13
#define DEFUSE_NUZKY 11
#define DEFUSE 10
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows
const uint8_t ROWS = 4;
const uint8_t COLS = 3;
char keys[ROWS][COLS] = {
{ '1', '2', '3'},
{ '4', '5', '6'},
{ '7', '8', '9'},
{ '*', '0', '#'}
};
uint8_t colPins[COLS] = { 5, 4, 3}; // Pins connected to C1, C2, C3, C4
uint8_t rowPins[ROWS] = { 9, 8, 7, 6 }; // Pins connected to R1, R2, R3, R4
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
String lock="7355608";
String kod="";
bool plant=false, explosion=false;
float start, blik;
int reset = 0;
int tisk = 0;
int sekundy=0, power, beep, n=1;
float defuse=0;
int hvezdicky = 6;
void defuseloop() {
switch (tisk) {
case 0:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("DEFUSING");
tisk = 1;
break;
case 1:
lcd.print(".");
}
if(digitalRead(DEFUSE_NUZKY)==LOW)
defuse+=1.7;
else
defuse++;
if(defuse>9)
{
plant=0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("THE BOMB HAS");
lcd.setCursor(0,1);
lcd.print("BEEN DEFUSED");
defuse=1;
sekundy=0;
kod="";
reset = 1;
tisk = 0;
}
}
void setup() {
lcd.init(); //initialize the lcd
lcd.backlight(); //open the backlight
pinMode(A5, OUTPUT);
digitalWrite(A5, LOW);
digitalWrite(DEFUSE_NUZKY, HIGH);
digitalWrite(DEFUSE, HIGH);
Serial.begin(9600);
lcd.setCursor(9,0);
lcd.print("*******");
}
void loop() {
char key = keypad.getKey();
if(plant==0)
{
if (key != NO_KEY)
{
if (reset == 1) {
lcd.clear();
reset = 0;
}
lcd.clear();
lcd.setCursor(9,0);
kod+=key;
for (int i = 0; i<hvezdicky; i++) {
lcd.print("*");
}
lcd.print(kod);
hvezdicky--;
lcd.setCursor(9,0);
if(kod.length()>6)
{
hvezdicky = 6;
if(kod!=lock)
{
lcd.clear();
lcd.setCursor(3,1);
lcd.print("WRONG CODE");
lcd.setCursor(9,0);
kod="";
}
else
{
plant=1;
start=millis();
blik=millis();
lcd.clear();
lcd.setCursor(4,1);
lcd.print("PLANTED!");
}
}
}
}
else
{
if(explosion==0)
{
if((millis()-blik)>beep)
{
blik=millis();
digitalWrite(LED_r, HIGH);
if(sekundy>28)
digitalWrite(LED_gb, HIGH);
tone(BEEPER, 2093);
delay(10);
noTone(BEEPER);
for(float i=255; i>=power;i--)
{
analogWrite(LED_r, i);
if(sekundy>28)
analogWrite(LED_gb, i);
delay(3);
}
digitalWrite(LED_r, LOW);
digitalWrite(LED_gb, LOW);
}
if((millis()-start)>999)
{
sekundy++;
if(digitalRead(DEFUSE)==LOW || digitalRead(DEFUSE_NUZKY)==LOW) {
defuseloop();
}
start=millis();
}
beep=map(sekundy, 0, 34, 1000, 100);
power=map(beep, 1000, 100, 0, 250);
if(sekundy==34)
{
explosion=1;
lcd.clear();
lcd.setCursor(5,0);
lcd.print("BUUUUM");
tone(BEEPER, 10);
delay(5000);
noTone(BEEPER);
}
}
}
}