Source
Escape_Game_MegaKeypad.ino
// INCLUDES
#include <Arduino.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
//defines
#define Password_Length 7
// CONSTANTS
char deviceID = 1;
//switch
const byte triggerSwitchA = 7;
const byte triggerSwitchB = 6;
const byte triggerSwitchC = 5;
const int redLED = 2;
//relay pin
const int relay = 8;
LiquidCrystal_I2C lcd(0x27,16,2);
const byte ROWS = 4;
const byte COLS = 4;
bool relayOn;
bool systemOn;
//keypad
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
//keypad pins
byte rowPins[ROWS] = {33, 35, 39, 37};
byte colPins[COLS] = {45, 43, 49, 47};
Keypad myKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
//byte lastValue;
char Data[Password_Length];
char Master[Password_Length] = "173486";
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;
bool keypadSolved;
//user defined functions
void clearData(){
while(data_count !=0){
Data[data_count--] = 0;
}
return;
}
// regular sketch
void setup() {
// put your setup code here, to run once:
Wire.begin();
Serial.begin(9600);
Serial.println("Device 1 initialized");
delay(1000);
//myServo.attach(servoPin);
systemOn = false;
relayOn = false;
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
pinMode(relay, OUTPUT);
digitalWrite(relay, LOW);
pinMode(triggerSwitchA, INPUT_PULLUP);
pinMode(triggerSwitchB, INPUT_PULLUP);
pinMode(triggerSwitchC, INPUT_PULLUP);
pinMode(redLED, OUTPUT);
}
void loop() {
if (digitalRead(triggerSwitchA) == LOW && digitalRead(triggerSwitchC) == LOW && digitalRead(triggerSwitchB) == HIGH) {
systemOn = true;
if (systemOn == true){
//lcd.clear();
lcd.setCursor(0,0);
lcd.print("Input Code:");
digitalWrite(redLED, HIGH);
customKey = myKeypad.getKey();
if (customKey){
Data[data_count] = customKey;
lcd.setCursor(data_count,1);
lcd.print(Data[data_count]);
Serial.print(Data[data_count]);
data_count++;
delay(50);
}
if(data_count == Password_Length-1){
lcd.clear();
delay(500);
if(!strcmp(Data, Master) && relayOn == false){
lcd.setCursor(0,0);
lcd.print("Accepted");
Serial.println("puzzle 2 solved");
digitalWrite(relay, HIGH); // Turn the relay on
Serial.println("relay on");
delay(200); // Wait
digitalWrite(relay, LOW); // Turn the relay Off
Serial.println("relay off");
relayOn = true;
}
else {
lcd.print("Thinking");
delay(1000);
lcd.clear();
clearData();
}
}
}
} else {
systemOn = false;
relayOn = false;
lcd.clear();
digitalWrite(redLED, LOW);
}
}