PURS_seminar

Dependents:   TipkovnicaZadnje

Committer:
resetar
Date:
Wed Jan 10 16:03:17 2018 +0000
Revision:
0:19f75d1f3ea2
key_pad

Who changed what in which revision?

UserRevisionLine numberNew contents of line
resetar 0:19f75d1f3ea2 1 #include "mbed.h"
resetar 0:19f75d1f3ea2 2 #include "KEY_PAD.h"
resetar 0:19f75d1f3ea2 3 #include "TextLCD.h"
resetar 0:19f75d1f3ea2 4
resetar 0:19f75d1f3ea2 5 volatile int row=0;
resetar 0:19f75d1f3ea2 6 volatile int col=0;
resetar 0:19f75d1f3ea2 7 volatile int key=0;
resetar 0:19f75d1f3ea2 8 volatile int step=0;
resetar 0:19f75d1f3ea2 9 volatile int code=0;
resetar 0:19f75d1f3ea2 10 volatile int pass_code=0;
resetar 0:19f75d1f3ea2 11
resetar 0:19f75d1f3ea2 12 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) {
resetar 0:19f75d1f3ea2 13 init();
resetar 0:19f75d1f3ea2 14 }
resetar 0:19f75d1f3ea2 15
resetar 0:19f75d1f3ea2 16 void KEY_PAD::init() {
resetar 0:19f75d1f3ea2 17
resetar 0:19f75d1f3ea2 18 stupci.mode(OpenDrain);
resetar 0:19f75d1f3ea2 19 stupci.mode(PullUp);
resetar 0:19f75d1f3ea2 20
resetar 0:19f75d1f3ea2 21 red1.mode(PullUp);
resetar 0:19f75d1f3ea2 22 red2.mode(PullUp);
resetar 0:19f75d1f3ea2 23 red3.mode(PullUp);
resetar 0:19f75d1f3ea2 24 red4.mode(PullUp);
resetar 0:19f75d1f3ea2 25
resetar 0:19f75d1f3ea2 26 red1.fall(this, &get_row1);
resetar 0:19f75d1f3ea2 27 red2.fall(this, &get_row2);
resetar 0:19f75d1f3ea2 28 red3.fall(this, &get_row3);
resetar 0:19f75d1f3ea2 29 red4.fall(this, &get_row4);
resetar 0:19f75d1f3ea2 30 }
resetar 0:19f75d1f3ea2 31 void KEY_PAD::make_num(){
resetar 0:19f75d1f3ea2 32 switch(step){
resetar 0:19f75d1f3ea2 33 case(0):
resetar 0:19f75d1f3ea2 34 code=code+key*100;
resetar 0:19f75d1f3ea2 35 step++;
resetar 0:19f75d1f3ea2 36 break;
resetar 0:19f75d1f3ea2 37
resetar 0:19f75d1f3ea2 38 case(1):
resetar 0:19f75d1f3ea2 39 code=code+key*10;
resetar 0:19f75d1f3ea2 40 step++;
resetar 0:19f75d1f3ea2 41 break;
resetar 0:19f75d1f3ea2 42
resetar 0:19f75d1f3ea2 43 case(2):
resetar 0:19f75d1f3ea2 44 code=code+key;
resetar 0:19f75d1f3ea2 45 step++;
resetar 0:19f75d1f3ea2 46 break;
resetar 0:19f75d1f3ea2 47
resetar 0:19f75d1f3ea2 48 case(3):
resetar 0:19f75d1f3ea2 49 step++;
resetar 0:19f75d1f3ea2 50 break;
resetar 0:19f75d1f3ea2 51
resetar 0:19f75d1f3ea2 52 case(4):
resetar 0:19f75d1f3ea2 53 step=0;
resetar 0:19f75d1f3ea2 54 code=0;
resetar 0:19f75d1f3ea2 55 break;
resetar 0:19f75d1f3ea2 56 }
resetar 0:19f75d1f3ea2 57 }
resetar 0:19f75d1f3ea2 58
resetar 0:19f75d1f3ea2 59 void KEY_PAD::make_code(){
resetar 0:19f75d1f3ea2 60 switch(key){
resetar 0:19f75d1f3ea2 61 case(1):
resetar 0:19f75d1f3ea2 62 make_num();
resetar 0:19f75d1f3ea2 63 break;
resetar 0:19f75d1f3ea2 64
resetar 0:19f75d1f3ea2 65 case(2):
resetar 0:19f75d1f3ea2 66 make_num();
resetar 0:19f75d1f3ea2 67 break;
resetar 0:19f75d1f3ea2 68
resetar 0:19f75d1f3ea2 69 case(3):
resetar 0:19f75d1f3ea2 70 make_num();
resetar 0:19f75d1f3ea2 71 break;
resetar 0:19f75d1f3ea2 72
resetar 0:19f75d1f3ea2 73 case(4):
resetar 0:19f75d1f3ea2 74 make_num();
resetar 0:19f75d1f3ea2 75 break;
resetar 0:19f75d1f3ea2 76
resetar 0:19f75d1f3ea2 77 case(5):
resetar 0:19f75d1f3ea2 78 make_num();
resetar 0:19f75d1f3ea2 79 break;
resetar 0:19f75d1f3ea2 80
resetar 0:19f75d1f3ea2 81 case(6):
resetar 0:19f75d1f3ea2 82 make_num();
resetar 0:19f75d1f3ea2 83 break;
resetar 0:19f75d1f3ea2 84
resetar 0:19f75d1f3ea2 85 case(7):
resetar 0:19f75d1f3ea2 86 make_num();
resetar 0:19f75d1f3ea2 87 break;
resetar 0:19f75d1f3ea2 88
resetar 0:19f75d1f3ea2 89 case(8):
resetar 0:19f75d1f3ea2 90 make_num();
resetar 0:19f75d1f3ea2 91 break;
resetar 0:19f75d1f3ea2 92
resetar 0:19f75d1f3ea2 93 case(9):
resetar 0:19f75d1f3ea2 94 make_num();
resetar 0:19f75d1f3ea2 95 break;
resetar 0:19f75d1f3ea2 96
resetar 0:19f75d1f3ea2 97 case(10):
resetar 0:19f75d1f3ea2 98 step=0;
resetar 0:19f75d1f3ea2 99 code=0;
resetar 0:19f75d1f3ea2 100 break;
resetar 0:19f75d1f3ea2 101
resetar 0:19f75d1f3ea2 102 case(11):
resetar 0:19f75d1f3ea2 103 pass_code=0;
resetar 0:19f75d1f3ea2 104 code=0;
resetar 0:19f75d1f3ea2 105 step=0;
resetar 0:19f75d1f3ea2 106 break;
resetar 0:19f75d1f3ea2 107
resetar 0:19f75d1f3ea2 108 case(12):
resetar 0:19f75d1f3ea2 109 step=0;
resetar 0:19f75d1f3ea2 110 if(code==123 || code==456 || code==789){
resetar 0:19f75d1f3ea2 111 pass_code=code;
resetar 0:19f75d1f3ea2 112 code=0;
resetar 0:19f75d1f3ea2 113 }
resetar 0:19f75d1f3ea2 114 else{
resetar 0:19f75d1f3ea2 115 step=0;
resetar 0:19f75d1f3ea2 116 code=0;
resetar 0:19f75d1f3ea2 117 lcd.locate(0,3);
resetar 0:19f75d1f3ea2 118 lcd.printf("Pogresna lozinka");
resetar 0:19f75d1f3ea2 119 }
resetar 0:19f75d1f3ea2 120 //pogresna lozinka
resetar 0:19f75d1f3ea2 121 break;
resetar 0:19f75d1f3ea2 122 }
resetar 0:19f75d1f3ea2 123 }
resetar 0:19f75d1f3ea2 124
resetar 0:19f75d1f3ea2 125
resetar 0:19f75d1f3ea2 126 /////////////////////////////////////////////////
resetar 0:19f75d1f3ea2 127
resetar 0:19f75d1f3ea2 128 void KEY_PAD::shift(){
resetar 0:19f75d1f3ea2 129 stupci = stupci<<1;
resetar 0:19f75d1f3ea2 130
resetar 0:19f75d1f3ea2 131 stupci = stupci & 0b00000111;
resetar 0:19f75d1f3ea2 132
resetar 0:19f75d1f3ea2 133 wait_ms(2);
resetar 0:19f75d1f3ea2 134 }
resetar 0:19f75d1f3ea2 135
resetar 0:19f75d1f3ea2 136 void KEY_PAD::get_key(){
resetar 0:19f75d1f3ea2 137 int table[4][3]{{1, 2, 3},
resetar 0:19f75d1f3ea2 138 {4, 5, 6},
resetar 0:19f75d1f3ea2 139 {7, 8, 9},
resetar 0:19f75d1f3ea2 140 {10, 11, 12}};
resetar 0:19f75d1f3ea2 141
resetar 0:19f75d1f3ea2 142 key=table[row-1][col-1];
resetar 0:19f75d1f3ea2 143
resetar 0:19f75d1f3ea2 144 row=0;
resetar 0:19f75d1f3ea2 145 col=0;
resetar 0:19f75d1f3ea2 146
resetar 0:19f75d1f3ea2 147 make_code();
resetar 0:19f75d1f3ea2 148 }
resetar 0:19f75d1f3ea2 149
resetar 0:19f75d1f3ea2 150 void KEY_PAD::get_row1(){
resetar 0:19f75d1f3ea2 151 red1.fall(NULL);
resetar 0:19f75d1f3ea2 152 red2.fall(NULL);
resetar 0:19f75d1f3ea2 153 red3.fall(NULL);
resetar 0:19f75d1f3ea2 154 red4.fall(NULL);
resetar 0:19f75d1f3ea2 155
resetar 0:19f75d1f3ea2 156 row=1;
resetar 0:19f75d1f3ea2 157 stupci=1;
resetar 0:19f75d1f3ea2 158
resetar 0:19f75d1f3ea2 159 wait_ms(1);
resetar 0:19f75d1f3ea2 160
resetar 0:19f75d1f3ea2 161 for(int i=1; i<=3; i++){
resetar 0:19f75d1f3ea2 162 if(red1!=0){
resetar 0:19f75d1f3ea2 163 col=i;
resetar 0:19f75d1f3ea2 164 break;
resetar 0:19f75d1f3ea2 165 }
resetar 0:19f75d1f3ea2 166 shift();
resetar 0:19f75d1f3ea2 167 }
resetar 0:19f75d1f3ea2 168 get_key();
resetar 0:19f75d1f3ea2 169 stupci=0;
resetar 0:19f75d1f3ea2 170 }
resetar 0:19f75d1f3ea2 171
resetar 0:19f75d1f3ea2 172 void KEY_PAD::get_row2(){
resetar 0:19f75d1f3ea2 173 red1.fall(NULL);
resetar 0:19f75d1f3ea2 174 red2.fall(NULL);
resetar 0:19f75d1f3ea2 175 red3.fall(NULL);
resetar 0:19f75d1f3ea2 176 red4.fall(NULL);
resetar 0:19f75d1f3ea2 177
resetar 0:19f75d1f3ea2 178 row=2;
resetar 0:19f75d1f3ea2 179 stupci=1;
resetar 0:19f75d1f3ea2 180
resetar 0:19f75d1f3ea2 181 wait_ms(1);
resetar 0:19f75d1f3ea2 182
resetar 0:19f75d1f3ea2 183 for(int i=1; i<=3; i++){
resetar 0:19f75d1f3ea2 184 if(red2!=0 && i!=3){
resetar 0:19f75d1f3ea2 185 col=i;
resetar 0:19f75d1f3ea2 186 break;
resetar 0:19f75d1f3ea2 187 }
resetar 0:19f75d1f3ea2 188 if(i==3){
resetar 0:19f75d1f3ea2 189 col=3;
resetar 0:19f75d1f3ea2 190 break;
resetar 0:19f75d1f3ea2 191 }
resetar 0:19f75d1f3ea2 192 shift();
resetar 0:19f75d1f3ea2 193 }
resetar 0:19f75d1f3ea2 194 get_key();
resetar 0:19f75d1f3ea2 195 stupci=0;
resetar 0:19f75d1f3ea2 196 }
resetar 0:19f75d1f3ea2 197
resetar 0:19f75d1f3ea2 198 void KEY_PAD::get_row3(){
resetar 0:19f75d1f3ea2 199 red1.fall(NULL);
resetar 0:19f75d1f3ea2 200 red2.fall(NULL);
resetar 0:19f75d1f3ea2 201 red3.fall(NULL);
resetar 0:19f75d1f3ea2 202 red4.fall(NULL);
resetar 0:19f75d1f3ea2 203
resetar 0:19f75d1f3ea2 204 row=3;
resetar 0:19f75d1f3ea2 205 stupci=1;
resetar 0:19f75d1f3ea2 206
resetar 0:19f75d1f3ea2 207 wait_ms(1);
resetar 0:19f75d1f3ea2 208
resetar 0:19f75d1f3ea2 209 for(int i=1; i<=3; i++){
resetar 0:19f75d1f3ea2 210 if(red3!=0 && i!=3){
resetar 0:19f75d1f3ea2 211 col=i;
resetar 0:19f75d1f3ea2 212 break;
resetar 0:19f75d1f3ea2 213 }
resetar 0:19f75d1f3ea2 214 if(i==3){
resetar 0:19f75d1f3ea2 215 col=3;
resetar 0:19f75d1f3ea2 216 break;
resetar 0:19f75d1f3ea2 217 }
resetar 0:19f75d1f3ea2 218 shift();
resetar 0:19f75d1f3ea2 219 }
resetar 0:19f75d1f3ea2 220 get_key();
resetar 0:19f75d1f3ea2 221 stupci=0;
resetar 0:19f75d1f3ea2 222 }
resetar 0:19f75d1f3ea2 223
resetar 0:19f75d1f3ea2 224 void KEY_PAD::get_row4(){
resetar 0:19f75d1f3ea2 225 red1.fall(NULL);
resetar 0:19f75d1f3ea2 226 red2.fall(NULL);
resetar 0:19f75d1f3ea2 227 red3.fall(NULL);
resetar 0:19f75d1f3ea2 228 red4.fall(NULL);
resetar 0:19f75d1f3ea2 229
resetar 0:19f75d1f3ea2 230 row=4;
resetar 0:19f75d1f3ea2 231 stupci=1;
resetar 0:19f75d1f3ea2 232
resetar 0:19f75d1f3ea2 233 wait_ms(1);
resetar 0:19f75d1f3ea2 234
resetar 0:19f75d1f3ea2 235 for(int i=1; i<=3; i++){
resetar 0:19f75d1f3ea2 236 if(red4!=0 && i!=3){
resetar 0:19f75d1f3ea2 237 col=i;
resetar 0:19f75d1f3ea2 238 break;
resetar 0:19f75d1f3ea2 239 }
resetar 0:19f75d1f3ea2 240 if(i==3){
resetar 0:19f75d1f3ea2 241 col=3;
resetar 0:19f75d1f3ea2 242 break;
resetar 0:19f75d1f3ea2 243 }
resetar 0:19f75d1f3ea2 244 shift();
resetar 0:19f75d1f3ea2 245 }
resetar 0:19f75d1f3ea2 246 get_key();
resetar 0:19f75d1f3ea2 247 stupci=0;
resetar 0:19f75d1f3ea2 248 }