
test
main.cpp
- Committer:
- tgrgic1
- Date:
- 2021-05-03
- Revision:
- 1:99789490f61e
- Parent:
- 0:bd9818ed0414
File content as of revision 1:99789490f61e:
#include "mbed.h" #include "TextLCD.h" #include "Keypad.h" Keypad tipkovnica(D2,D3,D4,D5,D8,D9,D10,D11); TextLCD lcd(PTE20, PTE21, PTE22, PTE23, PTE29, PTE30, TextLCD::LCD16x2); Serial HC05(PTE0,PTE1); I2C eeprom(PTC9, PTC8); InterruptIn gumb1(D2); InterruptIn gumb2(D3); Serial pc(USBTX, USBRX); char kod[13], primljeni_kod[13]="123456789012", master_key[5] ="1234", data_out[6], check[2], tempKey[5]; char a,b,lock; int i; bool press = 0; void writeKey(int broj_znamenki, char array[]){ if(b == 'a' && i>= 1){ i--; lcd.locate(i,1); lcd.printf(" "); array[i] = 0; wait(0.2); } else if(b == 'a' || b == 'b' || b == 'c') return; else if(i == broj_znamenki){ lcd.locate(i,1); lcd.printf(" "); wait(0.1); } else{ lcd.locate(i,1); lcd.printf("%c",b); array[i] = b; i++; wait(0.2); } if( i >= broj_znamenki){ i = broj_znamenki; } } bool scanEnter(){ if(b == 'b') return 1; else return 0; } void UnosKod(){ a = 2;return; } void UnosKey(){ a = 4; press = 1; return; } void buttonControl(bool stanje){ if(!stanje){ gumb1.fall(NULL);gumb2.fall(NULL);} else{ gumb1.fall(&UnosKod);gumb2.fall(&UnosKey);} } void caseSet(char prvi[15],char drugi[15],bool stanje,char slucaj){ buttonControl(stanje); memset(kod,0,12); memset(tempKey,0,4); lcd.cls(); lcd.locate(0,0); lcd.printf("%s", prvi); lcd.locate(0,1); lcd.printf("%s", drugi); a = slucaj; i = 0; } void getEEPROMData(){ memset(master_key,0,4); eeprom.write((0x50 << 1) & 0xFE,&data_out[0],1,true); eeprom.read((0x50 << 1)| 0x01,master_key,4,false); wait_ms(10); eeprom.write((0x50 << 1) & 0xFE,&check[0],1,true); eeprom.read((0x50 << 1)| 0x01,&lock,1,false); if(lock){ a = 4; HC05.putc('N'); }else{ a = 0; HC05.putc('R'); } } void fun(){ char temp = HC05.getc(); if(temp == '?'){ if(a != 4 || press == 1) HC05.putc('R'); else HC05.putc('N'); }else{ HC05.putc('?'); for(int i = 0; i<12; i++) primljeni_kod[i] =HC05.getc(); //pc.printf("%s\n\r",primljeni_kod); } } int main(){ int n = 0; data_out[0]= 0x94; check[0]= 0x80; HC05.baud(9600); HC05.attach(&fun,Serial::RxIrq); eeprom.frequency(100000); getEEPROMData(); for(int j=0; j<4; j++) lcd.printf("%c",master_key[j]); wait(1); while(1) { switch(a) { default: tipkovnica.cetvrtiStupac(); caseSet(" Skener"," koda",1,1); break; case 1: break; case 2: caseSet("Unesite kod:","",0,0); while(1) { b = tipkovnica.keyscan(); if(b == 'c') break; writeKey(12,kod); if(scanEnter() && kod[0] != '\0') { if(memcmp(primljeni_kod, kod, 12) == 0) { lcd.cls(); lcd.printf("Tocno!"); memset(primljeni_kod,0,12); n = 0; wait(2); } else { n++; lcd.cls(); lcd.printf("Krivo!"); wait(2); } if(n == 3){ n = 0; check[1] = 1; eeprom.write(0x50 << 1,check,2,false); a = 4; HC05.putc('N'); } break; } } break; case 3: caseSet("Promjeni M.key:","",0,0); while(1) { b = tipkovnica.keyscan(); if(b == 'c') break; writeKey(4,kod); if(scanEnter() && kod[3] != '\0') { memmove(master_key,kod,4); for(int j = 0; j<4; j++) { data_out[j+1] = master_key[j]; } eeprom.write(0x50 << 1,data_out,5,false); wait_ms(10); break; } } break; case 4: caseSet("Unesite M.key:","",0,4); while(1) { b = tipkovnica.keyscan(); if(b == 'c'){ if(press){a = 0; press = 0; break;} else continue; } writeKey(4,tempKey); if(scanEnter() && tempKey[3] != '\0') { if(memcmp(master_key, tempKey, 4) == 0) { if(press){a = 3; press = 0; break;} check[1] = 0; eeprom.write(0x50 << 1,check,2,false); a =0; HC05.putc('R'); } else { if(press){a = 0; press = 0; break;} a = 4; } break; } } break; } } }