test
Embed:
(wiki syntax)
Show/hide line numbers
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