PURS_seminar
Embed:
(wiki syntax)
Show/hide line numbers
KEY_PAD.cpp
00001 #include "mbed.h" 00002 #include "KEY_PAD.h" 00003 #include "TextLCD.h" 00004 00005 volatile int row=0; 00006 volatile int col=0; 00007 volatile int key=0; 00008 volatile int step=0; 00009 volatile int code=0; 00010 volatile int pass_code=0; 00011 00012 KEY_PAD::KEY_PAD(PinName stupac3Pin, PinName stupac2Pin, PinName stupac1Pin, PinName red4Pin, PinName red3Pin, PinName red2Pin, PinName red1Pin) : stupac3(stupac3Pin), stupac2(stupac2Pin), stupac1(stupac1Pin), red4(red4Pin), red3(red3Pin), red2(red2Pin), red1(red1Pin) { 00013 init(); 00014 } 00015 00016 void KEY_PAD::init() { 00017 00018 stupci.mode(OpenDrain); 00019 stupci.mode(PullUp); 00020 00021 red1.mode(PullUp); 00022 red2.mode(PullUp); 00023 red3.mode(PullUp); 00024 red4.mode(PullUp); 00025 00026 red1.fall(this, &get_row1); 00027 red2.fall(this, &get_row2); 00028 red3.fall(this, &get_row3); 00029 red4.fall(this, &get_row4); 00030 } 00031 void KEY_PAD::make_num(){ 00032 switch(step){ 00033 case(0): 00034 code=code+key*100; 00035 step++; 00036 break; 00037 00038 case(1): 00039 code=code+key*10; 00040 step++; 00041 break; 00042 00043 case(2): 00044 code=code+key; 00045 step++; 00046 break; 00047 00048 case(3): 00049 step++; 00050 break; 00051 00052 case(4): 00053 step=0; 00054 code=0; 00055 break; 00056 } 00057 } 00058 00059 void KEY_PAD::make_code(){ 00060 switch(key){ 00061 case(1): 00062 make_num(); 00063 break; 00064 00065 case(2): 00066 make_num(); 00067 break; 00068 00069 case(3): 00070 make_num(); 00071 break; 00072 00073 case(4): 00074 make_num(); 00075 break; 00076 00077 case(5): 00078 make_num(); 00079 break; 00080 00081 case(6): 00082 make_num(); 00083 break; 00084 00085 case(7): 00086 make_num(); 00087 break; 00088 00089 case(8): 00090 make_num(); 00091 break; 00092 00093 case(9): 00094 make_num(); 00095 break; 00096 00097 case(10): 00098 step=0; 00099 code=0; 00100 break; 00101 00102 case(11): 00103 pass_code=0; 00104 code=0; 00105 step=0; 00106 break; 00107 00108 case(12): 00109 step=0; 00110 if(code==123 || code==456 || code==789){ 00111 pass_code=code; 00112 code=0; 00113 } 00114 else{ 00115 step=0; 00116 code=0; 00117 lcd.locate(0,3); 00118 lcd.printf("Pogresna lozinka"); 00119 } 00120 //pogresna lozinka 00121 break; 00122 } 00123 } 00124 00125 00126 ///////////////////////////////////////////////// 00127 00128 void KEY_PAD::shift(){ 00129 stupci = stupci<<1; 00130 00131 stupci = stupci & 0b00000111; 00132 00133 wait_ms(2); 00134 } 00135 00136 void KEY_PAD::get_key(){ 00137 int table[4][3]{{1, 2, 3}, 00138 {4, 5, 6}, 00139 {7, 8, 9}, 00140 {10, 11, 12}}; 00141 00142 key=table[row-1][col-1]; 00143 00144 row=0; 00145 col=0; 00146 00147 make_code(); 00148 } 00149 00150 void KEY_PAD::get_row1(){ 00151 red1.fall(NULL); 00152 red2.fall(NULL); 00153 red3.fall(NULL); 00154 red4.fall(NULL); 00155 00156 row=1; 00157 stupci=1; 00158 00159 wait_ms(1); 00160 00161 for(int i=1; i<=3; i++){ 00162 if(red1!=0){ 00163 col=i; 00164 break; 00165 } 00166 shift(); 00167 } 00168 get_key(); 00169 stupci=0; 00170 } 00171 00172 void KEY_PAD::get_row2(){ 00173 red1.fall(NULL); 00174 red2.fall(NULL); 00175 red3.fall(NULL); 00176 red4.fall(NULL); 00177 00178 row=2; 00179 stupci=1; 00180 00181 wait_ms(1); 00182 00183 for(int i=1; i<=3; i++){ 00184 if(red2!=0 && i!=3){ 00185 col=i; 00186 break; 00187 } 00188 if(i==3){ 00189 col=3; 00190 break; 00191 } 00192 shift(); 00193 } 00194 get_key(); 00195 stupci=0; 00196 } 00197 00198 void KEY_PAD::get_row3(){ 00199 red1.fall(NULL); 00200 red2.fall(NULL); 00201 red3.fall(NULL); 00202 red4.fall(NULL); 00203 00204 row=3; 00205 stupci=1; 00206 00207 wait_ms(1); 00208 00209 for(int i=1; i<=3; i++){ 00210 if(red3!=0 && i!=3){ 00211 col=i; 00212 break; 00213 } 00214 if(i==3){ 00215 col=3; 00216 break; 00217 } 00218 shift(); 00219 } 00220 get_key(); 00221 stupci=0; 00222 } 00223 00224 void KEY_PAD::get_row4(){ 00225 red1.fall(NULL); 00226 red2.fall(NULL); 00227 red3.fall(NULL); 00228 red4.fall(NULL); 00229 00230 row=4; 00231 stupci=1; 00232 00233 wait_ms(1); 00234 00235 for(int i=1; i<=3; i++){ 00236 if(red4!=0 && i!=3){ 00237 col=i; 00238 break; 00239 } 00240 if(i==3){ 00241 col=3; 00242 break; 00243 } 00244 shift(); 00245 } 00246 get_key(); 00247 stupci=0; 00248 }
Generated on Fri Jul 15 2022 23:59:29 by 1.7.2