
test
Diff: main.cpp
- Revision:
- 0:bd9818ed0414
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon May 03 21:42:36 2021 +0000 @@ -0,0 +1,236 @@ +#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; + } + } +}