Alarm system with keypad

Hi, i'm new on this forum and my English isn't perfect so be patient please :slight_smile:
I'm doing and alarm system and i want to activate and deactivate the alarm using a keypad code.
I use this keypad:


I want to get a four character code from the keypad and compare it with a prearrenged code. If the code is right the program will do something, if wrong i want to print an error message and get another time the code.
I was be able to write only this code at the moment and i don't know how to "build" a code from the keypad.

#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = 
{
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9,8,7,6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5,4,3,2}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);
char key;
void setup()
{
  Serial.begin(9600);
}

void loop()
{
key = keypad.getKey();
if (key)
{
  Serial.println(key);
}

Can you please help me with with advices? I only want to know how to get the verification alarm code. Thank you! :slight_smile:

Yes.

There must be a stored code for the user to match.
It should be stored in a char array... do you understand arrays?

example snippets, untested:

// these variables are used to match user entry to a password

const byte passCodeLength = 6;      // how many characters must be matched
const char passCode[ ] = "1234AB";  // what sequence to match
const char exitKey = '*'; // allow user to exit and reset the match process

byte passCodeMatchIndex = 0; // how many pass code characters have been matched while matching
byte keysPressed = 0;
byte passFail = 0;  // set to 1 on successful match
void loop()
{
  key = keypad.getKey();
  if ( key )
  {
    keysPressed++;
    Serial.println( key ); 

    if ( key == exitKey )
    {
      keysPressed = passCodeMatchIndex = 0; // user commanded exit, may try again
    }
    else if ( key == passCode[ passCodeMatchIndex ] )
    {
      passCodeMatchIndex++;
    }
    else 
    {
      passCodeMatchIndex = 100; // bad match but do not let the user know what did not match
    }

    if ( keysPressed == passCodeLength )
    {
      if ( passCodeMatchIndex == passCodeLength )
      {
        Serial.println( F( "\nPASSED!\n" );
        passFail = 1;
      }
      else
      {
        Serial.println( F( "\nFAILED!\n" );
        passFail = 0;
      }
      keysPressed = passCodeMatchIndex = 0;
    }
  }

  if ( passFail )
  {
    // code to do whatever entering the password is supposed to
    passFail = 0;
  }
}