Build Sheets

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);
  }
}