test

Dependencies:   mbed TextLCD

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }