kl25z secure keypad 4x4 keypad with multiple passwords,users, and outputs. (buzzer)

Dependencies:   mbed TextLCD Keypad

Committer:
coryburke
Date:
Fri Dec 07 07:08:02 2018 +0000
Revision:
2:30db7d0108c1
Parent:
1:5461144fd540
keypad 4x4 for multiple users and multiple passwords

Who changed what in which revision?

UserRevisionLine numberNew contents of line
habusaq 0:93cb8707aa8c 1 #include "mbed.h"
habusaq 0:93cb8707aa8c 2 #include "Keypad.h"
habusaq 0:93cb8707aa8c 3 #include "TextLCD.h"
coryburke 2:30db7d0108c1 4
coryburke 2:30db7d0108c1 5 //pin selection for keypad matrix
coryburke 2:30db7d0108c1 6
coryburke 2:30db7d0108c1 7 Keypad kpad(PTE2,PTE3,PTE4,PTE5,PTB8,PTB9,PTB10,PTB11);
coryburke 2:30db7d0108c1 8
coryburke 2:30db7d0108c1 9 /*
coryburke 2:30db7d0108c1 10 col1, col2, col3, col4, row1, row2, row3, row4
habusaq 0:93cb8707aa8c 11 */
habusaq 0:93cb8707aa8c 12
coryburke 2:30db7d0108c1 13 // serial connection to pc for debugging and troubleshooting
coryburke 2:30db7d0108c1 14 Serial pc(USBTX, USBRX);
coryburke 2:30db7d0108c1 15
coryburke 2:30db7d0108c1 16 //define passwords of for individual users
coryburke 2:30db7d0108c1 17 const uint32_t number_of_chars = 5; //password length
coryburke 2:30db7d0108c1 18 const char pass_user1[number_of_chars] = {'1','2','3','4','*'}; //
coryburke 2:30db7d0108c1 19 const char pass_user2[number_of_chars] = {'1','4','7','4','*'}; //
coryburke 2:30db7d0108c1 20 const char pass_user3[number_of_chars] = {'0','0','0','0','0'}; //
coryburke 2:30db7d0108c1 21 const char pass_user4[number_of_chars] = {'6','5','4','C','*'}; //
coryburke 2:30db7d0108c1 22 const char pass_user5[number_of_chars] = {'A','A','A','A','A'}; //
habusaq 0:93cb8707aa8c 23
coryburke 2:30db7d0108c1 24 //choose the character length of valid passwords
coryburke 2:30db7d0108c1 25 char enterd_pass[number_of_chars] = {' ',' ',' ',' ',' '};
habusaq 0:93cb8707aa8c 26
coryburke 2:30db7d0108c1 27
coryburke 2:30db7d0108c1 28 //initialize outputs
habusaq 0:93cb8707aa8c 29 DigitalOut led_red(LED_RED);
habusaq 0:93cb8707aa8c 30 DigitalOut led_green(LED_GREEN);
coryburke 2:30db7d0108c1 31 DigitalOut active_buzzer(PTA4);
coryburke 2:30db7d0108c1 32 DigitalOut output1(PTA5);
coryburke 2:30db7d0108c1 33 //Buzzer on pin PTD4
habusaq 0:93cb8707aa8c 34
coryburke 2:30db7d0108c1 35 PwmOut beep(PTD4); // buzzer
habusaq 0:93cb8707aa8c 36
habusaq 0:93cb8707aa8c 37 int main()
habusaq 0:93cb8707aa8c 38 {
habusaq 0:93cb8707aa8c 39 char key;
habusaq 0:93cb8707aa8c 40 int i;
habusaq 0:93cb8707aa8c 41 int user_index1=0;
habusaq 0:93cb8707aa8c 42 int user_index2=0;
habusaq 0:93cb8707aa8c 43 int user_index3=0;
habusaq 0:93cb8707aa8c 44 int user_index4=0;
habusaq 0:93cb8707aa8c 45 int user_index5=0;
coryburke 2:30db7d0108c1 46 int j=0;
coryburke 2:30db7d0108c1 47 int flag=0;
habusaq 0:93cb8707aa8c 48
coryburke 2:30db7d0108c1 49 printf("\n \n PASSWORD REQUIRED \n \n ");
habusaq 0:93cb8707aa8c 50
coryburke 2:30db7d0108c1 51 int released =1;
coryburke 2:30db7d0108c1 52
coryburke 2:30db7d0108c1 53 output1=1;
coryburke 2:30db7d0108c1 54 printf("\r\n Password Entered:");
habusaq 0:93cb8707aa8c 55 led_green = 0;
habusaq 0:93cb8707aa8c 56 led_red = 0;
habusaq 0:93cb8707aa8c 57 active_buzzer = 0;
habusaq 0:93cb8707aa8c 58
coryburke 2:30db7d0108c1 59 //buzzer period select
habusaq 1:5461144fd540 60 beep.period(0.001);
coryburke 2:30db7d0108c1 61
habusaq 0:93cb8707aa8c 62 wait(0.001);
habusaq 0:93cb8707aa8c 63
habusaq 0:93cb8707aa8c 64
coryburke 2:30db7d0108c1 65 do{
coryburke 2:30db7d0108c1 66 while(1) {
coryburke 2:30db7d0108c1 67 led_green = 0;
coryburke 2:30db7d0108c1 68 led_red = 0;
coryburke 2:30db7d0108c1 69 printf("Enter Password:");
habusaq 0:93cb8707aa8c 70
habusaq 0:93cb8707aa8c 71 // Reading the password characters
habusaq 0:93cb8707aa8c 72 for(i=0; i<number_of_chars; i++) {
habusaq 0:93cb8707aa8c 73 key = kpad.ReadKey();
habusaq 0:93cb8707aa8c 74
habusaq 0:93cb8707aa8c 75 if(key == '\0')
habusaq 0:93cb8707aa8c 76 released = 1; //set the flag when all keys are released
habusaq 0:93cb8707aa8c 77 if((key != '\0') && (released == 1)) { //if a key is pressed AND previous key was released
habusaq 0:93cb8707aa8c 78 enterd_pass[i]=key;
coryburke 2:30db7d0108c1 79 printf("%c ",enterd_pass[i]);
habusaq 0:93cb8707aa8c 80 released = 0; //clear the flag to indicate that key is still pressed
habusaq 0:93cb8707aa8c 81 }
habusaq 0:93cb8707aa8c 82 else
habusaq 0:93cb8707aa8c 83 i--;
habusaq 0:93cb8707aa8c 84
habusaq 0:93cb8707aa8c 85
habusaq 0:93cb8707aa8c 86
habusaq 0:93cb8707aa8c 87 }
habusaq 0:93cb8707aa8c 88
coryburke 2:30db7d0108c1 89 wait(0.003);
habusaq 0:93cb8707aa8c 90
coryburke 2:30db7d0108c1 91 // comparing password entered via keypad to valid user passwords
habusaq 0:93cb8707aa8c 92
habusaq 0:93cb8707aa8c 93 ///////// user 1 ///////////////
habusaq 0:93cb8707aa8c 94 for(i=0; i<number_of_chars; i++) {
habusaq 0:93cb8707aa8c 95 if( enterd_pass[i] == pass_user1[i] ) {
habusaq 0:93cb8707aa8c 96 user_index1 = 1;
coryburke 2:30db7d0108c1 97 active_buzzer = 0;
habusaq 0:93cb8707aa8c 98 } else {
habusaq 0:93cb8707aa8c 99 user_index1 = 0;
habusaq 0:93cb8707aa8c 100 break;
habusaq 0:93cb8707aa8c 101 }
habusaq 0:93cb8707aa8c 102 }
habusaq 0:93cb8707aa8c 103
habusaq 0:93cb8707aa8c 104
habusaq 0:93cb8707aa8c 105
habusaq 0:93cb8707aa8c 106 ///////// user 2 ///////////////
habusaq 0:93cb8707aa8c 107 for(i=0; i<number_of_chars; i++) {
habusaq 0:93cb8707aa8c 108 if( enterd_pass[i] == pass_user2[i] ) {
habusaq 0:93cb8707aa8c 109 user_index2 = 2;
habusaq 0:93cb8707aa8c 110 } else {
habusaq 0:93cb8707aa8c 111 user_index2 = 0;
habusaq 0:93cb8707aa8c 112 break;
habusaq 0:93cb8707aa8c 113 }
habusaq 0:93cb8707aa8c 114 }
habusaq 0:93cb8707aa8c 115 ///////// user 3 ///////////////
habusaq 0:93cb8707aa8c 116 for(i=0; i<number_of_chars; i++) {
habusaq 0:93cb8707aa8c 117 if( enterd_pass[i] == pass_user3[i] ) {
habusaq 0:93cb8707aa8c 118 user_index3 = 3;
habusaq 0:93cb8707aa8c 119 } else {
habusaq 0:93cb8707aa8c 120 user_index3 = 0;
habusaq 0:93cb8707aa8c 121 break;
habusaq 0:93cb8707aa8c 122 }
habusaq 0:93cb8707aa8c 123 }
habusaq 0:93cb8707aa8c 124 ///////// user 4 ///////////////
habusaq 0:93cb8707aa8c 125 for(i=0; i<number_of_chars; i++) {
habusaq 0:93cb8707aa8c 126 if( enterd_pass[i] == pass_user4[i] ) {
habusaq 0:93cb8707aa8c 127 user_index4 = 4;
habusaq 0:93cb8707aa8c 128 } else {
habusaq 0:93cb8707aa8c 129 user_index4 = 0;
habusaq 0:93cb8707aa8c 130 break;
habusaq 0:93cb8707aa8c 131 }
habusaq 0:93cb8707aa8c 132 }
habusaq 0:93cb8707aa8c 133 ///////// user 5 ///////////////
habusaq 0:93cb8707aa8c 134 for(i=0; i<number_of_chars; i++) {
habusaq 0:93cb8707aa8c 135 if( enterd_pass[i] == pass_user5[i] ) {
habusaq 0:93cb8707aa8c 136 user_index5 = 5;
habusaq 0:93cb8707aa8c 137 } else {
habusaq 0:93cb8707aa8c 138 user_index5 = 0;
habusaq 0:93cb8707aa8c 139 break;
habusaq 0:93cb8707aa8c 140 }
habusaq 0:93cb8707aa8c 141 }
coryburke 2:30db7d0108c1 142
coryburke 2:30db7d0108c1 143
coryburke 2:30db7d0108c1 144 ////// correct password prompts and outputs
habusaq 0:93cb8707aa8c 145 if( (1 == user_index1)||(2 == user_index2)||(3 == user_index3)||(4 == user_index4)||(5 == user_index5) ) {
coryburke 2:30db7d0108c1 146 printf("\r\n Passcode recognized \n \n ");
habusaq 0:93cb8707aa8c 147 led_red = 1;
coryburke 2:30db7d0108c1 148 active_buzzer = 0;
coryburke 2:30db7d0108c1 149 printf("\r\n Welcome Cory Burke \n \n" );
coryburke 2:30db7d0108c1 150
coryburke 2:30db7d0108c1 151 output1=0;
habusaq 0:93cb8707aa8c 152
habusaq 0:93cb8707aa8c 153 if(1 == user_index1) {
coryburke 2:30db7d0108c1 154 printf("\r Access granted User 1 \n \n");
coryburke 2:30db7d0108c1 155 led_red = 1;
coryburke 2:30db7d0108c1 156 active_buzzer = 0;
coryburke 2:30db7d0108c1 157 printf("\r\n Welcome User 1 \n" );
coryburke 2:30db7d0108c1 158 printf("\r User numer: 1 \n");
coryburke 2:30db7d0108c1 159 output1=0;
habusaq 0:93cb8707aa8c 160 }
habusaq 0:93cb8707aa8c 161 if(2 == user_index2) {
coryburke 2:30db7d0108c1 162 printf("\r\n Access granted: User 2 \n \n ");
coryburke 2:30db7d0108c1 163 led_red = 1;
coryburke 2:30db7d0108c1 164 active_buzzer = 0;
coryburke 2:30db7d0108c1 165 printf("\r\n Welcome User 2 \n" );
coryburke 2:30db7d0108c1 166 printf("\r User numer: 2 \n");
coryburke 2:30db7d0108c1 167 output1=0;
habusaq 0:93cb8707aa8c 168 }
habusaq 0:93cb8707aa8c 169 if(3 == user_index3) {
coryburke 2:30db7d0108c1 170 printf("\r\n Access granted: User 3 \n ");
coryburke 2:30db7d0108c1 171 led_red = 1;
coryburke 2:30db7d0108c1 172 active_buzzer = 0;
coryburke 2:30db7d0108c1 173 printf("\r\n Welcome User 3 \n" );
coryburke 2:30db7d0108c1 174 printf("\r User numer: 3 \n ");
coryburke 2:30db7d0108c1 175 output1=0;
habusaq 0:93cb8707aa8c 176 }
habusaq 0:93cb8707aa8c 177 if(4 == user_index4) {
coryburke 2:30db7d0108c1 178 printf("\r\n Access granted: User 4 \n ");
coryburke 2:30db7d0108c1 179 led_red = 1;
coryburke 2:30db7d0108c1 180 active_buzzer = 0;
coryburke 2:30db7d0108c1 181 printf("\r\n Welcome User 4 \n" );
coryburke 2:30db7d0108c1 182 printf("\r User numer: 4 \n");
coryburke 2:30db7d0108c1 183 output1=0;
habusaq 0:93cb8707aa8c 184 }
habusaq 0:93cb8707aa8c 185 if(5 == user_index5) {
coryburke 2:30db7d0108c1 186 printf("\r Access granted: User 5 \n ");
coryburke 2:30db7d0108c1 187 led_red = 1;
coryburke 2:30db7d0108c1 188 active_buzzer = 0;
coryburke 2:30db7d0108c1 189 printf("\r\n Welcome User 5 \n " );
coryburke 2:30db7d0108c1 190 printf("\r User numer: 5 \n");
coryburke 2:30db7d0108c1 191 output1=0;
habusaq 0:93cb8707aa8c 192 }
habusaq 0:93cb8707aa8c 193
habusaq 0:93cb8707aa8c 194 wait(1);
coryburke 2:30db7d0108c1 195 active_buzzer = 0;
coryburke 2:30db7d0108c1 196 beep = 25.0/100.0;
habusaq 0:93cb8707aa8c 197 led_red = 0;
coryburke 2:30db7d0108c1 198 led_green=0;
coryburke 2:30db7d0108c1 199 output1=1;
habusaq 0:93cb8707aa8c 200 wait(1);
coryburke 2:30db7d0108c1 201
habusaq 0:93cb8707aa8c 202
habusaq 0:93cb8707aa8c 203
habusaq 0:93cb8707aa8c 204 }
coryburke 2:30db7d0108c1 205 // indicates that an incorrect passwords was entered with leds and buzzer
habusaq 0:93cb8707aa8c 206 else {
coryburke 2:30db7d0108c1 207 printf("\r\n \n Incorrect password \n \n Access denied! \n \n ");
coryburke 2:30db7d0108c1 208 led_green = 1;
coryburke 2:30db7d0108c1 209 led_red=0;
coryburke 2:30db7d0108c1 210 wait(1);
coryburke 2:30db7d0108c1 211 active_buzzer = 1;
coryburke 2:30db7d0108c1 212 beep = 50.0/100.0;
coryburke 2:30db7d0108c1 213 j=j+1;
coryburke 2:30db7d0108c1 214
coryburke 2:30db7d0108c1 215 if(j==4){printf("\r\n \n TOO MANT ATTEMPTS, SYSTEM LOCKOUT \n \n ");
habusaq 0:93cb8707aa8c 216 led_green = 1;
coryburke 2:30db7d0108c1 217 led_red=0;
coryburke 2:30db7d0108c1 218 flag=1;
habusaq 0:93cb8707aa8c 219 wait(1);
coryburke 2:30db7d0108c1 220 active_buzzer = 1;
coryburke 2:30db7d0108c1 221 beep = 50.0/100.0;
coryburke 2:30db7d0108c1 222 output1=1;
coryburke 2:30db7d0108c1 223 wait(1);
coryburke 2:30db7d0108c1 224 output1=0;
coryburke 2:30db7d0108c1 225 wait(1);
coryburke 2:30db7d0108c1 226 output1=1;
coryburke 2:30db7d0108c1 227 wait(1);
coryburke 2:30db7d0108c1 228 output1=0;
coryburke 2:30db7d0108c1 229 wait(1);
coryburke 2:30db7d0108c1 230 output1=1;
coryburke 2:30db7d0108c1 231 wait(1);
coryburke 2:30db7d0108c1 232 }
coryburke 2:30db7d0108c1 233
coryburke 2:30db7d0108c1 234 }
habusaq 1:5461144fd540 235
habusaq 1:5461144fd540 236 beep = 0.0/100.0;
coryburke 2:30db7d0108c1 237 led_green = 0;
coryburke 2:30db7d0108c1 238 led_red=0;
habusaq 0:93cb8707aa8c 239 }
coryburke 2:30db7d0108c1 240
coryburke 2:30db7d0108c1 241
coryburke 2:30db7d0108c1 242
coryburke 2:30db7d0108c1 243
coryburke 2:30db7d0108c1 244
coryburke 2:30db7d0108c1 245 } while(flag==0);
coryburke 2:30db7d0108c1 246
coryburke 2:30db7d0108c1 247
coryburke 2:30db7d0108c1 248
coryburke 2:30db7d0108c1 249
coryburke 2:30db7d0108c1 250
coryburke 2:30db7d0108c1 251
habusaq 0:93cb8707aa8c 252 }
habusaq 0:93cb8707aa8c 253