#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