Arama butonu
Bu konudaki kullanıcılar: 1 misafir
1
Cevap
1300
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.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



M
9 yıl
Yüzbaşı

Dostum kodlamayı tekrar gözden geçir istersen(loop kısmından sonraki bölüm de ilk if kodun da zaten kendin oluşturmuşssun koşulu)



< Bu ileti tablet sürüm kullanılarak atıldı >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.