RFID Kart Okuyucuya Birden Fazla Kart Ekleme

Robotistanın Rfıd kart modülü ile kapı yapımı videonusunu izledim ve başarılı bir şekilde yaptım ama tek takıldığım nokta birden fazla kartı nasıl ekleyeceğim oldu her yerde araştırdım bulamadım. Lütfen yardım edebilir misiniz? Örnek kodunuz var mı??

1 Beğeni

Merhaba,
Kodda kartı byte ID1[4] = {4, 90, 47, 193}; olarak tanımladım. Burda 1. kart ID, 2.kart ID1 olarak tanımladım. Siz bu şekilde yeni kart tanımlayabilirsiniz. Gelgelelim eğer bu kart doğru ise kapıyı aç komutuna. Bunun için ilk başta kartı okumamız gerekiyor.
1.kartı şu şekilde okuyup kapıyı açtım;

if (rfid.uid.uidByte[0] == ID[0] &&     //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
    rfid.uid.uidByte[1] == ID[1] && 
    rfid.uid.uidByte[2] == ID[2] && 
    rfid.uid.uidByte[3] == ID[3] ) {
        Serial.println("Kapi acildi");
        ekranaYazdir();
        motor.write(180);                 //Servo motoru 180 dereceye getiriyoruz.
        delay(3000);
        motor.write(0);                   //Servo motoru 0 dereceye getiriyoruz.
        delay(1000);
    }

2.kartı şu şekilde okuyup kapıyı açtım;

else if (rfid.uid.uidByte[0] == ID1[0] &&     //Okunan 2.kart ID'si ile ID değişkenini karşılaştırıyoruz.
    rfid.uid.uidByte[1] == ID1[1] && 
    rfid.uid.uidByte[2] == ID1[2] && 
    rfid.uid.uidByte[3] == ID1[3] ) {
        Serial.println("Kapi acildi");
        ekranaYazdir();
        motor.write(180);                 //Servo motoru 180 dereceye getiriyoruz.
        delay(3000);
        motor.write(0);                   //Servo motoru 0 dereceye getiriyoruz.
        delay(1000);
    }

Burda dikkat etmemiz gereken nokta okurken ID1 olarak okudum. Sizde bu şekilde else if koyarak daha fazla kartı okuyabilirsiniz.
Kart yanlış ise else şeklinde komut oluşturdum. Bu komut tüm kartlar okunduktan sonra en sonuna ekleyeceğiz.

else{                                 //Yetkisiz girişte içerideki komutlar çalıştırılır.
      Serial.println("Yetkisiz Kart");
      ekranaYazdir();
    }

Tüm Kodlar

#include <SPI.h>       //SPI kütüphanemizi tanımlıyoruz.
#include <MFRC522.h>   //MFRC522 kütüphanemizi tanımlıyoruz.
#include <Servo.h>     //Servo kütüphanemizi tanımlıyoruz.

int RST_PIN = 9;       //RC522 modülü reset pinini tanımlıyoruz.
int SS_PIN = 10;       //RC522 modülü chip select pinini tanımlıyoruz.
int servoPin = 8;      //Servo motor pinini tanımlıyoruz.

Servo motor;                        //Servo motor için değişken oluşturuyoruz.
MFRC522 rfid(SS_PIN, RST_PIN);      //RC522 modülü ayarlarını yapıyoruz.
byte ID[4] = {41, 46, 56, 86};      //Yetkili kart ID'sini tanımlıyoruz. 
byte ID1[4] = {4, 90, 47, 193};     //2. Yetkili kart ID'sini tanımlıyoruz. 
void setup() { 
  motor.attach(servoPin);     //Servo motor pinini motor değişkeni ile ilişkilendiriyoruz.
  Serial.begin(9600);         //Seri haberleşmeyi başlatıyoruz.
  SPI.begin();                //SPI iletişimini başlatıyoruz.
  rfid.PCD_Init();            //RC522 modülünü başlatıyoruz.
}
 
void loop() {

  if ( ! rfid.PICC_IsNewCardPresent())    //Yeni kartın okunmasını bekliyoruz.
    return;

  if ( ! rfid.PICC_ReadCardSerial())      //Kart okunmadığı zaman bekliyoruz.
    return;

  if (rfid.uid.uidByte[0] == ID[0] &&     //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
    rfid.uid.uidByte[1] == ID[1] && 
    rfid.uid.uidByte[2] == ID[2] && 
    rfid.uid.uidByte[3] == ID[3] ) {
        Serial.println("Kapi acildi");
        ekranaYazdir();
        motor.write(180);                 //Servo motoru 180 dereceye getiriyoruz.
        delay(3000);
        motor.write(0);                   //Servo motoru 0 dereceye getiriyoruz.
        delay(1000);
    }

    else if (rfid.uid.uidByte[0] == ID1[0] &&     //Okunan 2.kart ID'si ile ID değişkenini karşılaştırıyoruz.
    rfid.uid.uidByte[1] == ID1[1] && 
    rfid.uid.uidByte[2] == ID1[2] && 
    rfid.uid.uidByte[3] == ID1[3] ) {
        Serial.println("Kapi acildi");
        ekranaYazdir();
        motor.write(180);                 //Servo motoru 180 dereceye getiriyoruz.
        delay(3000);
        motor.write(0);                   //Servo motoru 0 dereceye getiriyoruz.
        delay(1000);
    }
    else{                                 //Yetkisiz girişte içerideki komutlar çalıştırılır.
      Serial.println("Yetkisiz Kart");
      ekranaYazdir();
    }
  rfid.PICC_HaltA();
}
void ekranaYazdir(){
  Serial.print("ID Numarasi: ");
  for(int sayac=0; sayac<4; sayac++){
    Serial.print(rfid.uid.uidByte[sayac]); 
    Serial.print(" ");
  }
}

Kolay gelsin. :slightly_smiling_face:

1 Beğeni

Bu güzel yardımınız için çok teşekkür ederim :slightly_smiling_face:

2 Beğeni