Including Multiple MRFC522 RFID readers on a single Arduino unit.

I aim to have three MFRC522 RFID units attached to a single Arduino uno.
I have an LED screen that displays the read cards. Currently i have a program that works successfully for a single MFRC522 unit attached to my uno.
Could someone please show me how to add two additional units?
As well as this alteration, i need to change my program so that it does not reset the LCD screen after a specified time but instead want the LCD to change after the next MFRC522 has been scanned where the message can be updated on my LCD screen.

Please see my attached program. (ignore the comments)

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.

void setup()
Serial.begin(9600); // Initiate a serial communication
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
Serial.println(“Approximate your card to the reader…”);

void loop()
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
//Show UID on serial monitor
Serial.print(“UID tag :”);
String content= “”;
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
Serial.print(mfrc522.uid.uidByte < 0x10 ? " 0" : " ");
_ Serial.print(mfrc522.uid.uidByte*, HEX);_
_ content.concat(String(mfrc522.uid.uidByte < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte, HEX));
void loop()
uchar i, tmp, checksum1;
uchar status;_

uchar str[MAX_LEN];
uchar RC_size;
_ uchar blockAddr; //Selection operation block address 0 to 63*
* String mynum = “”;
str[1] = 0x4400;
//Find tags, return tag type*

* status = myRFID.AddicoreRFID_Request(PICC_REQIDL, str);
if (status == MI_OK)*

* {
Serial.println(“RFID tag detected”);
Serial.print(“Tag Type:\t\t”);
uint tagType = str[0] << 8;
tagType = tagType + str[1];
// These are all of the different types of cards that the module can read. It will tell you which type you have when scanned*

* switch (tagType) {
case 0x4400:
Serial.println(“Mifare UltraLight”);
case 0x400:
Serial.println(“Mifare One (S50)”);
case 0x200:
Serial.println(“Mifare One (S70)”);
case 0x800:
Serial.println(“Mifare Pro (X)”);
case 0x4403:
Serial.println(“Mifare DESFire”);
//Anti-collision, return tag serial number 4 bytes*

* status = myRFID.AddicoreRFID_Anticoll(str);
if (status == MI_OK)*

* {
//What we will print to serial monitor. Change the words inside “…” to whatever you want to say.
checksum1 = str[0] ^ str[1] ^ str[2] ^ str[3];
Serial.print(“The tag’s number is:\t”);
Serial.print(" , “);
Serial.print(” , “);
Serial.print(” , “);
Serial.print(“Read Checksum:\t\t”);
Serial.print(“Calculated Checksum:\t”);
// Should really check all pairs, but for now we’ll just use the first set*

* //You can change this to the first byte of your tag by finding the card’s ID through the Serial Monitor. Whatever your first number is, put here.
if (str[0] == 114)
//Serial.print “…” and lcd.print “…” can be changed to what you desire. keep in mind when lcd.setCursor is used, it is on a 16x2 LCD. So one row can only display 16 chars.
// setting cursor to top left corner*

* lcd.setCursor(1, 1);
// quotation marks send characters to LCD*

* lcd.print(“accept”);
// sets the cursor to bottom left, lcd.setCursor needs to arguments (Coloumn, Row).
lcd.setCursor(1, 2);
//delay to give us time to read the lcd message. the higher the number, the longer the message stays on the screen for*

* delay(3000);
// this is where we turn on the relay. change delay for the relay to stay on longer*

* digitalWrite(relay, HIGH);
digitalWrite(relay, LOW);
} else if (str[0] == 225) { // Run any other cards you have and create a new else statement for each ones number, then change what you want to happen for them.
lcd.setCursor(0, 0);
lcd.setCursor(0, 1);
lcd.print(“Access denied!”);
//Gives us a gap between scans, and a delay between readings.

myRFID.AddicoreRFID_Halt(); //Command tag into hibernation*

lcd_sketch_fully_working.ino (4.69 KB)

Please learn to use code tags (that’s the </> button in the editor), your post is almost unreadable.

Could someone please show me how to add two additional units?

Why do you think you need that? Having multiple readers within the SPI bus reach (about 40cm) doesn’t make sense to me. So please explain what you’re trying to achieve.

If you really need to just choose separate SS pins and best also separate RST pins for every instance.