Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 #include "mbed.h" 00002 #include "TextLCD.h" 00003 #include "Keypad.h" 00004 00005 Keypad tipkovnica(D2,D3,D4,D5,D8,D9,D10,D11); 00006 TextLCD lcd(PTE20, PTE21, PTE22, PTE23, PTE29, PTE30, TextLCD::LCD16x2); 00007 Serial HC05(PTE0,PTE1); 00008 I2C eeprom(PTC9, PTC8); 00009 InterruptIn gumb1(D2); 00010 InterruptIn gumb2(D3); 00011 Serial pc(USBTX, USBRX); 00012 00013 char kod[13], 00014 primljeni_kod[13]="123456789012", 00015 master_key[5] ="1234", 00016 data_out[6], 00017 check[2], 00018 tempKey[5]; 00019 00020 char a,b,lock; 00021 int i; 00022 00023 bool press = 0; 00024 00025 void writeKey(int broj_znamenki, char array[]){ 00026 if(b == 'a' && i>= 1){ 00027 i--; 00028 lcd.locate(i,1); 00029 lcd.printf(" "); 00030 array[i] = 0; 00031 wait(0.2); 00032 } 00033 00034 else if(b == 'a' || b == 'b' || b == 'c') 00035 return; 00036 00037 else if(i == broj_znamenki){ 00038 lcd.locate(i,1); 00039 lcd.printf(" "); 00040 wait(0.1); 00041 } 00042 else{ 00043 lcd.locate(i,1); 00044 lcd.printf("%c",b); 00045 array[i] = b; 00046 i++; 00047 wait(0.2); 00048 } 00049 00050 if( i >= broj_znamenki){ 00051 i = broj_znamenki; 00052 } 00053 } 00054 00055 bool scanEnter(){ 00056 if(b == 'b') return 1; 00057 else return 0; 00058 } 00059 00060 void UnosKod(){ 00061 a = 2;return; 00062 } 00063 00064 void UnosKey(){ 00065 a = 4; 00066 press = 1; 00067 return; 00068 } 00069 00070 void buttonControl(bool stanje){ 00071 if(!stanje){ 00072 gumb1.fall(NULL);gumb2.fall(NULL);} 00073 else{ 00074 gumb1.fall(&UnosKod);gumb2.fall(&UnosKey);} 00075 } 00076 00077 void caseSet(char prvi[15],char drugi[15],bool stanje,char slucaj){ 00078 buttonControl(stanje); 00079 memset(kod,0,12); 00080 memset(tempKey,0,4); 00081 lcd.cls(); 00082 lcd.locate(0,0); 00083 lcd.printf("%s", prvi); 00084 lcd.locate(0,1); 00085 lcd.printf("%s", drugi); 00086 a = slucaj; 00087 i = 0; 00088 } 00089 00090 void getEEPROMData(){ 00091 memset(master_key,0,4); 00092 eeprom.write((0x50 << 1) & 0xFE,&data_out[0],1,true); 00093 eeprom.read((0x50 << 1)| 0x01,master_key,4,false); 00094 wait_ms(10); 00095 00096 eeprom.write((0x50 << 1) & 0xFE,&check[0],1,true); 00097 eeprom.read((0x50 << 1)| 0x01,&lock,1,false); 00098 00099 if(lock){ 00100 a = 4; 00101 HC05.putc('N'); 00102 00103 }else{ 00104 a = 0; 00105 HC05.putc('R'); 00106 } 00107 } 00108 00109 void fun(){ 00110 char temp = HC05.getc(); 00111 if(temp == '?'){ 00112 if(a != 4 || press == 1) 00113 HC05.putc('R'); 00114 else 00115 HC05.putc('N'); 00116 }else{ 00117 00118 HC05.putc('?'); 00119 00120 for(int i = 0; i<12; i++) 00121 primljeni_kod[i] =HC05.getc(); 00122 00123 //pc.printf("%s\n\r",primljeni_kod); 00124 } 00125 } 00126 00127 int main(){ 00128 00129 int n = 0; 00130 data_out[0]= 0x94; 00131 check[0]= 0x80; 00132 00133 HC05.baud(9600); 00134 HC05.attach(&fun,Serial::RxIrq); 00135 eeprom.frequency(100000); 00136 getEEPROMData(); 00137 00138 for(int j=0; j<4; j++) 00139 lcd.printf("%c",master_key[j]); 00140 wait(1); 00141 00142 while(1) { 00143 switch(a) { 00144 default: 00145 tipkovnica.cetvrtiStupac(); 00146 caseSet(" Skener"," koda",1,1); 00147 break; 00148 00149 case 1: 00150 break; 00151 00152 case 2: 00153 caseSet("Unesite kod:","",0,0); 00154 while(1) { 00155 00156 b = tipkovnica.keyscan(); 00157 if(b == 'c') break; 00158 writeKey(12,kod); 00159 00160 if(scanEnter() && kod[0] != '\0') { 00161 00162 if(memcmp(primljeni_kod, kod, 12) == 0) { 00163 lcd.cls(); 00164 lcd.printf("Tocno!"); 00165 memset(primljeni_kod,0,12); 00166 n = 0; 00167 wait(2); 00168 } else { 00169 n++; 00170 lcd.cls(); 00171 lcd.printf("Krivo!"); 00172 wait(2); 00173 } 00174 00175 if(n == 3){ 00176 n = 0; 00177 check[1] = 1; 00178 eeprom.write(0x50 << 1,check,2,false); 00179 a = 4; 00180 HC05.putc('N'); 00181 } 00182 break; 00183 } 00184 } 00185 break; 00186 00187 case 3: 00188 caseSet("Promjeni M.key:","",0,0); 00189 while(1) { 00190 00191 b = tipkovnica.keyscan(); 00192 if(b == 'c') break; 00193 writeKey(4,kod); 00194 00195 if(scanEnter() && kod[3] != '\0') { 00196 memmove(master_key,kod,4); 00197 for(int j = 0; j<4; j++) { 00198 data_out[j+1] = master_key[j]; 00199 } 00200 eeprom.write(0x50 << 1,data_out,5,false); 00201 wait_ms(10); 00202 break; 00203 } 00204 } 00205 break; 00206 00207 case 4: 00208 caseSet("Unesite M.key:","",0,4); 00209 while(1) { 00210 00211 b = tipkovnica.keyscan(); 00212 if(b == 'c'){ 00213 if(press){a = 0; press = 0; break;} 00214 else 00215 continue; 00216 } 00217 writeKey(4,tempKey); 00218 00219 if(scanEnter() && tempKey[3] != '\0') { 00220 if(memcmp(master_key, tempKey, 4) == 0) { 00221 if(press){a = 3; press = 0; break;} 00222 check[1] = 0; 00223 eeprom.write(0x50 << 1,check,2,false); 00224 a =0; 00225 HC05.putc('R'); 00226 } else { 00227 if(press){a = 0; press = 0; break;} 00228 a = 4; 00229 } 00230 break; 00231 } 00232 } 00233 break; 00234 } 00235 } 00236 }
Generated on Sun Nov 27 2022 18:55:52 by
1.7.2