Hello everyone
I have a project but I couldn't solve a problem.
I want to control entry and exit using 4 rfids. When the correct card is read, the door will open. After installing the program, the first RFID reads all the cards and the door opens when the right card arrives. But the other 3 RFID is not reading.
Thanks.
#include <Servo.h> //Servo kütüphanemizi tanımlıyoruz.
#include <MFRC522.h> //MFRC522 kütüphanemizi tanımlıyoruz.
#include <SPI.h> //SPI kütüphanemizi tanımlıyoruz.
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //LCD ekran kütüphanesini tanımlıyoruz.
LiquidCrystal_I2C lcdscreen1(0x27,16,2);
LiquidCrystal_I2C lcdscreen2(0x27,16,2);
LiquidCrystal_I2C lcdscreen3(0x27,16,2);
int RST_PIN = 9; //RC522 modülü reset pinini tanımlıyoruz.
int SS_PIN1 = 10; //RC522 modülü chip select pinini tanımlıyoruz.
int SS_PIN2 = 7; //RC522 modülü chip select pinini tanımlıyoruz.
int SS_PIN3 = 8; //RC522 modülü chip select pinini tanımlıyoruz.
int SS_PIN4 = 6; //RC522 modülü chip select pinini tanımlıyoruz.
int servoPin = A0; //Servo motor pinini tanımlıyoruz.
Servo motor; //Servo motor için değişken oluşturuyoruz.
MFRC522 rfid(SS_PIN1, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID[4] = {147, 114, 62, 19}; //Yetkili kart ID'sini tanımlıyoruz.
MFRC522 rfid2(SS_PIN2, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID2[4] = {163, 90, 136, 17}; //Yetkili kart ID'sini tanımlıyoruz.
MFRC522 rfid3(SS_PIN3, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID3[4] = {147, 73, 64, 19}; //Yetkili kart ID'sini tanımlıyoruz.
MFRC522 rfid4(SS_PIN4, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID4[4] = {243, 68, 136, 17}; //Yetkili kart ID'sini tanımlıyoruz.
void setup() {
motor.attach(servoPin); //Servo motor pinini motor değişkeni ile ilişkilendiriyoruz.
Serial.begin(9600); //Seri haberleşmeyi başlatıyoruz.
SPI.begin(); //SPI iletişimini başlatıyoruz.
rfid.PCD_Init(); //RC522 modülünü başlatıyoruz.
pinMode(A0,OUTPUT);
lcdscreen1.init(); //lcd ekran tanımlaması yapıyoruz.
lcdscreen1.backlight();
lcdscreen1.setCursor(5,0);
lcdscreen1.print("WELCOME");
lcdscreen1.setCursor(2,1);
lcdscreen1.print("SCAN YOUR TAG");
lcdscreen2.init(); //lcd ekran tanımlaması yapıyoruz.
lcdscreen2.backlight();
lcdscreen2.setCursor(5,0);
lcdscreen2.print("WELCOME");
lcdscreen2.setCursor(2,1);
lcdscreen2.print("SCAN YOUR TAG");
lcdscreen3.init(); //lcd ekran tanımlaması yapıyoruz.
lcdscreen3.backlight();
lcdscreen3.setCursor(5,0);
lcdscreen3.print("WELCOME");
lcdscreen3.setCursor(2,1);
lcdscreen3.print("SCAN YOUR TAG");
}
void loop() {
if ( ! rfid.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
return;
if ( ! rfid.PICC_ReadCardSerial()) //Kart okunmadığı zaman bekliyoruz.
return;
if (rfid.uid.uidByte[0] == ID[0] && //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
rfid.uid.uidByte[1] == ID[1] &&
rfid.uid.uidByte[2] == ID[2] &&
rfid.uid.uidByte[3] == ID[3] ) {
Serial.println("Kapi acildi");
ekranaYazdir();
motor.write(180); //Servo motoru 180 dereceye getiriyoruz.
delay(3000);
motor.write(0); //Servo motoru 0 dereceye getiriyoruz.
delay(1000);
}
else{ //Yetkisiz girişte içerideki komutlar çalıştırılır.
Serial.println("Yetkisiz Kart");
ekranaYazdir();
}
if ( ! rfid2.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
return;
if ( ! rfid2.PICC_ReadCardSerial()) //Kart okunmadığı zaman bekliyoruz.
return;
if (rfid2.uid.uidByte[0] == ID2[0] && //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
rfid2.uid.uidByte[1] == ID2[1] &&
rfid2.uid.uidByte[2] == ID2[2] &&
rfid2.uid.uidByte[3] == ID2[3] ) {
Serial.println("Kapi acildi");
ekranaYazdir();
motor.write(180); //Servo motoru 180 dereceye getiriyoruz.
delay(3000);
motor.write(0); //Servo motoru 0 dereceye getiriyoruz.
delay(1000);
}
else{ //Yetkisiz girişte içerideki komutlar çalıştırılır.
Serial.println("Yetkisiz Kart");
ekranaYazdir();
}
if ( ! rfid3.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
return;
if ( ! rfid3.PICC_ReadCardSerial()) //Kart okunmadığı zaman bekliyoruz.
return;
if (rfid3.uid.uidByte[0] == ID3[0] && //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
rfid3.uid.uidByte[1] == ID3[1] &&
rfid3.uid.uidByte[2] == ID3[2] &&
rfid3.uid.uidByte[3] == ID3[3] ) {
Serial.println("Kapi acildi");
ekranaYazdir();
motor.write(180); //Servo motoru 180 dereceye getiriyoruz.
delay(3000);
motor.write(0); //Servo motoru 0 dereceye getiriyoruz.
delay(1000);
}
else{ //Yetkisiz girişte içerideki komutlar çalıştırılır.
Serial.println("Yetkisiz Kart");
ekranaYazdir();
}
if ( ! rfid4.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
return;
if ( ! rfid4.PICC_ReadCardSerial()) //Kart okunmadığı zaman bekliyoruz.
return;
if (rfid4.uid.uidByte[0] == ID4[0] && //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
rfid4.uid.uidByte[1] == ID4[1] &&
rfid4.uid.uidByte[2] == ID4[2] &&
rfid4.uid.uidByte[3] == ID4[3] ) {
Serial.println("Kapi acildi");
ekranaYazdir();
motor.write(180); //Servo motoru 180 dereceye getiriyoruz.
delay(3000);
motor.write(0); //Servo motoru 0 dereceye getiriyoruz.
delay(1000);
}
else{ //Yetkisiz girişte içerideki komutlar çalıştırılır.
Serial.println("Yetkisiz Kart");
ekranaYazdir();
}
rfid.PICC_HaltA();
}
void ekranaYazdir(){
Serial.print("ID Numarasi: ");
for(int sayac = 0; sayac < 4; sayac++){
Serial.print(rfid.uid.uidByte[sayac]);
Serial.print(" ");
}
Serial.println("");
}
This:
if ( ! rfid.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
return;
Means that if the first RFID reader doesn't see a new card, none of the others will ever be checked.
ı deleted this commend but not solved
Post the new version - don't edit the original.
#include <Servo.h> //Servo kütüphanemizi tanımlıyoruz.
#include <MFRC522.h> //MFRC522 kütüphanemizi tanımlıyoruz.
#include <SPI.h> //SPI kütüphanemizi tanımlıyoruz.
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //LCD ekran kütüphanesini tanımlıyoruz.
LiquidCrystal_I2C lcdscreen1(0x27,16,2);
LiquidCrystal_I2C lcdscreen2(0x27,16,2);
LiquidCrystal_I2C lcdscreen3(0x27,16,2);
int RST_PIN = 9; //RC522 modülü reset pinini tanımlıyoruz.
int SS_PIN1 = 10; //RC522 modülü chip select pinini tanımlıyoruz.
int SS_PIN2 = 7; //RC522 modülü chip select pinini tanımlıyoruz.
int SS_PIN3 = 8; //RC522 modülü chip select pinini tanımlıyoruz.
int SS_PIN4 = 6; //RC522 modülü chip select pinini tanımlıyoruz.
int servoPin = A0; //Servo motor pinini tanımlıyoruz.
Servo motor; //Servo motor için değişken oluşturuyoruz.
MFRC522 rfid(SS_PIN1, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID[4] = {147, 114, 62, 19}; //Yetkili kart ID'sini tanımlıyoruz.
MFRC522 rfid2(SS_PIN2, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID2[4] = {163, 90, 136, 17}; //Yetkili kart ID'sini tanımlıyoruz.
MFRC522 rfid3(SS_PIN3, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID3[4] = {147, 73, 64, 19}; //Yetkili kart ID'sini tanımlıyoruz.
MFRC522 rfid4(SS_PIN4, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID4[4] = {243, 68, 136, 17}; //Yetkili kart ID'sini tanımlıyoruz.
void setup() {
motor.attach(servoPin); //Servo motor pinini motor değişkeni ile ilişkilendiriyoruz.
Serial.begin(9600); //Seri haberleşmeyi başlatıyoruz.
SPI.begin(); //SPI iletişimini başlatıyoruz.
rfid.PCD_Init(); //RC522 modülünü başlatıyoruz.
pinMode(A0,OUTPUT);
lcdscreen1.init(); //lcd ekran tanımlaması yapıyoruz.
lcdscreen1.backlight();
lcdscreen1.setCursor(5,0);
lcdscreen1.print("WELCOME");
lcdscreen1.setCursor(2,1);
lcdscreen1.print("SCAN YOUR TAG");
lcdscreen2.init(); //lcd ekran tanımlaması yapıyoruz.
lcdscreen2.backlight();
lcdscreen2.setCursor(5,0);
lcdscreen2.print("WELCOME");
lcdscreen2.setCursor(2,1);
lcdscreen2.print("SCAN YOUR TAG");
lcdscreen3.init(); //lcd ekran tanımlaması yapıyoruz.
lcdscreen3.backlight();
lcdscreen3.setCursor(5,0);
lcdscreen3.print("WELCOME");
lcdscreen3.setCursor(2,1);
lcdscreen3.print("SCAN YOUR TAG");
}
void loop() {
if ( ! rfid.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
return;
if ( ! rfid.PICC_ReadCardSerial()) //Kart okunmadığı zaman bekliyoruz.
return;
if (rfid.uid.uidByte[0] == ID[0] && //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
rfid.uid.uidByte[1] == ID[1] &&
rfid.uid.uidByte[2] == ID[2] &&
rfid.uid.uidByte[3] == ID[3] ) {
Serial.println("Kapi acildi");
ekranaYazdir();
motor.write(180); //Servo motoru 180 dereceye getiriyoruz.
delay(3000);
motor.write(0); //Servo motoru 0 dereceye getiriyoruz.
delay(1000);
}
else{ //Yetkisiz girişte içerideki komutlar çalıştırılır.
Serial.println("Yetkisiz Kart");
ekranaYazdir();
}
if ( ! rfid2.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
return;
if ( ! rfid2.PICC_ReadCardSerial()) //Kart okunmadığı zaman bekliyoruz.
return;
if (rfid2.uid.uidByte[0] == ID2[0] && //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
rfid2.uid.uidByte[1] == ID2[1] &&
rfid2.uid.uidByte[2] == ID2[2] &&
rfid2.uid.uidByte[3] == ID2[3] ) {
Serial.println("Kapi acildi");
ekranaYazdir();
motor.write(180); //Servo motoru 180 dereceye getiriyoruz.
delay(3000);
motor.write(0); //Servo motoru 0 dereceye getiriyoruz.
delay(1000);
}
else{ //Yetkisiz girişte içerideki komutlar çalıştırılır.
Serial.println("Yetkisiz Kart");
ekranaYazdir();
}
if ( ! rfid3.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
return;
if ( ! rfid3.PICC_ReadCardSerial()) //Kart okunmadığı zaman bekliyoruz.
return;
if (rfid3.uid.uidByte[0] == ID3[0] && //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
rfid3.uid.uidByte[1] == ID3[1] &&
rfid3.uid.uidByte[2] == ID3[2] &&
rfid3.uid.uidByte[3] == ID3[3] ) {
Serial.println("Kapi acildi");
ekranaYazdir();
motor.write(180); //Servo motoru 180 dereceye getiriyoruz.
delay(3000);
motor.write(0); //Servo motoru 0 dereceye getiriyoruz.
delay(1000);
}
else{ //Yetkisiz girişte içerideki komutlar çalıştırılır.
Serial.println("Yetkisiz Kart");
ekranaYazdir();
}
if ( ! rfid4.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
return;
if ( ! rfid4.PICC_ReadCardSerial()) //Kart okunmadığı zaman bekliyoruz.
return;
if (rfid4.uid.uidByte[0] == ID4[0] && //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
rfid4.uid.uidByte[1] == ID4[1] &&
rfid4.uid.uidByte[2] == ID4[2] &&
rfid4.uid.uidByte[3] == ID4[3] ) {
Serial.println("Kapi acildi");
ekranaYazdir();
motor.write(180); //Servo motoru 180 dereceye getiriyoruz.
delay(3000);
motor.write(0); //Servo motoru 0 dereceye getiriyoruz.
delay(1000);
}
else{ //Yetkisiz girişte içerideki komutlar çalıştırılır.
Serial.println("Yetkisiz Kart");
ekranaYazdir();
}
rfid.PICC_HaltA();
}
void ekranaYazdir(){
Serial.print("ID Numarasi: ");
for(int sayac = 0; sayac < 4; sayac++){
Serial.print(rfid.uid.uidByte[sayac]);
Serial.print(" ");
}
Serial.println("");
}```
Looks the same to me. Still has the original problem all over the place too,
#include <Servo.h> //Servo kütüphanemizi tanımlıyoruz.
#include <MFRC522.h> //MFRC522 kütüphanemizi tanımlıyoruz.
#include <SPI.h> //SPI kütüphanemizi tanımlıyoruz.
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //LCD ekran kütüphanesini tanımlıyoruz.
LiquidCrystal_I2C lcdscreen1(0x27,16,2);
LiquidCrystal_I2C lcdscreen2(0x27,16,2);
LiquidCrystal_I2C lcdscreen3(0x27,16,2);
int RST_PIN = 9; //RC522 modülü reset pinini tanımlıyoruz.
int SS_PIN1 = 10; //RC522 modülü chip select pinini tanımlıyoruz.
int SS_PIN2 = 7; //RC522 modülü chip select pinini tanımlıyoruz.
int SS_PIN3 = 8; //RC522 modülü chip select pinini tanımlıyoruz.
int SS_PIN4 = 6; //RC522 modülü chip select pinini tanımlıyoruz.
int servoPin = A0; //Servo motor pinini tanımlıyoruz.
Servo motor; //Servo motor için değişken oluşturuyoruz.
MFRC522 rfid(SS_PIN1, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID[4] = {147, 114, 62, 19}; //Yetkili kart ID'sini tanımlıyoruz.
MFRC522 rfid2(SS_PIN2, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID2[4] = {163, 90, 136, 17}; //Yetkili kart ID'sini tanımlıyoruz.
MFRC522 rfid3(SS_PIN3, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID3[4] = {147, 73, 64, 19}; //Yetkili kart ID'sini tanımlıyoruz.
MFRC522 rfid4(SS_PIN4, RST_PIN); //RC522 modülü ayarlarını yapıyoruz.
byte ID4[4] = {243, 68, 136, 17}; //Yetkili kart ID'sini tanımlıyoruz.
void setup() {
motor.attach(servoPin); //Servo motor pinini motor değişkeni ile ilişkilendiriyoruz.
Serial.begin(9600); //Seri haberleşmeyi başlatıyoruz.
SPI.begin(); //SPI iletişimini başlatıyoruz.
rfid.PCD_Init(); //RC522 modülünü başlatıyoruz.
pinMode(A0,OUTPUT);
lcdscreen1.init(); //lcd ekran tanımlaması yapıyoruz.
lcdscreen1.backlight();
lcdscreen1.setCursor(5,0);
lcdscreen1.print("WELCOME");
lcdscreen1.setCursor(2,1);
lcdscreen1.print("SCAN YOUR TAG");
lcdscreen2.init(); //lcd ekran tanımlaması yapıyoruz.
lcdscreen2.backlight();
lcdscreen2.setCursor(5,0);
lcdscreen2.print("WELCOME");
lcdscreen2.setCursor(2,1);
lcdscreen2.print("SCAN YOUR TAG");
lcdscreen3.init(); //lcd ekran tanımlaması yapıyoruz.
lcdscreen3.backlight();
lcdscreen3.setCursor(5,0);
lcdscreen3.print("WELCOME");
lcdscreen3.setCursor(2,1);
lcdscreen3.print("SCAN YOUR TAG");
}
void loop() {
if ( ! rfid.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
return;
if (rfid.uid.uidByte[0] == ID[0] && //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
rfid.uid.uidByte[1] == ID[1] &&
rfid.uid.uidByte[2] == ID[2] &&
rfid.uid.uidByte[3] == ID[3] ) {
Serial.println("Kapi acildi");
ekranaYazdir();
motor.write(180); //Servo motoru 180 dereceye getiriyoruz.
delay(3000);
motor.write(0); //Servo motoru 0 dereceye getiriyoruz.
delay(1000);
}
else{ //Yetkisiz girişte içerideki komutlar çalıştırılır.
Serial.println("Yetkisiz Kart");
ekranaYazdir();
}
if ( ! rfid2.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
return;
if (rfid2.uid.uidByte[0] == ID2[0] && //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
rfid2.uid.uidByte[1] == ID2[1] &&
rfid2.uid.uidByte[2] == ID2[2] &&
rfid2.uid.uidByte[3] == ID2[3] ) {
Serial.println("Kapi acildi");
ekranaYazdir();
motor.write(180); //Servo motoru 180 dereceye getiriyoruz.
delay(3000);
motor.write(0); //Servo motoru 0 dereceye getiriyoruz.
delay(1000);
}
else{ //Yetkisiz girişte içerideki komutlar çalıştırılır.
Serial.println("Yetkisiz Kart");
ekranaYazdir();
}
if ( ! rfid3.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
return;
if (rfid3.uid.uidByte[0] == ID3[0] && //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
rfid3.uid.uidByte[1] == ID3[1] &&
rfid3.uid.uidByte[2] == ID3[2] &&
rfid3.uid.uidByte[3] == ID3[3] ) {
Serial.println("Kapi acildi");
ekranaYazdir();
motor.write(180); //Servo motoru 180 dereceye getiriyoruz.
delay(3000);
motor.write(0); //Servo motoru 0 dereceye getiriyoruz.
delay(1000);
}
else{ //Yetkisiz girişte içerideki komutlar çalıştırılır.
Serial.println("Yetkisiz Kart");
ekranaYazdir();
}
if ( ! rfid4.PICC_IsNewCardPresent()) //Yeni kartın okunmasını bekliyoruz.
return;
if (rfid4.uid.uidByte[0] == ID4[0] && //Okunan kart ID'si ile ID değişkenini karşılaştırıyoruz.
rfid4.uid.uidByte[1] == ID4[1] &&
rfid4.uid.uidByte[2] == ID4[2] &&
rfid4.uid.uidByte[3] == ID4[3] ) {
Serial.println("Kapi acildi");
ekranaYazdir();
motor.write(180); //Servo motoru 180 dereceye getiriyoruz.
delay(3000);
motor.write(0); //Servo motoru 0 dereceye getiriyoruz.
delay(1000);
}
else{ //Yetkisiz girişte içerideki komutlar çalıştırılır.
Serial.println("Yetkisiz Kart");
ekranaYazdir();
}
rfid.PICC_HaltA();
}
void ekranaYazdir(){
Serial.print("ID Numarasi: ");
for(int sayac = 0; sayac < 4; sayac++){
Serial.print(rfid.uid.uidByte[sayac]);
Serial.print(" ");
}
Serial.println("");
}
I edited the code but only the first card reads and this is how it is on the serial port screen.
The problem is all those return statements. I suspect that you took an example for a single RFID reader where they would have made sense and copied and pasted it. You might do better if you put each RFID's code in its own function and call each from loop.
there is an example for Multi RFID readers in the IDE.
Test this example (with two readers)
If you got it working - add more readers.
If all your readers are working - use the principle in your sketch.
system
Closed
October 5, 2022, 8:54am
10
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.