Salve
Per un progetto/svago ho collegato 5 RFID MFRC522 su un arduino UNO tramite breadboard collegando i vari pin in questo modo:
SCK: 13
MOSI: 11
GND = GND
MISO = 12
RST = 9
3,3v = 3,3V
Singolarmente funzionano tutti senza problemi con il codice fornitomi come esempio dalla libreria.
Il problema sopraggiunge quando ne collego più di 4, perchè fino a 4 funzionano tutti senza problemi. Problema che arriva quando collego il quinto.
Infatti il quinto (l’ultimo inserito) non rileva nessuna card RFID. Pensando di aver sbagliato a collegare i cavi, essendo diventata una foresta di cavetti, provo ad invertire uno dei 4 funzionanti col quinto non funzionante, ma questo prova mi dimostra di aver collegato bene i cavi, dato che scambiandoli quello “non funzionante” funziona perfettamente. Quindi il mio dubbio è che Arduino riesca a supportare fino a 4 RFID contemporaneamente, anche se in un video tutorial sui multi-RFID, dice che se ne possono collegare fino a 6.
Inoltre, quando upload un codice su arduino, il led-RFID dell’ultima schedina collegata sembra quasi spegnersi, mentre gli altri 4 led delle altre 4 schedine sono perfettamente illuminati.
Quindi mi domandavo se con un arduino MEGA avrei risolto questo problema, essendo impegnato in un altro groviglio di cavetti, ho esitato ancora a smontarlo.
Lascio il codice che uso per i 5 RFID:
#include <SPI.h>
#include <MFRC522.h>
const byte numReader = 5; //numero di schede RFID
const byte ssPins[] = {2, 10, 6, 4, 3}; //numero dei pin collegati
const byte resetPin = 9; // condividono lo stesso reset pin
MFRC522 mfrc522[numReader];
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println(("Serial communication started"));
SPI.begin();
for (int i = 0; i < numReader; i++) {
Serial.println("Reader: " + String(i));
mfrc522[i].PCD_Init(ssPins[i], resetPin);
delay(100);
Serial.println(("pin: " + String(ssPins[i])));
Serial.println(F(". Version : "));
mfrc522[i].PCD_DumpVersionToSerial();
Serial.println("\n");
Serial.println("\n");
}
}
void loop() {
if (mfrc522[0].PICC_IsNewCardPresent() && mfrc522[0].PICC_ReadCardSerial()) {
String readRFID = "";
readRFID=getUID(0);
Serial.println("RFID: " + String(0) + " - ID: " + readRFID + "- PIN:[" + String(ssPins[0]) + "]");
mfrc522[0].PICC_HaltA();
mfrc522[0].PCD_StopCrypto1();
}
delay(10);
if (mfrc522[1].PICC_IsNewCardPresent() && mfrc522[1].PICC_ReadCardSerial()) {
String readRFID = "";
readRFID=getUID(1);
Serial.println("RFID: " + String(1) + " - ID: " + readRFID + "- PIN:[" + String(ssPins[1]) + "]");
mfrc522[1].PICC_HaltA();
mfrc522[1].PCD_StopCrypto1();
}
delay(10);
if (mfrc522[2].PICC_IsNewCardPresent() && mfrc522[2].PICC_ReadCardSerial()) {
String readRFID = "";
readRFID=getUID(2);
Serial.println("RFID: " + String(2) + " - ID: " + readRFID + "- PIN:[" + String(ssPins[2]) + "]");
mfrc522[2].PICC_HaltA();
mfrc522[2].PCD_StopCrypto1();
}
delay(10);
if (mfrc522[3].PICC_IsNewCardPresent() && mfrc522[3].PICC_ReadCardSerial()) {
String readRFID = "";
readRFID=getUID(3);
Serial.println("RFID: " + String(3) + " - ID: " + readRFID + "- PIN:[" + String(ssPins[3]) + "]");
mfrc522[3].PICC_HaltA();
mfrc522[3].PCD_StopCrypto1();
}
delay(10);
if (mfrc522[4].PICC_IsNewCardPresent() && mfrc522[4].PICC_ReadCardSerial()) {
String readRFID = "";
readRFID=getUID(4);
Serial.println("RFID: " + String(4) + " - ID: " + readRFID + "- PIN:[" + String(ssPins[4]) + "]");
mfrc522[4].PICC_HaltA();
mfrc522[4].PCD_StopCrypto1();
}
delay(10);
}
String getUID(int k){
String uid="";
for(int i=0; i < mfrc522[k].uid.size; i++){
uid += mfrc522[k].uid.uidByte[i] < 0x10 ? "0" : "";
uid += String(mfrc522[k].uid.uidByte[i], HEX);
}
return uid;
}
Grazie per i consigli.