Keypad kullanimi
Dependencies: mbed mbed-rtos MFRC522 TextLCD keypad
Diff: main.cpp
- Revision:
- 2:e0df3db0da50
- Parent:
- 1:2fd11c224867
- Child:
- 3:03b1e1ac067d
diff -r 2fd11c224867 -r e0df3db0da50 main.cpp --- a/main.cpp Mon Oct 14 07:12:08 2019 +0000 +++ b/main.cpp Tue Oct 15 08:23:48 2019 +0000 @@ -1,83 +1,179 @@ #include "mbed.h" #include "Keypad.h" #include "TextLCD.h" - +#include "MFRC522.h" +#include "rtos.h" +Thread is1,is2; +Timer sure; +DigitalOut led(D13); TextLCD lcd(D11, D12, D7, D8, D9, D10); // rs, e, d4-d7 Keypad key(PC_4, PB_13, PB_14, PB_15, PB_1, PB_2, PB_12, PA_11); - +void ekran(); +void kartokuma(); char key_table[] = { -'1', '2', '3', '+', -'4', '5', '6', '-', -'7', '8', '9', '*', -'C', '0', '=', '/' +'1', '2', '3', 'A', +'4', '5', '6', 'B', +'7', '8', '9', 'C', +'C', '0', '#', 'D' }; Serial pc(USBTX,USBRX); -char islem; -float sayi=0,sayi2=0;; -float sonuc=0; -int main() +char sifre[6]; +char sayac=0,yanlis=0; +bool kontrol=false; +//rfid +#define SPI_MOSI D4 +#define SPI_MISO D5 +#define SPI_SCLK D3//SCK +//sda ve rst pinleri farketmez +#define SPI_CS D6//SDA +// KL25Z Pin for MFRC522 reset +#define MF_RESET D2//Rst pini + +MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_CS, MF_RESET); + + +void kartokuma() { -pc.baud(250000); -uint32_t key_num; -while(true) { -if ((key_num = key.read()) != 0) { -lcd.printf("%c",*(key_table + key_num-1)); -pc.printf("%c \n", *(key_table + key_num-1)); +// Init. RC522 Chip +RfChip.PCD_Init(); + +while (true) { + + +// Look for new cards +if ( ! RfChip.PICC_IsNewCardPresent()) +{ +wait_ms(500); +continue; +} + + +// Select one of the cards +if ( ! RfChip.PICC_ReadCardSerial()) +{ +wait_ms(500); +continue; } -switch(*(key_table + key_num-1)) { -case '0'...'9'://0'dan 9'a kadar sayılara basıldığı zaman işlem yapar -sayi= sayi*10 + (*(key_table + key_num-1)- '0'); -break; -case '+'://toplama işlemi -sayi2=sayi; -sayi=0; -islem='+'; -break; -case '-'://çıkarma işlemi -sayi2=sayi; -sayi=0; -islem='-'; -break; -case '*'://çarpma işlemi -sayi2=sayi; -sayi=0; -islem='*'; -break; -case '/'://bolme işlemi -sayi2=sayi; -sayi=0; -islem='/'; -break; -case '='://eşittir +// Print Card UID +printf("Kart ID: "); +for (uint8_t i = 0; i < RfChip.uid.size; i++) +{ +printf(" %X ", RfChip.uid.uidByte[i]);//Hex kodunu verir + +} +if(RfChip.uid.uidByte[0]==0x73 && RfChip.uid.uidByte[1]==0x85 && RfChip.uid.uidByte[2]==0x3F +&& RfChip.uid.uidByte[3]==0x25) +{ +lcd.cls(); +lcd.printf("Giris Basarili"); +led=1; +wait(3); +ekran(); +sayac=0; +led=0; +yanlis=0; +} +else +{ +lcd.cls(); +lcd.printf("Gecersiz Kart !!"); +wait(3); +ekran(); +} +printf("\n\r"); + +// Print Card type +uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak); +printf("Kart Tipi: %s \n\r", RfChip.PICC_GetTypeName(piccType)); +} +} +//rfid + +void ekran() +{ +lcd.cls(); +lcd.locate(0,0);//1. satır 1. digit +lcd.printf("Sifre:"); + +//dizi içeriğini temizlemek için kullanıldı +for(char temizle=0; temizle<6; temizle++) { +sifre[temizle]=0; +} +} -if(islem=='+') -sonuc=sayi2+sayi; -else if(islem=='-') -sonuc=sayi2-sayi; -else if(islem=='*') -sonuc=sayi2*sayi; -else if(islem=='/') -sonuc=sayi2/sayi; +void saat() +{ + while(true) + { + for(unsigned char saat=0;saat<12;saat++) + { + for(unsigned char dakika=0;dakika<60;dakika++) + { + for(unsigned char saniye=0;saniye<60;saniye++) + { + lcd.locate(0,1); + lcd.printf("%.2d:%.2d:%.2d",saat,dakika,saniye); + wait(1); + } + } + } + } + } -pc.printf("%f \n",sonuc); -lcd.printf("%.3f",sonuc); -//değişken içeriğini temizle -//değişken içeriği temzilenmezse bir sonraki işlemde kullanılır +int main() +{ + is1.start(saat); +ekran(); +pc.baud(250000); +uint32_t key_num; + +while(true) { + +kartokuma(); -sayi=0; -sayi2=0; -sonuc=0; -break; -case 'C': +if ((key_num = key.read()) != 0 && sure.read()==0 && kontrol==false){ +lcd.printf("*"); +sifre[sayac]=*(key_table + key_num-1); +sayac++; +} +if(sifre[0]=='1' && sifre[1]=='2' && sifre[2]=='3' +&& sifre[3]=='A' && sifre[4]=='B' && sifre[5]=='C') { +lcd.cls(); +lcd.printf("Giris Basarili"); +led=1; +wait(3); +ekran(); +sayac=0; +led=0; +yanlis=0; +} else if(sayac>5) { + +kontrol=true; +sayac=0; lcd.cls(); -//değişken içeriğini temizle -//değişken içeriği temzilenmezse bir sonraki işlemde kullanılır -sayi=0; -sayi2=0; -sonuc=0; -break; - +lcd.printf("Sifre yanlis"); +wait(3); +kontrol=false; +yanlis++; +if(yanlis>2) { +sure.start(); +lcd.cls(); +lcd.printf("Sistem Kitlendi"); +while(sure.read()<60) { +lcd.locate(0,1); +lcd.printf("%.0f",sure.read()); +led=1; +wait_ms(500); +led=0; +wait_ms(500); +} +yanlis=0; +sure.reset();//timer 0 snye çeker +sure.stop(); +//sure.stop();//timer durur +} +ekran(); }