Görseldeki uygulamada RFID okuyucuya geçerli bir kart okutulduğunda seri ekranda “ge-
çerli kart” yazar. Geçersiz kart okutulduğunda kartın ID’sini verir. ID’si programa dâhil edilen
kartlar, geçerli kart olur. Kart geçerliyken çalışan kod blokuna istenen kodlar yazılarak istenen
kontroller sağlanır.

#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.

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.");
}

void loop() {
  if ( ! kartOkuyucu.PICC_IsNewCardPresent())  //Bir kart okunana kadar bekle.
    return;

  if ( ! kartOkuyucu.PICC_ReadCardSerial())  // Kartı oku.
    return;

  Serial.print("Kart ID: ");
  yazdir(kartOkuyucu.uid.uidByte, kartOkuyucu.uid.size);
  kartOkuyucu.PICC_HaltA();
  Serial.println("\n Lütfen kartı okutunuz.");
}

void yazdir(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX); // HEX olarak yazdır.
  }
}


#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.");
}

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.");
  }
  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!");
  }
  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.
}

#include <EEPROM.h>
#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.

int i, k, j; // j değişkeni kayıtlı kartların dört byte'lık ID'sinin ilk byte numarasını tutmaktadır.
byte kartSayisi; //EEPROM hafızanın 0. byte'da tutulacak.

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
  //EEPROM.write(0, 0); // Yönetici kartını sıfırlamak için kullanılır (Kart sayısı da sıfırlanır).
  kartSayisi = EEPROM.read(0); // Cihaz yeniden başladığında kart sayısını EEPROM'dan al.
  Serial.print("Kayıtlı kart sayısı: "); Serial.println(kartSayisi);

  if (!kartSayisi) { // Kart sayısı sıfır ise yönetici kartı tanımla.
    Serial.println("Yönetici kartı kayıtlı değil. Lütfen yönetici olacak kartı okutunuz.");
    kartOku();
    for (i = 0; i < 4; i++) {
      EEPROM.write(i + 1, kartOkuyucu.uid.uidByte[i]); //Yeni kartı sıradaki dört byte'a yaz.
      Serial.print(kartOkuyucu.uid.uidByte[i], HEX); //Yönetici kartın ID'sini ekrana yazdır.
      Serial.print(" ");
    }
    EEPROM.write(0, 1); // Kart sayısı 1 oldu.
    Serial.println(" numaralı Yönetici kartı hafızaya kaydedildi.");
    delay(2000);
  }
  Serial.println("Lütfen kartı okutunuz.");
}


void loop() {
  kartOku();

  if (kartKontrol()) { // Kart geçerliyse yapılacaklar...
    Serial.println("Kart geçerli.");
  }
  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!");
  }
  delay(500);
  Serial.println("\n Lütfen kartı okutunuz.");
}
void kartOku() {
  if (  kartOkuyucu.PICC_IsNewCardPresent()) { //Bir kart okunana kadar bekle.
    if ( ! kartOkuyucu.PICC_ReadCardSerial())  // Kartı oku.
      kartOku();
  } else kartOku();

}

boolean kartKontrol() { // Kart geçerliye 1, değilse 0 döndürür.
  k = 0;
  for (j = 1; j < EEPROM.length() / 4; j += 4) {
    /* Kayıtlı tüm kartlara bak. UNO hafızasına 1024/4=256 kart tanımlanabilir.
      j değişkeni kayıtlı kartların dört byte'lık ID'sinin ilk byte numarasını tutmaktadır.*/
    for (i = 0; i < 4; i++) { // Her kartın ID'si dört byte.
      if (EEPROM.read(j + i)  == kartOkuyucu.uid.uidByte[i]) { //Okunan kartı kayıtlı olanlarla karşılaştır. (5. byte'tan sonra)
        k++;
        if (k == 4) { // Tüm byte'lar doğrulandıysa...
          if (j == 1) // Okunan kart yönetici kartı ise...
            yonetimIslemleri();
          else return 1; // 1 döndür.
        }
      }
    }
  }
  return 0; // Okunan kart kayıtlı kartlarla eşleşmediyse 0 döndür.
}


void yonetimIslemleri() {
  Serial.println("Lütfen eklemek veya silmek istediğiniz kartı okutunuz.");

  delay(2000);
  kartOku();
  kartKontrol();

  if (kartKontrol()) { //Kart kayıtlıysa...
    Serial.println("Kart siliniyor. Lütfen bekleyiniz...");
    kartSil(); // Kartı sil.
  }
  else {//Kart kayıtlı değilse...
    kartEkle(); //Kartı ekle.
  }
  if (j == 1)
    return;
}

void kartSil() {
  for (i = j; i < EEPROM.length() - 4; i++) {
    int x = EEPROM.read(i + 4);
    EEPROM.write(i, x);//Bulunan kart ID'sinin ilk byte numarasından (j) başlayarak tüm hafızayı dört byte sola kaydır.
  }
  EEPROM.write(0, EEPROM.read(0) - 1); // Kart sayısını bir azalt.
  Serial.println("Okutulan kart hafızadan silindi.");
}

void kartEkle() {
  kartSayisi = EEPROM.read(0);
  for (i = 0; i < 4; i++) {
    EEPROM.write(kartSayisi * 4 + 1 + i, kartOkuyucu.uid.uidByte[i]);   //Yeni kartı sıradaki dört byte'a yaz.
    Serial.print(kartOkuyucu.uid.uidByte[i], HEX); //Geçersiz kartın ID'sini ekrana yazdır.
    Serial.print(" ");
  }
  EEPROM.write(0, EEPROM.read(0) + 1); // Kart sayısını bir arttır.
  Serial.print("ID numaralı ");
  Serial.print(EEPROM.read(0));
  Serial.println(". kart hafızaya kaydedildi.");
  delay(2000);
}

#include <EEPROM.h>
#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.

int i, k, j;                              // j değişkeni kayıtlı kartların dört byte'lık ID'sinin ilk byte numarasını tutmaktadır.
byte toplamKullaniciSayisi = 255;         // Sistemi en fazla kaç kişi kullanacak.
byte kartSayisi;                          //EEPROM hafızanın 0. byte'da tutulacak.
const byte role = 4, LED = 3, buton = 2;  // Butona basılarak yönetici kartı değiştirilir.

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(role, OUTPUT);
  pinMode(buton, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(buton), yoneticiKartiOlustur, LOW);
  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
  //EEPROM.write(0, 0); // Yönetici kartını sıfırlamak için kullanılır (Kart sayısı da sıfırlanır).
  kartSayisi = EEPROM.read(0);  // Cihaz yeniden başladığında kart sayısını EEPROM'dan al.
  Serial.print("Kayıtlı kart sayısı: ");
  Serial.println(kartSayisi);

  if (!kartSayisi) {  // Kart sayısı sıfır ise yönetici kartı tanımla.
    yoneticiKartiOlustur();
  }
}


void loop() {
  kartOku();

  if (kartKontrol()) {  // Kart geçerliyse yapılacaklar...
    kartGecerli();
  } else {  // Kart geçerli değilse yapılacaklar...
    kartGecersiz();
  }
}


void kartOku() {
  if (kartOkuyucu.PICC_IsNewCardPresent()) {  //Bir kart okunana kadar bekle.
    if (!kartOkuyucu.PICC_ReadCardSerial())   // Kartı oku.
      kartOku();
  } else kartOku();
}

boolean kartKontrol() {  // Kart geçerliye 1, değilse 0 döndürür.
  k = 0;
  for (j = 1; j < 255 * 4; j += 4) {
    /* Kayıtlı tüm kartlara bak. UNO hafızasına 1024/4=256 kart tanımlanabilir.
      j değişkeni kayıtlı kartların dört byte'lık ID'sinin ilk byte numarasını tutmaktadır.*/
    for (i = 0; i < 4; i++) {                                  // Her kartın ID'si dört byte.
      if (EEPROM.read(j + i) == kartOkuyucu.uid.uidByte[i]) {  //Okunan kartı kayıtlı olanlarla karşılaştır. (5. byte'tan sonra)
        k++;
        if (k == 4) {  // Tüm byte'lar doğrulandıysa...
          if (j == 1)  // Okunan kart yönetici kartı ise...
            yonetimIslemleri();
          else return 1;  // 1 döndür.
        }
      }
    }
  }
  return 0;  // Okunan kart kayıtlı kartlarla eşleşmediyse 0 döndür.
}


void yonetimIslemleri() {
  Serial.println("Lütfen eklemek veya silmek istediğiniz kartı okutunuz.");

  delay(2000);
  kartOku();
  kartKontrol();

  if (kartKontrol()) {  //Kart kayıtlıysa...
    Serial.println("Kart siliniyor. Lütfen bekleyiniz...");
    kartSil();   // Kartı sil.
  } else {       //Kart kayıtlı değilse...
    kartEkle();  //Kartı ekle.
  }
  if (j == 1)
    return;
}

void kartSil() {
  for (i = j; i < EEPROM.length() - 4; i++) {
    int x = EEPROM.read(i + 4);
    EEPROM.write(i, x);  //Bulunan kart ID'sinin ilk byte numarasından (j) başlayarak tüm hafızayı dört byte sola kaydır.
  }
  EEPROM.write(0, EEPROM.read(0) - 1);  // Kart sayısını bir azalt.
  Serial.println("Okutulan kart hafızadan silindi.");
}

void kartEkle() {
  kartSayisi = EEPROM.read(0);
  for (i = 0; i < 4; i++) {
    EEPROM.write(kartSayisi * 4 + 1 + i, kartOkuyucu.uid.uidByte[i]);  //Yeni kartı sıradaki dört byte'a yaz.
    Serial.print(kartOkuyucu.uid.uidByte[i], HEX);                     //Geçersiz kartın ID'sini ekrana yazdır.
    Serial.print(" ");
  }
  EEPROM.write(0, EEPROM.read(0) + 1);  // Kart sayısını bir arttır.
  Serial.print("ID numaralı ");
  Serial.print(EEPROM.read(0));
  Serial.println(". kart hafızaya kaydedildi.");
  delay(2000);
}

void kartGecerli() {
  Serial.println("Kart geçerli.");
  digitalWrite(LED, HIGH);
  digitalWrite(role, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
  digitalWrite(role, LOW);
  Serial.println("\n Lütfen kartı okutunuz.");
}
void kartGecersiz() {
  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!");

  for (i = 0; i < 3; i++) {
    digitalWrite(LED, HIGH);
    delay(250);
    digitalWrite(LED, LOW);
    delay(250);
  }
  Serial.println("\n Lütfen kartı okutunuz.");
}

void yoneticiKartiOlustur() {
  Serial.println("Yönetici kartı kayıtlı değil. Lütfen yönetici olacak kartı okutunuz.");
  kartOku();
  for (i = 0; i < 4; i++) {
    EEPROM.write(i + 1, kartOkuyucu.uid.uidByte[i]);  //Yeni kartı sıradaki dört byte'a yaz.
    Serial.print(kartOkuyucu.uid.uidByte[i], HEX);    //Yönetici kartın ID'sini ekrana yazdır.
    Serial.print(" ");
  }
  EEPROM.write(0, 1);  // Kart sayısı 1 oldu.
  Serial.println(" numaralı Yönetici kartı hafızaya kaydedildi.");
  delay(2000);
}

Categories:

Tags:

No responses yet

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Dersler