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);
}
No responses yet