test

Dependencies:   mbed TextLCD

Committer:
tgrgic1
Date:
Mon May 03 21:42:36 2021 +0000
Revision:
0:bd9818ed0414
1

Who changed what in which revision?

UserRevisionLine numberNew 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 }