#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include "pitches.h"
#define KEY_ROWS 4 // Keypad rows
#define KEY_COLS 4 // Keypad columns
#define LCD_ROWS 2 // LCD rows
#define LCD_COLS 16 // LCD columns
#define SPEAKER_PIN 9
LiquidCrystal_I2C lcd(0x27,16,2);
const byte KEYPAD_ROWS = 4;
const byte KEYPAD_COLS = 4;
byte rowPins[KEYPAD_ROWS] = {5, 4, 3, 2};
byte colPins[KEYPAD_COLS] = {A3, A2, A1, A0};
char keys[KEYPAD_ROWS][KEYPAD_COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KEYPAD_ROWS, KEYPAD_COLS);
String passcode = "7355608";
String inputCode = "";
bool acceptKey = true;
void clearRow(byte n) {
byte last = LCD_COLS - n;
lcd.setCursor(n, 1); // Change to the 2nd row, then prints "Pin:"
for (byte i = 0; i < last; i++) {
lcd.print(" ");
}
lcd.setCursor(n, 1);
}
void resetLocker() {
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Input code");
lcd.setCursor(0, 1);
lcd.print("*******");
tone(SPEAKER_PIN, NOTE_FS6);
delay(100);
noTone(SPEAKER_PIN);
delay(100);
tone(SPEAKER_PIN, NOTE_FS6);
delay(100);
noTone(SPEAKER_PIN);
lcd.setCursor(0, 1);
lcd.noCursor();
acceptKey = true;
inputCode = "";
}
void unlockdoor(){
int pitch = 0;
clearRow(0);
lcd.setCursor(2,0);
lcd.print("Bomb armed!!");
tone(SPEAKER_PIN, NOTE_A7);
delay(150);
noTone(SPEAKER_PIN);
delay(150);
tone(SPEAKER_PIN, NOTE_A7);
delay(300);
noTone(SPEAKER_PIN);
delay(1500);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(1000);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(1000);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(1000);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(950);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(950);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(950);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(900);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(900);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(900);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(850);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(850);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(850);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(800);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(800);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(800);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(750);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(750);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(750);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(700);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(700);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(700);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(650);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(650);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(650);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(600);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(600);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(600);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(550);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(550);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(550);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(500);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(500);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(500);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(450);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(450);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(450);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(400);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(400);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(400);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(350);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(350);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(350);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(300);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(300);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(300);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(300);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(200);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(200);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(200);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(200);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(200);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(120);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
tone(SPEAKER_PIN, NOTE_A7);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
noTone(SPEAKER_PIN);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Bomb exploded!");
delay(2000);
}
void checkPinCode() {
acceptKey = false; // Not accepting any enter for passcode
clearRow(0); // Clear from the 0 numer
lcd.noCursor();
lcd.setCursor(0, 1); // Change to the 2nd row
// Check the passcode
if (inputCode == passcode) {
lcd.clear();
unlockdoor();
delay(300);
} else {
lcd.setCursor(2, 0);
lcd.print("Wrong code!!");
tone(SPEAKER_PIN, NOTE_C4);
delay(100);
noTone(SPEAKER_PIN);
}
delay(7000);
resetLocker(); // Reset LCD and servo
}
void setup() {
Serial.begin(9600);
pinMode(SPEAKER_PIN, OUTPUT);
lcd.init();
lcd.backlight();
resetLocker();
}
void loop() {
char key = keypad.getKey();
if (acceptKey && key != NO_KEY) {
if (key == '*') { // Clear
clearRow(4); // Clear from the 4th row
inputCode = "";
} else if (key == '#') { // Check passcode
checkPinCode();
} else {
inputCode += key; // Save
lcd.print(key);
tone(SPEAKER_PIN, NOTE_B5);
delay(100);
noTone(SPEAKER_PIN);
}
}
}