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