Arama butonu
Bu konudaki kullanıcılar: 1 misafir
1
Cevap
1299
Tıklama
0
Öne Çıkarma
Arduino NFC ile bina kapısı açma Kodlama Sıkıntısı Yardım
S
9 yıl
Çavuş
Konu Sahibi

Merhaba , arduino ile nfc'li kapı sistemi yaptım.Bir sorunum var, 1 kere nfc ile kapı açıldıktan sonra tekrar aynı nfc ile kapıyı açamıyorum.İlla ki farklı bir nfc gösterip tekrar ilk nfc yi göstermem gerekiyor . Kodlama Şu şekilde ;
 
#include <SPI.h>
#include <MFRC522.h>
#include <EEPROM.h>

#define RST_PIN 9
#define SS_PIN 10
#define RelayPin 8

MFRC522 mfrc522(SS_PIN, RST_PIN);

String lastRfid = "";
String kart1 = "";
String kart2 = "";
String kart3 = "";
String kart4 = "";

MFRC522::MIFARE_Key key;


void setup()
{
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
pinMode(RelayPin, OUTPUT);
digitalWrite(RelayPin, LOW);
Serial.println("RFID KART OKUMA UYGULAMASI");
Serial.println("--------------------------");
Serial.println();
//EEPROM'dan kart bilgisini oku
readEEPROM();
}

void loop()
{
//yeni kart okununmadıkça devam etme
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
//kartın UID'sini oku, rfid isimli string'e kaydet
String rfid = "";
for (byte i = 0; i < mfrc522.uid.size; i++)
{
rfid += mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ";
rfid += String(mfrc522.uid.uidByte[i], HEX);
}
//string'in boyutunu ayarla ve tamamını büyük harfe çevir
rfid.trim();
rfid.toUpperCase();

if (rfid == lastRfid)
return;
lastRfid = rfid;

Serial.print("Kart 1: ");
Serial.println(kart1);
Serial.print("Kart 2: ");
Serial.println(kart2);
Serial.print("Kart 3: ");
Serial.println(kart3);
Serial.print("Kart 4: ");
Serial.println(kart4);
Serial.print("Okunan: ");
Serial.println(rfid);
Serial.println();
//1 nolu kart okunduysa LED'i yak, 2 nolu kart okunduysa LED'i söndür
if (rfid == kart1)
{
digitalWrite(RelayPin, HIGH);
Serial.println("LED yandi.");
delay(1000);
digitalWrite(RelayPin, LOW);
}
if (rfid == kart2)
{
digitalWrite(RelayPin, HIGH);
Serial.println("LED yandi.");
delay(1000);
digitalWrite(RelayPin, LOW);
}
if (rfid == kart3)
{
digitalWrite(RelayPin, HIGH);
Serial.println("LED yandi.");
delay(1000);
digitalWrite(RelayPin, LOW);
}
if (rfid == kart4)
{
digitalWrite(RelayPin, HIGH);
Serial.println("LED yandi.");
delay(1000);
digitalWrite(RelayPin, LOW);
}

Serial.println();
delay(200);

}

void readEEPROM()
{
//EEPROM'dan ilk kartın UID'sini oku (ilk 4 byte)
for (int i = 0 ; i < 4 ; i++)
{
kart1 += EEPROM.read(i) < 0x10 ? " 0" : " ";
kart1 += String(EEPROM.read(i), HEX);
}
//EEPROM'dan ikinci kartın UID'sini oku
for (int i = 4 ; i < 8 ; i++)
{
kart2 += EEPROM.read(i) < 0x10 ? " 0" : " ";
kart2 += String(EEPROM.read(i), HEX);
}
//EEPROM'dan 3 kartın UID'sini oku
for (int i = 8 ; i < 12 ; i++)
{
kart3 += EEPROM.read(i) < 0x10 ? " 0" : " ";
kart3 += String(EEPROM.read(i), HEX);
}
//EEPROM'dan 4 kartın UID'sini oku
for (int i = 12 ; i < 16 ; i++)
{
kart4 += EEPROM.read(i) < 0x10 ? " 0" : " ";
kart4 += String(EEPROM.read(i), HEX);
}
//Okunan stringleri düzenle
kart1.trim();
kart1.toUpperCase();
kart2.trim();
kart2.toUpperCase();
kart3.trim();
kart3.toUpperCase();
kart4.trim();
kart4.toUpperCase();
}

Sistem şu şekil işliyor ;
EEPROM a kayıtlı herhangi bir nfc kart okutunca , arduino delay pininden sinyal gönderiyor.
Delay pini role devresine bağlı.Sinyal alan role otomatın elektriğinin geçişine izin veriyor.
Sıkıntı aynı kartla üst üste 2 kere kapıyı açamamam.