Keypad kullanimi

Dependencies:   mbed mbed-rtos MFRC522 TextLCD keypad

Revision:
2:e0df3db0da50
Parent:
1:2fd11c224867
Child:
3:03b1e1ac067d
--- 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();
 }