#include <SPI.h> // Dahili SPI kütüphanesi #include <MFRC522.h> // v1.4.9 #define reset 9 // Reset pini #define ss 10 // SS pin MFRC522 kartOkuyucu(ss, reset); // kartOkuyucu isimli nesne oluşturuldu. byte i, j, k; byte kartSayisi = 2; //Kart sayısı doğru girilmelidir. byte kartlar[][4] = { {0xA6, 0x06, 0x1E, 0xF9}, // ilk kartın dört byte'lık ID'si HEX olarak tanımlandı. {0xA6, 0x06, 0x1E, 0xF8}, // ikinci kart... }; void setup() { Serial.begin(9600); //Bilgisayarın seri ekranıyla UART iletişimi. SPI.begin(); // MFRC522 kart okuyucusuyla SPI iletişimi. kartOkuyucu.PCD_Init(); // MFRC522'yi başlat Serial.println("Lütfen kartı okutunuz."); pinMode(4, OUTPUT); // Buzzer. pinMode(6, OUTPUT); // Step motor pinleri. pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); } void loop() { if ( ! kartOkuyucu.PICC_IsNewCardPresent()) //Bir kart okunana kadar bekle. return; if ( ! kartOkuyucu.PICC_ReadCardSerial()) // Kartı oku. return; if (kartKontrol()) { // Kart geçerliyse yapılacaklar... Serial.println("Kart geçerli."); digitalWrite(4, 1); // Buzzer bir saniye çalar. delay(1000); digitalWrite(4, 0); stepMotor(); // Step motor çalıştıran fonksiyonu çağır. } else { // Kart geçerli değilse yapılacaklar... for (i = 0; i < 4; i++) { Serial.print(kartOkuyucu.uid.uidByte[i], HEX); //Geçersiz kartın ID'sini ekrana yazdır. Serial.print(" "); } Serial.println(" numaralı kartınız sisteme tanımlı değil!"); digitalWrite(4, 1); // Geçersiz kart için buzzer sesi. delay(200); digitalWrite(4, 0); delay(200); digitalWrite(4, 1); delay(200); digitalWrite(4, 0); } delay(500); Serial.println("\n Lütfen kartı okutunuz."); } boolean kartKontrol() { // Kart geçerliye 1, değilse 0 döndürür. k = 0; for (j = 0; j < kartSayisi; j++) { // Kayıtlı tüm kartlara bak. for (i = 0; i < 4; i++) { // Her kartın ID'si dört byte. if (kartlar[j][i] == kartOkuyucu.uid.uidByte[i]) {//Okunan kartı kayıtlı olanlarla karşılaştır. k++; if (k == 4) { // Tüm byte'lar doğrulandıysa... return 1; // 1 döndür. } } } } return 0; // Okunan kart kayıtlı kartlarla eşleşmediyse 0 döndür. } void stepMotor() { // Step motor Yaklaşık 90° döner. int x, adimSayisi = 500, sure = 2; for (x = 0; x < adimSayisi / 4; x++) { for (byte i = 6; i <= 9; i++) { //Sağa dön. digitalWrite(i, 1); delay(sure); digitalWrite(i, 0); } } delay(1000); // Kapı açık kalma süresi. for (x = 0; x < adimSayisi / 4; x++) { for (byte i = 9; i >= 6; i--) { //Sola dön. digitalWrite(i, 1); delay(sure); digitalWrite(i, 0); } } }
Categories:
Tags:
No responses yet