#include <Keypad.h>
#include <Wire.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 colunas e 2 linhas
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}; // Pinos conectados a C1, C2, C3, C4
uint8_t rowPins[ROWS] = { 9, 8, 7, 6 }; // Pinos conectados a 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 segundos = 0, power, beep, n = 1;
float defuse = 0;
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;
segundos = 0;
kod = "";
reset = 1;
tisk = 0;
}
}
void setup() {
lcd.init(); // Inicializa o LCD
lcd.backlight(); // Liga o backlight
pinMode(A5, OUTPUT);
digitalWrite(A5, LOW);
digitalWrite(DEFUSE_NUZKY, HIGH);
digitalWrite(DEFUSE, HIGH);
Serial.begin(9600);
lcd.setCursor(4, 0); // Ajuste para centralizar os asteriscos
lcd.print("*******");
}
void loop() {
char key = keypad.getKey();
if (plant == 0) {
if (key != NO_KEY) {
if (reset == 1) {
lcd.clear();
reset = 0;
// Ajuste para centralizar os asteriscos
lcd.setCursor(4, 0);
lcd.print("*******");
}
lcd.setCursor(4, 0);
kod += key;
lcd.print("*******");
lcd.setCursor(4, 0);
if (kod.length() > 7) {
kod = kod.substring(0, 7); // Limita a string a 7 caracteres
}
lcd.print(kod);
if (kod.length() == 7) {
delay(500); // Aguarda meio segundo para facilitar a leitura
if (kod != lock) {
lcd.clear();
lcd.setCursor(1, 1);
lcd.print("CODIGO ERRADO!");
lcd.setCursor(4, 0);
lcd.print("*******");
kod = "";
} else {
plant = 1;
start = millis();
blik = millis();
lcd.clear();
lcd.setCursor(1, 1);
lcd.print("BOMBA PLANTADA");
}
}
}
} else {
if (explosion == 0) {
if ((millis() - blik) > beep) {
blik = millis();
if (segundos > 32) {
digitalWrite(LED_gb, HIGH);
digitalWrite(LED_r, LOW);
} else {
digitalWrite(LED_gb, LOW);
digitalWrite(LED_r, HIGH);
}
tone(BEEPER, 2093);
delay(10);
noTone(BEEPER);
for (float i = 255; i >= power; i--) {
analogWrite(LED_r, i);
if (segundos > 32)
analogWrite(LED_gb, i);
delay(3);
}
digitalWrite(LED_r, LOW);
digitalWrite(LED_gb, LOW);
}
if ((millis() - start) > 999) {
segundos++;
if (digitalRead(DEFUSE) == LOW || digitalRead(DEFUSE_NUZKY) == LOW) {
defuseloop();
}
start = millis();
}
beep = map(segundos, 0, 34, 1000, 100);
power = map(beep, 1000, 100, 0, 250);
if (segundos == 34) {
explosion = 1;
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("BUUUUM");
tone(BEEPER, 10);
delay(5000);
noTone(BEEPER);
}
}
}
}