
test
main.cpp@0:bd9818ed0414, 2021-05-03 (annotated)
- Committer:
- tgrgic1
- Date:
- Mon May 03 21:42:36 2021 +0000
- Revision:
- 0:bd9818ed0414
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tgrgic1 | 0:bd9818ed0414 | 1 | #include "mbed.h" |
tgrgic1 | 0:bd9818ed0414 | 2 | #include "TextLCD.h" |
tgrgic1 | 0:bd9818ed0414 | 3 | #include "Keypad.h" |
tgrgic1 | 0:bd9818ed0414 | 4 | |
tgrgic1 | 0:bd9818ed0414 | 5 | Keypad tipkovnica(D2,D3,D4,D5,D8,D9,D10,D11); |
tgrgic1 | 0:bd9818ed0414 | 6 | TextLCD lcd(PTE20, PTE21, PTE22, PTE23, PTE29, PTE30, TextLCD::LCD16x2); |
tgrgic1 | 0:bd9818ed0414 | 7 | Serial HC05(PTE0,PTE1); |
tgrgic1 | 0:bd9818ed0414 | 8 | I2C eeprom(PTC9, PTC8); |
tgrgic1 | 0:bd9818ed0414 | 9 | InterruptIn gumb1(D2); |
tgrgic1 | 0:bd9818ed0414 | 10 | InterruptIn gumb2(D3); |
tgrgic1 | 0:bd9818ed0414 | 11 | Serial pc(USBTX, USBRX); |
tgrgic1 | 0:bd9818ed0414 | 12 | |
tgrgic1 | 0:bd9818ed0414 | 13 | char kod[13], |
tgrgic1 | 0:bd9818ed0414 | 14 | primljeni_kod[13]="123456789012", |
tgrgic1 | 0:bd9818ed0414 | 15 | master_key[5] ="1234", |
tgrgic1 | 0:bd9818ed0414 | 16 | data_out[6], |
tgrgic1 | 0:bd9818ed0414 | 17 | check[2], |
tgrgic1 | 0:bd9818ed0414 | 18 | tempKey[5]; |
tgrgic1 | 0:bd9818ed0414 | 19 | |
tgrgic1 | 0:bd9818ed0414 | 20 | char a,b,lock; |
tgrgic1 | 0:bd9818ed0414 | 21 | int i; |
tgrgic1 | 0:bd9818ed0414 | 22 | |
tgrgic1 | 0:bd9818ed0414 | 23 | bool press = 0; |
tgrgic1 | 0:bd9818ed0414 | 24 | |
tgrgic1 | 0:bd9818ed0414 | 25 | void writeKey(int broj_znamenki, char array[]){ |
tgrgic1 | 0:bd9818ed0414 | 26 | if(b == 'a' && i>= 1){ |
tgrgic1 | 0:bd9818ed0414 | 27 | i--; |
tgrgic1 | 0:bd9818ed0414 | 28 | lcd.locate(i,1); |
tgrgic1 | 0:bd9818ed0414 | 29 | lcd.printf(" "); |
tgrgic1 | 0:bd9818ed0414 | 30 | array[i] = 0; |
tgrgic1 | 0:bd9818ed0414 | 31 | wait(0.2); |
tgrgic1 | 0:bd9818ed0414 | 32 | } |
tgrgic1 | 0:bd9818ed0414 | 33 | |
tgrgic1 | 0:bd9818ed0414 | 34 | else if(b == 'a' || b == 'b' || b == 'c') |
tgrgic1 | 0:bd9818ed0414 | 35 | return; |
tgrgic1 | 0:bd9818ed0414 | 36 | |
tgrgic1 | 0:bd9818ed0414 | 37 | else if(i == broj_znamenki){ |
tgrgic1 | 0:bd9818ed0414 | 38 | lcd.locate(i,1); |
tgrgic1 | 0:bd9818ed0414 | 39 | lcd.printf(" "); |
tgrgic1 | 0:bd9818ed0414 | 40 | wait(0.1); |
tgrgic1 | 0:bd9818ed0414 | 41 | } |
tgrgic1 | 0:bd9818ed0414 | 42 | else{ |
tgrgic1 | 0:bd9818ed0414 | 43 | lcd.locate(i,1); |
tgrgic1 | 0:bd9818ed0414 | 44 | lcd.printf("%c",b); |
tgrgic1 | 0:bd9818ed0414 | 45 | array[i] = b; |
tgrgic1 | 0:bd9818ed0414 | 46 | i++; |
tgrgic1 | 0:bd9818ed0414 | 47 | wait(0.2); |
tgrgic1 | 0:bd9818ed0414 | 48 | } |
tgrgic1 | 0:bd9818ed0414 | 49 | |
tgrgic1 | 0:bd9818ed0414 | 50 | if( i >= broj_znamenki){ |
tgrgic1 | 0:bd9818ed0414 | 51 | i = broj_znamenki; |
tgrgic1 | 0:bd9818ed0414 | 52 | } |
tgrgic1 | 0:bd9818ed0414 | 53 | } |
tgrgic1 | 0:bd9818ed0414 | 54 | |
tgrgic1 | 0:bd9818ed0414 | 55 | bool scanEnter(){ |
tgrgic1 | 0:bd9818ed0414 | 56 | if(b == 'b') return 1; |
tgrgic1 | 0:bd9818ed0414 | 57 | else return 0; |
tgrgic1 | 0:bd9818ed0414 | 58 | } |
tgrgic1 | 0:bd9818ed0414 | 59 | |
tgrgic1 | 0:bd9818ed0414 | 60 | void UnosKod(){ |
tgrgic1 | 0:bd9818ed0414 | 61 | a = 2;return; |
tgrgic1 | 0:bd9818ed0414 | 62 | } |
tgrgic1 | 0:bd9818ed0414 | 63 | |
tgrgic1 | 0:bd9818ed0414 | 64 | void UnosKey(){ |
tgrgic1 | 0:bd9818ed0414 | 65 | a = 4; |
tgrgic1 | 0:bd9818ed0414 | 66 | press = 1; |
tgrgic1 | 0:bd9818ed0414 | 67 | return; |
tgrgic1 | 0:bd9818ed0414 | 68 | } |
tgrgic1 | 0:bd9818ed0414 | 69 | |
tgrgic1 | 0:bd9818ed0414 | 70 | void buttonControl(bool stanje){ |
tgrgic1 | 0:bd9818ed0414 | 71 | if(!stanje){ |
tgrgic1 | 0:bd9818ed0414 | 72 | gumb1.fall(NULL);gumb2.fall(NULL);} |
tgrgic1 | 0:bd9818ed0414 | 73 | else{ |
tgrgic1 | 0:bd9818ed0414 | 74 | gumb1.fall(&UnosKod);gumb2.fall(&UnosKey);} |
tgrgic1 | 0:bd9818ed0414 | 75 | } |
tgrgic1 | 0:bd9818ed0414 | 76 | |
tgrgic1 | 0:bd9818ed0414 | 77 | void caseSet(char prvi[15],char drugi[15],bool stanje,char slucaj){ |
tgrgic1 | 0:bd9818ed0414 | 78 | buttonControl(stanje); |
tgrgic1 | 0:bd9818ed0414 | 79 | memset(kod,0,12); |
tgrgic1 | 0:bd9818ed0414 | 80 | memset(tempKey,0,4); |
tgrgic1 | 0:bd9818ed0414 | 81 | lcd.cls(); |
tgrgic1 | 0:bd9818ed0414 | 82 | lcd.locate(0,0); |
tgrgic1 | 0:bd9818ed0414 | 83 | lcd.printf("%s", prvi); |
tgrgic1 | 0:bd9818ed0414 | 84 | lcd.locate(0,1); |
tgrgic1 | 0:bd9818ed0414 | 85 | lcd.printf("%s", drugi); |
tgrgic1 | 0:bd9818ed0414 | 86 | a = slucaj; |
tgrgic1 | 0:bd9818ed0414 | 87 | i = 0; |
tgrgic1 | 0:bd9818ed0414 | 88 | } |
tgrgic1 | 0:bd9818ed0414 | 89 | |
tgrgic1 | 0:bd9818ed0414 | 90 | void getEEPROMData(){ |
tgrgic1 | 0:bd9818ed0414 | 91 | memset(master_key,0,4); |
tgrgic1 | 0:bd9818ed0414 | 92 | eeprom.write((0x50 << 1) & 0xFE,&data_out[0],1,true); |
tgrgic1 | 0:bd9818ed0414 | 93 | eeprom.read((0x50 << 1)| 0x01,master_key,4,false); |
tgrgic1 | 0:bd9818ed0414 | 94 | wait_ms(10); |
tgrgic1 | 0:bd9818ed0414 | 95 | |
tgrgic1 | 0:bd9818ed0414 | 96 | eeprom.write((0x50 << 1) & 0xFE,&check[0],1,true); |
tgrgic1 | 0:bd9818ed0414 | 97 | eeprom.read((0x50 << 1)| 0x01,&lock,1,false); |
tgrgic1 | 0:bd9818ed0414 | 98 | |
tgrgic1 | 0:bd9818ed0414 | 99 | if(lock){ |
tgrgic1 | 0:bd9818ed0414 | 100 | a = 4; |
tgrgic1 | 0:bd9818ed0414 | 101 | HC05.putc('N'); |
tgrgic1 | 0:bd9818ed0414 | 102 | |
tgrgic1 | 0:bd9818ed0414 | 103 | }else{ |
tgrgic1 | 0:bd9818ed0414 | 104 | a = 0; |
tgrgic1 | 0:bd9818ed0414 | 105 | HC05.putc('R'); |
tgrgic1 | 0:bd9818ed0414 | 106 | } |
tgrgic1 | 0:bd9818ed0414 | 107 | } |
tgrgic1 | 0:bd9818ed0414 | 108 | |
tgrgic1 | 0:bd9818ed0414 | 109 | void fun(){ |
tgrgic1 | 0:bd9818ed0414 | 110 | char temp = HC05.getc(); |
tgrgic1 | 0:bd9818ed0414 | 111 | if(temp == '?'){ |
tgrgic1 | 0:bd9818ed0414 | 112 | if(a != 4 || press == 1) |
tgrgic1 | 0:bd9818ed0414 | 113 | HC05.putc('R'); |
tgrgic1 | 0:bd9818ed0414 | 114 | else |
tgrgic1 | 0:bd9818ed0414 | 115 | HC05.putc('N'); |
tgrgic1 | 0:bd9818ed0414 | 116 | }else{ |
tgrgic1 | 0:bd9818ed0414 | 117 | |
tgrgic1 | 0:bd9818ed0414 | 118 | HC05.putc('?'); |
tgrgic1 | 0:bd9818ed0414 | 119 | |
tgrgic1 | 0:bd9818ed0414 | 120 | for(int i = 0; i<12; i++) |
tgrgic1 | 0:bd9818ed0414 | 121 | primljeni_kod[i] =HC05.getc(); |
tgrgic1 | 0:bd9818ed0414 | 122 | |
tgrgic1 | 0:bd9818ed0414 | 123 | //pc.printf("%s\n\r",primljeni_kod); |
tgrgic1 | 0:bd9818ed0414 | 124 | } |
tgrgic1 | 0:bd9818ed0414 | 125 | } |
tgrgic1 | 0:bd9818ed0414 | 126 | |
tgrgic1 | 0:bd9818ed0414 | 127 | int main(){ |
tgrgic1 | 0:bd9818ed0414 | 128 | |
tgrgic1 | 0:bd9818ed0414 | 129 | int n = 0; |
tgrgic1 | 0:bd9818ed0414 | 130 | data_out[0]= 0x94; |
tgrgic1 | 0:bd9818ed0414 | 131 | check[0]= 0x80; |
tgrgic1 | 0:bd9818ed0414 | 132 | |
tgrgic1 | 0:bd9818ed0414 | 133 | HC05.baud(9600); |
tgrgic1 | 0:bd9818ed0414 | 134 | HC05.attach(&fun,Serial::RxIrq); |
tgrgic1 | 0:bd9818ed0414 | 135 | eeprom.frequency(100000); |
tgrgic1 | 0:bd9818ed0414 | 136 | getEEPROMData(); |
tgrgic1 | 0:bd9818ed0414 | 137 | |
tgrgic1 | 0:bd9818ed0414 | 138 | for(int j=0; j<4; j++) |
tgrgic1 | 0:bd9818ed0414 | 139 | lcd.printf("%c",master_key[j]); |
tgrgic1 | 0:bd9818ed0414 | 140 | wait(1); |
tgrgic1 | 0:bd9818ed0414 | 141 | |
tgrgic1 | 0:bd9818ed0414 | 142 | while(1) { |
tgrgic1 | 0:bd9818ed0414 | 143 | switch(a) { |
tgrgic1 | 0:bd9818ed0414 | 144 | default: |
tgrgic1 | 0:bd9818ed0414 | 145 | tipkovnica.cetvrtiStupac(); |
tgrgic1 | 0:bd9818ed0414 | 146 | caseSet(" Skener"," koda",1,1); |
tgrgic1 | 0:bd9818ed0414 | 147 | break; |
tgrgic1 | 0:bd9818ed0414 | 148 | |
tgrgic1 | 0:bd9818ed0414 | 149 | case 1: |
tgrgic1 | 0:bd9818ed0414 | 150 | break; |
tgrgic1 | 0:bd9818ed0414 | 151 | |
tgrgic1 | 0:bd9818ed0414 | 152 | case 2: |
tgrgic1 | 0:bd9818ed0414 | 153 | caseSet("Unesite kod:","",0,0); |
tgrgic1 | 0:bd9818ed0414 | 154 | while(1) { |
tgrgic1 | 0:bd9818ed0414 | 155 | |
tgrgic1 | 0:bd9818ed0414 | 156 | b = tipkovnica.keyscan(); |
tgrgic1 | 0:bd9818ed0414 | 157 | if(b == 'c') break; |
tgrgic1 | 0:bd9818ed0414 | 158 | writeKey(12,kod); |
tgrgic1 | 0:bd9818ed0414 | 159 | |
tgrgic1 | 0:bd9818ed0414 | 160 | if(scanEnter() && kod[0] != '\0') { |
tgrgic1 | 0:bd9818ed0414 | 161 | |
tgrgic1 | 0:bd9818ed0414 | 162 | if(memcmp(primljeni_kod, kod, 12) == 0) { |
tgrgic1 | 0:bd9818ed0414 | 163 | lcd.cls(); |
tgrgic1 | 0:bd9818ed0414 | 164 | lcd.printf("Tocno!"); |
tgrgic1 | 0:bd9818ed0414 | 165 | memset(primljeni_kod,0,12); |
tgrgic1 | 0:bd9818ed0414 | 166 | n = 0; |
tgrgic1 | 0:bd9818ed0414 | 167 | wait(2); |
tgrgic1 | 0:bd9818ed0414 | 168 | } else { |
tgrgic1 | 0:bd9818ed0414 | 169 | n++; |
tgrgic1 | 0:bd9818ed0414 | 170 | lcd.cls(); |
tgrgic1 | 0:bd9818ed0414 | 171 | lcd.printf("Krivo!"); |
tgrgic1 | 0:bd9818ed0414 | 172 | wait(2); |
tgrgic1 | 0:bd9818ed0414 | 173 | } |
tgrgic1 | 0:bd9818ed0414 | 174 | |
tgrgic1 | 0:bd9818ed0414 | 175 | if(n == 3){ |
tgrgic1 | 0:bd9818ed0414 | 176 | n = 0; |
tgrgic1 | 0:bd9818ed0414 | 177 | check[1] = 1; |
tgrgic1 | 0:bd9818ed0414 | 178 | eeprom.write(0x50 << 1,check,2,false); |
tgrgic1 | 0:bd9818ed0414 | 179 | a = 4; |
tgrgic1 | 0:bd9818ed0414 | 180 | HC05.putc('N'); |
tgrgic1 | 0:bd9818ed0414 | 181 | } |
tgrgic1 | 0:bd9818ed0414 | 182 | break; |
tgrgic1 | 0:bd9818ed0414 | 183 | } |
tgrgic1 | 0:bd9818ed0414 | 184 | } |
tgrgic1 | 0:bd9818ed0414 | 185 | break; |
tgrgic1 | 0:bd9818ed0414 | 186 | |
tgrgic1 | 0:bd9818ed0414 | 187 | case 3: |
tgrgic1 | 0:bd9818ed0414 | 188 | caseSet("Promjeni M.key:","",0,0); |
tgrgic1 | 0:bd9818ed0414 | 189 | while(1) { |
tgrgic1 | 0:bd9818ed0414 | 190 | |
tgrgic1 | 0:bd9818ed0414 | 191 | b = tipkovnica.keyscan(); |
tgrgic1 | 0:bd9818ed0414 | 192 | if(b == 'c') break; |
tgrgic1 | 0:bd9818ed0414 | 193 | writeKey(4,kod); |
tgrgic1 | 0:bd9818ed0414 | 194 | |
tgrgic1 | 0:bd9818ed0414 | 195 | if(scanEnter() && kod[3] != '\0') { |
tgrgic1 | 0:bd9818ed0414 | 196 | memmove(master_key,kod,4); |
tgrgic1 | 0:bd9818ed0414 | 197 | for(int j = 0; j<4; j++) { |
tgrgic1 | 0:bd9818ed0414 | 198 | data_out[j+1] = master_key[j]; |
tgrgic1 | 0:bd9818ed0414 | 199 | } |
tgrgic1 | 0:bd9818ed0414 | 200 | eeprom.write(0x50 << 1,data_out,5,false); |
tgrgic1 | 0:bd9818ed0414 | 201 | wait_ms(10); |
tgrgic1 | 0:bd9818ed0414 | 202 | break; |
tgrgic1 | 0:bd9818ed0414 | 203 | } |
tgrgic1 | 0:bd9818ed0414 | 204 | } |
tgrgic1 | 0:bd9818ed0414 | 205 | break; |
tgrgic1 | 0:bd9818ed0414 | 206 | |
tgrgic1 | 0:bd9818ed0414 | 207 | case 4: |
tgrgic1 | 0:bd9818ed0414 | 208 | caseSet("Unesite M.key:","",0,4); |
tgrgic1 | 0:bd9818ed0414 | 209 | while(1) { |
tgrgic1 | 0:bd9818ed0414 | 210 | |
tgrgic1 | 0:bd9818ed0414 | 211 | b = tipkovnica.keyscan(); |
tgrgic1 | 0:bd9818ed0414 | 212 | if(b == 'c'){ |
tgrgic1 | 0:bd9818ed0414 | 213 | if(press){a = 0; press = 0; break;} |
tgrgic1 | 0:bd9818ed0414 | 214 | else |
tgrgic1 | 0:bd9818ed0414 | 215 | continue; |
tgrgic1 | 0:bd9818ed0414 | 216 | } |
tgrgic1 | 0:bd9818ed0414 | 217 | writeKey(4,tempKey); |
tgrgic1 | 0:bd9818ed0414 | 218 | |
tgrgic1 | 0:bd9818ed0414 | 219 | if(scanEnter() && tempKey[3] != '\0') { |
tgrgic1 | 0:bd9818ed0414 | 220 | if(memcmp(master_key, tempKey, 4) == 0) { |
tgrgic1 | 0:bd9818ed0414 | 221 | if(press){a = 3; press = 0; break;} |
tgrgic1 | 0:bd9818ed0414 | 222 | check[1] = 0; |
tgrgic1 | 0:bd9818ed0414 | 223 | eeprom.write(0x50 << 1,check,2,false); |
tgrgic1 | 0:bd9818ed0414 | 224 | a =0; |
tgrgic1 | 0:bd9818ed0414 | 225 | HC05.putc('R'); |
tgrgic1 | 0:bd9818ed0414 | 226 | } else { |
tgrgic1 | 0:bd9818ed0414 | 227 | if(press){a = 0; press = 0; break;} |
tgrgic1 | 0:bd9818ed0414 | 228 | a = 4; |
tgrgic1 | 0:bd9818ed0414 | 229 | } |
tgrgic1 | 0:bd9818ed0414 | 230 | break; |
tgrgic1 | 0:bd9818ed0414 | 231 | } |
tgrgic1 | 0:bd9818ed0414 | 232 | } |
tgrgic1 | 0:bd9818ed0414 | 233 | break; |
tgrgic1 | 0:bd9818ed0414 | 234 | } |
tgrgic1 | 0:bd9818ed0414 | 235 | } |
tgrgic1 | 0:bd9818ed0414 | 236 | } |