4x4 keypad multiuser multi-password system with outputs

Dependencies:   mbed TextLCD Keypad

main.cpp

Committer:
coryburke
Date:
2018-12-07
Revision:
3:f9378196889c
Parent:
2:30db7d0108c1

File content as of revision 3:f9378196889c:


  #include "mbed.h"
  #include "Keypad.h"
#include "TextLCD.h"

//pin selection for keypad matrix

 Keypad kpad(PTE2,PTE3,PTE4,PTE5,PTB8,PTB9,PTB10,PTB11); 
 
// all digital inputs

 /*
Keypad kpad(col1, col2, col3, col4, row1, row2, row3, row4)
*/

// serial connection to pc for debugging and troubleshooting
 Serial pc(USBTX, USBRX);
 
//define passwords of for individual users
const uint32_t number_of_chars = 5; //password length
const char pass_user1[number_of_chars] = {'1','2','3','4','*'}; //password user 1
const char pass_user2[number_of_chars] = {'1','4','7','4','*'}; // password user 2
const char pass_user3[number_of_chars] = {'0','0','0','0','0'}; // password user 3
const char pass_user4[number_of_chars] = {'6','5','4','C','*'}; // password user 4
const char pass_user5[number_of_chars] = {'A','A','A','A','A'}; // password user 5

//choose the character length of valid passwords
char enterd_pass[number_of_chars] = {' ',' ',' ',' ',' '}; 

// each (‘ ‘) represents a location for inputs from keypad


//initialize outputs
DigitalOut led_red(LED_RED);       //red led turned on                                    
DigitalOut led_green(LED_GREEN);   //green led turned on     
DigitalOut output2(PTA4);          // normally off digital output   
DigitalOut output1(PTA5);          // normally on  digital output
  
  
PwmOut beep(PTD4); // buzzer

int main()
{
    char key;
    int i;
   int user_index1=0;
    int user_index2=0;
    int user_index3=0;
    int user_index4=0;
    int user_index5=0;
    int j=0;        // incorrect entry counter
    int flag=0;         //lockout flag
    
printf("\n \n PASSWORD REQUIRED \n \n ");

    int released =1;    // variable to detect if a key is being  pressed on keypad
  
    output1=0;      // digital output
    printf("\r\n Password Entered:");
    led_green = 0;  //LED green on
    led_red = 0;        //LED red on
//red and green led turned on to create yellow

    output2 = 1;  // buzzer alarm off

//buzzer period select,                 
    beep.period(0.001); // determines pitch and sound frequency
    
    wait(0.001);    //off time

















////beginning of do-while loop to activate system lockout after too many login attemps   
do{

    while(1) {

        led_green = 0;
        led_red = 0;
        printf("Enter Password:");
        
        // Reading the password characters
        for(i=0; i<number_of_chars; i++) {

            key = kpad.ReadKey();       // for loop reads each character entered up to 
                                        // number of chars in a password


    if(key == '\0')                          // if no character is being typed
             released = 1;                   //set the flag when all keys are released

      if((key != '\0') && (released == 1))   //if key pressed AND previous key released
       { 

       enterd_pass[i]=key;      
       printf("%c ",enterd_pass[i]);           
       released = 0;              //flag to indicate that key is pressed
              }
else
i--;
          

           
        }
        
        wait(0.003);

        //// prompts entered passcode and is compared to preset user passcodes 
        //// comparing password entered via keypad to valid user passwords

      /////////    user 1    ///////////////
        for(i=0; i<number_of_chars; i++) {
            if( enterd_pass[i] == pass_user1[i] ) {
                user_index1 = 1;
               output2 = 1;
            } else {
                user_index1 = 0;
                break;
            }
        }
        
        

        /////////    user 2    ///////////////
        for(i=0; i<number_of_chars; i++) {
            if( enterd_pass[i] == pass_user2[i] ) {
                user_index2 = 2;
            } else {
                user_index2 = 0;
                break;
            }
        }
        /////////    user 3    ///////////////
        for(i=0; i<number_of_chars; i++) {
            if( enterd_pass[i] == pass_user3[i] ) {
                user_index3 = 3;
            } else {
                user_index3 = 0;
                break;
            }
        }
        /////////    user 4    ///////////////
        for(i=0; i<number_of_chars; i++) {
            if( enterd_pass[i] == pass_user4[i] ) {
                user_index4 = 4;
            } else {
                user_index4 = 0;
                break;
            }
        }
        /////////    user 5    ///////////////
        for(i=0; i<number_of_chars; i++) {
            if( enterd_pass[i] == pass_user5[i] ) {
                user_index5 = 5;
            } else {
                user_index5 = 0;
                break;
            }
        }
        
        // if passcode matches a user passcode
        // continue to grant user accress and activate outputs
       
    ////// correct password prompts and outputs  //////

        if( (1 == user_index1)||(2 == user_index2)||(3 == user_index3)||(4 == user_index4)||(5 == user_index5) )  

// if user index is between 1 and 5 and not 0
{
            printf("\r\n Passcode recognized \n \n ");          // correct passcode prompt
            led_red = 1;                           // red led has 0V, leaving green led on
            output2 = 0;                     // activates short buzzer
            output1=1;                              // activates short buzzer 
            printf("\r\n Welcome Cory Burke \n \n" );
           
          output1=1;                               // output 1 activated

            if(1 == user_index1) {
                printf("\r Access granted User 1 \n \n");              // User 1’s name can be entered her      
            led_red = 1;                        //red led turned off
            output2 = 1;                  // activates short buzzer 
            printf("\r\n Welcome User 1 \n" );
            printf("\r User numer: 1 \n");
            output1=0;
            }
            if(2 == user_index2) {
                printf("\r\n Access granted: User 2 \n \n ");
            led_red = 1;                        //red led turned off
            output2 = 1;                  // activates short buzzer 
            printf("\r\n Welcome User 2 \n" );
            printf("\r User numer: 2 \n");
            output1=0;                      // output1 turned off
            }
            if(3 == user_index3) {
                printf("\r\n Access granted: User 3  \n ");
            led_red = 1;                        //red led turned off
            output2 = 1;                  // activates short buzzer 
            printf("\r\n Welcome User 3 \n" );
            printf("\r User numer: 3 \n ");
            output1=0;                      // output1 turned off
            }
            if(4 == user_index4) {
                printf("\r\n Access granted: User 4   \n ");
            led_red = 1;                        //red led turned off
            output2 = 1;                  // activates short buzzer 
            printf("\r\n Welcome User 4 \n" );
            printf("\r User numer: 4 \n");
            output1=0;                      // output1 turned off
            }
            if(5 == user_index5) {
                printf("\r Access granted: User 5 \n ");
            led_red = 1;                        //red led turned off
            output2 = 1;                  // activates short buzzer 
            printf("\r\n Welcome User 5 \n " );
            printf("\r User numer: 5 \n");
            output1=0;                      // output1 turned off
            }

            wait(1);
            output2 = 0;
            beep = 25.0/100.0;          // beep duty cycle to control volume and pitch
            led_red = 0;                //  
            led_green=0;                //red and green led turned on to create yellow
            output1=1;              // output1 turned off
            wait(1);
      


        }
///// when an incorrect password was entered 
        else {
            printf("\r\n \n Incorrect password \n \n Access denied!  \n \n  ");
            led_green = 1;              //green led turned off
            led_red=0;              //red led turned on
            wait(1);
            output2 = 0;          // buzzer off
             beep = 50.0/100.0;
            j=j+1;                  //  records access attempt
            //// too many attempts made

            if(j==4){printf("\r\n \n TOO MANT ATTEMPTS, SYSTEM LOCKOUT  \n \n  ");
            led_green = 1;      //green led turned off
            led_red=0;      //red led turned on
            flag=1;         //lockout flag activated
            wait(1);
            output2 = 1;       // long buzzer when system lockout occurs
             beep = 50.0/100.0; 
               output1=0;       // output1 turned on
            wait(1);
             output1=0;
            wait(1);
             output1=1;
            wait(1);
             output1=0;
            wait(1);
             output1=1;
            wait(1);    //long buzzer ends
                                                                            }
            
                                                                    }
        
        beep = 0.0/100.0;   // buzzer turned off by duty cycle = 0
        led_green = 0;      //green led turned on
            led_red=0;      //red led turned on
                            //red and green led turned on to create yellow
        output2 = 0;                  
        output1=1; 

    }
    
    
    
    
    
 } while(flag==0); ////end of do-while loop, continues until flag =1 from too many attempts 
                
    
    
    ////end of program
    
    
}