4x4 keypad multiuser multi-password system with outputs

Dependencies:   mbed TextLCD Keypad

Committer:
habusaq
Date:
Mon Apr 23 01:23:45 2018 +0000
Revision:
0:93cb8707aa8c
Child:
1:5461144fd540
Secure Keypad

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"
habusaq 0:93cb8707aa8c 4 Keypad kpad(PTC8, PTC1, PTB19, PTB18, PTC5, PTC7, PTC0, PTC9);
habusaq 0:93cb8707aa8c 5 Serial pc(USBTX, USBRX);
habusaq 0:93cb8707aa8c 6 TextLCD lcd(PTA1, PTB23, PTA2, PTC2, PTC3, PTC12, TextLCD::LCD16x2);
habusaq 0:93cb8707aa8c 7 /*
habusaq 0:93cb8707aa8c 8 col1, col2, col3, col4,
habusaq 0:93cb8707aa8c 9 row1, row2, row3, row4
habusaq 0:93cb8707aa8c 10 */
habusaq 0:93cb8707aa8c 11
habusaq 0:93cb8707aa8c 12 const int number_of_chars = 4;
habusaq 0:93cb8707aa8c 13 const char pass_user1[number_of_chars] = {'1','2','3','A'}; //HA
habusaq 0:93cb8707aa8c 14 const char pass_user2[number_of_chars] = {'2','2','3','A'}; //FA
habusaq 0:93cb8707aa8c 15 const char pass_user3[number_of_chars] = {'5','2','3','A'}; //AA
habusaq 0:93cb8707aa8c 16 const char pass_user4[number_of_chars] = {'6','2','3','A'}; //MA
habusaq 0:93cb8707aa8c 17 const char pass_user5[number_of_chars] = {'7','2','3','A'}; //FF
habusaq 0:93cb8707aa8c 18
habusaq 0:93cb8707aa8c 19 char enterd_pass[number_of_chars] = {' ', ' ',' ',' '};
habusaq 0:93cb8707aa8c 20
habusaq 0:93cb8707aa8c 21 DigitalOut led_red(LED_RED);
habusaq 0:93cb8707aa8c 22 DigitalOut led_green(LED_GREEN);
habusaq 0:93cb8707aa8c 23 DigitalOut active_buzzer(PTC4); //Buzzer on pin PTC4=D9
habusaq 0:93cb8707aa8c 24
habusaq 0:93cb8707aa8c 25
habusaq 0:93cb8707aa8c 26 //Serial pc(USBTX, USBRX);
habusaq 0:93cb8707aa8c 27
habusaq 0:93cb8707aa8c 28 int main()
habusaq 0:93cb8707aa8c 29 {
habusaq 0:93cb8707aa8c 30 char key;
habusaq 0:93cb8707aa8c 31 int i;
habusaq 0:93cb8707aa8c 32 int user_index1=0;
habusaq 0:93cb8707aa8c 33 int user_index2=0;
habusaq 0:93cb8707aa8c 34 int user_index3=0;
habusaq 0:93cb8707aa8c 35 int user_index4=0;
habusaq 0:93cb8707aa8c 36 int user_index5=0;
habusaq 0:93cb8707aa8c 37
habusaq 0:93cb8707aa8c 38 int released =1;;
habusaq 0:93cb8707aa8c 39
habusaq 0:93cb8707aa8c 40
habusaq 0:93cb8707aa8c 41 led_green = 0;
habusaq 0:93cb8707aa8c 42 led_red = 0;
habusaq 0:93cb8707aa8c 43 active_buzzer = 0;
habusaq 0:93cb8707aa8c 44
habusaq 0:93cb8707aa8c 45
habusaq 0:93cb8707aa8c 46
habusaq 0:93cb8707aa8c 47 lcd.cls();
habusaq 0:93cb8707aa8c 48 wait(0.001);
habusaq 0:93cb8707aa8c 49
habusaq 0:93cb8707aa8c 50
habusaq 0:93cb8707aa8c 51
habusaq 0:93cb8707aa8c 52 while(true) {
habusaq 0:93cb8707aa8c 53
habusaq 0:93cb8707aa8c 54 lcd.locate(0,0); // col, row
habusaq 0:93cb8707aa8c 55 lcd.printf("Enter Password:");
habusaq 0:93cb8707aa8c 56
habusaq 0:93cb8707aa8c 57 // Reading the password characters
habusaq 0:93cb8707aa8c 58 for(i=0; i<number_of_chars; i++) {
habusaq 0:93cb8707aa8c 59 key = kpad.ReadKey();
habusaq 0:93cb8707aa8c 60
habusaq 0:93cb8707aa8c 61 if(key == '\0')
habusaq 0:93cb8707aa8c 62 released = 1; //set the flag when all keys are released
habusaq 0:93cb8707aa8c 63 if((key != '\0') && (released == 1)) { //if a key is pressed AND previous key was released
habusaq 0:93cb8707aa8c 64 enterd_pass[i]=key;
habusaq 0:93cb8707aa8c 65 lcd.locate(i,1); // col, row
habusaq 0:93cb8707aa8c 66 lcd.printf("*");
habusaq 0:93cb8707aa8c 67
habusaq 0:93cb8707aa8c 68 released = 0; //clear the flag to indicate that key is still pressed
habusaq 0:93cb8707aa8c 69 }
habusaq 0:93cb8707aa8c 70 else
habusaq 0:93cb8707aa8c 71 i--;
habusaq 0:93cb8707aa8c 72
habusaq 0:93cb8707aa8c 73
habusaq 0:93cb8707aa8c 74
habusaq 0:93cb8707aa8c 75 }
habusaq 0:93cb8707aa8c 76
habusaq 0:93cb8707aa8c 77 wait(0.5);
habusaq 0:93cb8707aa8c 78
habusaq 0:93cb8707aa8c 79 lcd.locate(0,1); // col, row
habusaq 0:93cb8707aa8c 80 lcd.printf(" " );
habusaq 0:93cb8707aa8c 81
habusaq 0:93cb8707aa8c 82 // comparing passwords
habusaq 0:93cb8707aa8c 83
habusaq 0:93cb8707aa8c 84 ///////// user 1 ///////////////
habusaq 0:93cb8707aa8c 85 for(i=0; i<number_of_chars; i++) {
habusaq 0:93cb8707aa8c 86 if( enterd_pass[i] == pass_user1[i] ) {
habusaq 0:93cb8707aa8c 87 user_index1 = 1;
habusaq 0:93cb8707aa8c 88 } else {
habusaq 0:93cb8707aa8c 89 user_index1 = 0;
habusaq 0:93cb8707aa8c 90 break;
habusaq 0:93cb8707aa8c 91 }
habusaq 0:93cb8707aa8c 92 }
habusaq 0:93cb8707aa8c 93
habusaq 0:93cb8707aa8c 94
habusaq 0:93cb8707aa8c 95
habusaq 0:93cb8707aa8c 96 ///////// user 2 ///////////////
habusaq 0:93cb8707aa8c 97 for(i=0; i<number_of_chars; i++) {
habusaq 0:93cb8707aa8c 98 if( enterd_pass[i] == pass_user2[i] ) {
habusaq 0:93cb8707aa8c 99 user_index2 = 2;
habusaq 0:93cb8707aa8c 100 } else {
habusaq 0:93cb8707aa8c 101 user_index2 = 0;
habusaq 0:93cb8707aa8c 102 break;
habusaq 0:93cb8707aa8c 103 }
habusaq 0:93cb8707aa8c 104 }
habusaq 0:93cb8707aa8c 105 ///////// user 3 ///////////////
habusaq 0:93cb8707aa8c 106 for(i=0; i<number_of_chars; i++) {
habusaq 0:93cb8707aa8c 107 if( enterd_pass[i] == pass_user3[i] ) {
habusaq 0:93cb8707aa8c 108 user_index3 = 3;
habusaq 0:93cb8707aa8c 109 } else {
habusaq 0:93cb8707aa8c 110 user_index3 = 0;
habusaq 0:93cb8707aa8c 111 break;
habusaq 0:93cb8707aa8c 112 }
habusaq 0:93cb8707aa8c 113 }
habusaq 0:93cb8707aa8c 114 ///////// user 4 ///////////////
habusaq 0:93cb8707aa8c 115 for(i=0; i<number_of_chars; i++) {
habusaq 0:93cb8707aa8c 116 if( enterd_pass[i] == pass_user4[i] ) {
habusaq 0:93cb8707aa8c 117 user_index4 = 4;
habusaq 0:93cb8707aa8c 118 } else {
habusaq 0:93cb8707aa8c 119 user_index4 = 0;
habusaq 0:93cb8707aa8c 120 break;
habusaq 0:93cb8707aa8c 121 }
habusaq 0:93cb8707aa8c 122 }
habusaq 0:93cb8707aa8c 123 ///////// user 5 ///////////////
habusaq 0:93cb8707aa8c 124 for(i=0; i<number_of_chars; i++) {
habusaq 0:93cb8707aa8c 125 if( enterd_pass[i] == pass_user5[i] ) {
habusaq 0:93cb8707aa8c 126 user_index5 = 5;
habusaq 0:93cb8707aa8c 127 } else {
habusaq 0:93cb8707aa8c 128 user_index5 = 0;
habusaq 0:93cb8707aa8c 129 break;
habusaq 0:93cb8707aa8c 130 }
habusaq 0:93cb8707aa8c 131 }
habusaq 0:93cb8707aa8c 132 //////////////////////////////////////////////////
habusaq 0:93cb8707aa8c 133 if( (1 == user_index1)||(2 == user_index2)||(3 == user_index3)||(4 == user_index4)||(5 == user_index5) ) {
habusaq 0:93cb8707aa8c 134 pc.printf("Access granted ");
habusaq 0:93cb8707aa8c 135 led_red = 1;
habusaq 0:93cb8707aa8c 136 active_buzzer = 1;
habusaq 0:93cb8707aa8c 137 lcd.locate(0,1); // col, row
habusaq 0:93cb8707aa8c 138 lcd.printf("User: ");
habusaq 0:93cb8707aa8c 139
habusaq 0:93cb8707aa8c 140 if(1 == user_index1) {
habusaq 0:93cb8707aa8c 141 lcd.locate(6,1); // col, row
habusaq 0:93cb8707aa8c 142 lcd.printf("HA");
habusaq 0:93cb8707aa8c 143 }
habusaq 0:93cb8707aa8c 144 if(2 == user_index2) {
habusaq 0:93cb8707aa8c 145 lcd.locate(6,1); // col, row
habusaq 0:93cb8707aa8c 146 lcd.printf("FA");
habusaq 0:93cb8707aa8c 147 }
habusaq 0:93cb8707aa8c 148 if(3 == user_index3) {
habusaq 0:93cb8707aa8c 149 lcd.locate(6,1); // col, row
habusaq 0:93cb8707aa8c 150 lcd.printf("AA");
habusaq 0:93cb8707aa8c 151 }
habusaq 0:93cb8707aa8c 152 if(4 == user_index4) {
habusaq 0:93cb8707aa8c 153 lcd.locate(6,1); // col, row
habusaq 0:93cb8707aa8c 154 lcd.printf("MA");
habusaq 0:93cb8707aa8c 155 }
habusaq 0:93cb8707aa8c 156 if(5 == user_index5) {
habusaq 0:93cb8707aa8c 157 lcd.locate(6,1); // col, row
habusaq 0:93cb8707aa8c 158 lcd.printf("FF");
habusaq 0:93cb8707aa8c 159 }
habusaq 0:93cb8707aa8c 160
habusaq 0:93cb8707aa8c 161 wait(1);
habusaq 0:93cb8707aa8c 162 active_buzzer = 0;
habusaq 0:93cb8707aa8c 163 led_red = 0;
habusaq 0:93cb8707aa8c 164 wait(1);
habusaq 0:93cb8707aa8c 165 lcd.cls();
habusaq 0:93cb8707aa8c 166
habusaq 0:93cb8707aa8c 167
habusaq 0:93cb8707aa8c 168 }
habusaq 0:93cb8707aa8c 169
habusaq 0:93cb8707aa8c 170 else {
habusaq 0:93cb8707aa8c 171 lcd.locate(0,0); // col, row
habusaq 0:93cb8707aa8c 172 lcd.printf("Access denied ");
habusaq 0:93cb8707aa8c 173 led_green = 1;
habusaq 0:93cb8707aa8c 174 wait(1);
habusaq 0:93cb8707aa8c 175 led_green = 0;
habusaq 0:93cb8707aa8c 176
habusaq 0:93cb8707aa8c 177 }
habusaq 0:93cb8707aa8c 178
habusaq 0:93cb8707aa8c 179
habusaq 0:93cb8707aa8c 180 }
habusaq 0:93cb8707aa8c 181 }
habusaq 0:93cb8707aa8c 182