Problème branchement lecteur micro SD sur arduino mega 2560

Bonjour,
je travaille actuellement sur un système d'ouverture de porte par RFID et j'aimerais enregistrer les entrées des différents badges. Petit problème : j'ai vu que le lecteur micro SD est censé se brancher sur le SPI (50,51,52,53) sauf que ces broches sont déjà prises par le lecteur RFID. Que puis-je faire ?
Voici mon code au cas où :

#define BADGE_PORT_PLAISANCE " C8 45 EB 61"
#define BADGE_BLEU " A9 B2 BB B9" //badge bleu
#define BADGE_NFC "0 4 5B A5 BA 2D 59 81" //tag NFC
#define BADGE_ROUGE " F1 49 2F 3D"
#define JEAN " 2A F4 2E 3D"
#define CPE " A6 40 2F 3D"
#define ERIC_CAMENEN "0 3 42 2F 3D"
#define LEBODIC " 1F 74 2E 3D"
#define DIRECTEUR " D6 FE 2E 3D"
#define DE_CRUZ " 41 4A 2F 3D"
#define DANO " D5 46 2F 3D"
#define EWEN " EE 1A 2F 3D"

/*
  Branchements :
  led verte en 7
  led rouge en 6
  servo en 4
  bouton en 3
  buzzer en 8
  module RFID /
  SDA en 53
  SCK en 52
  MOSI en 51
  MISO en 50
  RQ en rien
  GND en GND
  RST en 37
  3.3V en 3.3V
*/
// CONNECTIONS:
// DS1302 CLK/SCLK --> 32
// DS1302 DAT/IO --> 33
// DS1302 RST/CE --> 34
// DS1302 VCC --> 3.3v - 5v
// DS1302 GND --> GND

#include <SPI.h>
#include <MFRC522.h>
#include <IRremote.h>
#include <LiquidCrystal.h>
#include "LiquidCrystal_I2C.h"
#include "Wire.h"
#include "iarduino_RTC.h"

// Indicates the pins
#define SS_PIN 53
#define RST_PIN 37
// pour définir la valeur des ouvertures
#define ouvert 0
#define ferme 80
#define tempsdarret 75
#define ElectroAimant 4


// Indicates to which pin the LED is connected
const int ledpin1 = 45; //rouge
const int ledpin2 = 39; //verte
const int ledpin3 = 26; //rouge intérieur
const int ledpin4 = 29; //verte intérieur
const int buzzer = 8;
int bouton = 3;
int etatbouton = 0;
int bouton2 = 30;
int etatbouton2 = 0;
int bouton3 = 9;
int etatbouton3 = 0;
int RECV_PIN = 10;
long CODE_IR_9 = 0xFF906F;
long CODE_IR_0 = 0xFF9867;
long CODE_IR_1 = 0xFFA25D;
long CODE_IR1_9 = 0xBFEC0EB0;
word BTDATA;//Donne le nom BTDATA à la donnée reçue sur le Bluetooth

LiquidCrystal_I2C lcd(0x27, 16, 2); // définit le type d'écran lcd 16 x 2

IRrecv irrecv(RECV_PIN);
decode_results results;

//icone de cadenas fermé
byte Lock[8] = {
  0b01110,
  0b10001,
  0b10001,
  0b11111,
  0b11011,
  0b11011,
  0b11111,
};

//icone de cadenas ouvert
byte Unlock[8] = {
  0b01110,
  0b10000,
  0b10000,
  0b11111,
  0b11011,
  0b11011,
  0b11111,
};

// Creates own veriable for card reader
MFRC522 myReader (SS_PIN, RST_PIN);

//LiquidCrystal lcd(10, 2, 11, 5, 6, 7); // Crée un objet LC. Paramètres : (rs, enable, d4, d5, d6, d7)

boolean systemeEnMaintenance = false;
boolean boutonFermeturePorte = false;
boolean iconeCadenas = false;

iarduino_RTC time (RTC_DS1302, 7, 5, 6); // pour module DS1302

void setup ()
{
  Ferme();
  lcd.setCursor(0, 0);

  irrecv.enableIRIn();
  //lcd.begin(16, 2);
  lcd.init(); // initialisation de l'afficheur
  lcd.backlight();

  time.begin();
  // 0  sec, 30 min, 18 hour, 2 date, january, 2022, wed
  time.settime(30, 24, 20, 15, 1, 23, 3); // à ne téléverser que la première fois
  //            s,  i,  H,  d, M,  Y, D

  // définit la pin du buzzer en sortie
  pinMode (buzzer, OUTPUT);

  // Démarrage du moniteur série
  Serial.begin (9600);
  Serial1.begin(9600);//HC06 en pin 18-19 RX sur TX1 et TX sur RX1

  // Démarrage de la librairie SPI
  SPI.begin ();

  // Up to version 1.4.5 this call
  myReader.PCD_Init ();

  // Écrire dans le moniteur série : “Presentez votre badge d'accès”
  Serial.println ("Presentez votre badge d'accès");
  Serial.println ();

  // définit les broches ledpin1, ledpin2, ledpin3, ledpin4, 22, 23 et 24 comme étant des sorties et les broches bouton, bouton2, bouton3 et 25 comme étant des entrées
  pinMode (ledpin1, OUTPUT);
  pinMode (ledpin2, OUTPUT);
  pinMode (ledpin3, OUTPUT);
  pinMode (ledpin4, OUTPUT);
  pinMode(bouton, INPUT);
  pinMode(bouton2, INPUT);
  pinMode(bouton3, INPUT);
  pinMode(23, OUTPUT);
  pinMode(24, INPUT);
  pinMode(25, OUTPUT);
  pinMode(ElectroAimant, OUTPUT);
  // creation d'un nouveau dessin personnalisé
  lcd.createChar(1, Lock);
  // creation d'un nouveau dessin personnalisé
  lcd.createChar(2, Unlock);
  if (iconeCadenas) {
    lcd.setCursor(0, 1);
    lcd.write(2);
    lcd.setCursor(15, 1);
    lcd.write(2);
    digitalWrite(ledpin3, LOW);
    digitalWrite(ledpin4, HIGH);
  }
  else {
    lcd.setCursor(0, 1);
    lcd.write(1);
    lcd.setCursor(15, 1);
    lcd.write(1);
    digitalWrite(ledpin3, HIGH);
    digitalWrite(ledpin4, LOW);
  }
  //voir fin
  debut();
}

void loop () {
  delay(100);
  digitalWrite(23, HIGH);
  digitalWrite(24, HIGH);
  digitalWrite(25, HIGH);
  if (!systemeEnMaintenance) {     // Si système pas en maintenance
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("PRESENTEZ BADGE");
    lcd.setCursor(4, 1);
    lcd.print("D'ACCES");
    if (iconeCadenas) {
      lcd.setCursor(0, 1);
      lcd.write(2);
      lcd.setCursor(15, 1);
      lcd.write(2);
      digitalWrite(ledpin3, LOW);
      digitalWrite(ledpin4, HIGH);
    }
    else {
      lcd.setCursor(0, 1);
      lcd.write(1);
      lcd.setCursor(15, 1);
      lcd.write(1);
      digitalWrite(ledpin3, HIGH);
      digitalWrite(ledpin4, LOW);
    }

  }
  if (Serial.available()) {
    char c = Serial.read();
    Serial.println("Valeur entrée:");
    Serial.println(c);

    if (c == '8') { // si 8 est tapé dans le moniteur série, la porte s'ouvre
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MALO LENORMAND");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MALO LENORMAND");
      tone (buzzer, 1000);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      Ouvert();
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      boutonFermeturePorte = true;
    }
    if (c == '3') { // si 3 est tapé dans le moniteur série, la porte s'ouvre
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      Ferme();
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MALO LENORMAND");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MALO LENORMAND");
      tone (buzzer, 500);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      delay(3000);
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      boutonFermeturePorte = false;
    }
    if (c == 'r') { // si r est tapé dans le moniteur série, le système se réinitialise
      Serial.println ("REINITIALISATION");
      tone (buzzer, 1000);
      lcd.clear();
      delay(500);
      noTone(buzzer);
    }
    if (c == 'm') { // si m est tapé dans le moniteur série, le système se met en maintenance

      lcd.clear();
      lcd.setCursor(3, 0);
      lcd.print("SERVICE EN");
      lcd.setCursor(3, 1);
      lcd.print("MAINTENANCE");
      Serial.println("MAINTENANCE");
      tone (buzzer, 500);
      delay(1000);
      noTone(buzzer);
      //delay(200000000);
      systemeEnMaintenance = true;
    }

    if (c == 's') { // si s est tapé dans le moniteur série, le système sort de maintenance

      lcd.clear();
      lcd.setCursor(3, 0);
      lcd.print("FIN DE LA");
      lcd.setCursor(3, 1);
      lcd.print("MAINTENANCE");
      Serial.println("MAINTENANCE OFF");
      tone (buzzer, 500);
      delay(1000);
      noTone(buzzer);
      systemeEnMaintenance = false;
    }
  }

  if (Serial1.available()) {
    BTDATA = Serial1.read();
  }
  if (Serial.available())
    Serial1.write(Serial.read());
  //********************************************
  if (!systemeEnMaintenance) {     // Si système pas en maintenance
    if (BTDATA == 'O') { //Si on reçoit un O, on ouvre la porte
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MALO LENORMAND");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MALO LENORMAND");
      tone (buzzer, 1000);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      Ouvert();
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = true;
    }
    if (BTDATA == 'F') { //Si on reçoit un F, on ferme la porte
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      Ferme();
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MALO LENORMAND");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MALO LENORMAND");
      tone (buzzer, 500);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      delay(3000);
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = false;
    }
    if (BTDATA == 'o') { //Si on reçoit un O, on ouvre la porte
      //LE BODIC
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MR LE BODIC");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR LE BODIC");
      tone (buzzer, 1000);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      Ouvert();
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = true;
    }
    if (BTDATA == 'f') { //Si on reçoit un F, on ferme la porte
      //LE BODIC
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      Ferme();
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MR LE BODIC");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR LE BODIC");
      tone (buzzer, 500);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      delay(3000);
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = false;
    }
    if (BTDATA == 'd') { //Si on reçoit un O, on ouvre la porte
      //Réparateur
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MR DE CRUZ");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR DE CRUZ");
      tone (buzzer, 1000);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      Ouvert();
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = true;
    }
    if (BTDATA == 'e') { //Si on reçoit un F, on ferme la porte
      //Réparateur
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      Ferme();
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MR DE CRUZ");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR DE CRUZ");
      tone (buzzer, 500);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      delay(3000);
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = false;
    }
    if (BTDATA == 'p') { //Si on reçoit un O, on ouvre la porte
      //Camenen
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MR CAMENEN");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR CAMENEN");
      tone (buzzer, 1000);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      Ouvert();
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = true;
    }
    if (BTDATA == 'q') { //Si on reçoit un F, on ferme la porte
      //Camenen
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      Ferme();
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MR CAMENEN");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR CAMENEN");
      tone (buzzer, 500);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      delay(3000);
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = false;
    }
    if (BTDATA == 'b') { //Si on reçoit un O, on ouvre la porte
      //Ewen
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : EWEN LE PRIOL");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("EWEN LE PRIOL");
      tone (buzzer, 1000);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      Ouvert();
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = true;
    }
    if (BTDATA == 'c') { //Si on reçoit un F, on ferme la porte
      //Ewen
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      Ferme();
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : EWEN LE PRIOL");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR CAMENEN");
      tone (buzzer, 500);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      delay(3000);
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = false;
    }
    if (BTDATA == 'h') { //Si on reçoit un O, on ouvre la porte
      //CPE
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MR LE BAGOUSSE");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR LE BAGOUSSE");
      tone (buzzer, 1000);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      Ouvert();
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = true;
    }
    if (BTDATA == 'i') { //Si on reçoit un F, on ferme la porte
      //CPE
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      Ferme();
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MR LE BAGOUSSE");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR LE BAGOUSSE");
      tone (buzzer, 500);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      delay(3000);
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = false;
    }
    if (BTDATA == 'j') { //Si on reçoit un O, on ouvre la porte
      //DIRECTEUR
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MR LE PICARD");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR LE PICARD");
      tone (buzzer, 1000);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      Ouvert();
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = true;
    }
    if (BTDATA == 'k') { //Si on reçoit un F, on ferme la porte
      //DIRECTEUR
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      Ferme();
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MR LE PICARD");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR LE PICARD");
      tone (buzzer, 500);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      delay(3000);
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = false;
    }
    if (BTDATA == 'l') { //Si on reçoit un O, on ouvre la porte
      //DANO
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MR DANO");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR DANO");
      tone (buzzer, 1000);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      Ouvert();
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = true;
    }
    if (BTDATA == 'n') { //Si on reçoit un F, on ferme la porte
      //DANO
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      Ferme();
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("ACCES:");
      Serial.print ("AUTORISE : MR DANO");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR DANO");
      tone (buzzer, 500);
      delay (1000);
      // stop, sound
      noTone(buzzer);
      delay(3000);
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      BTDATA = 0;
      boutonFermeturePorte = false;
    }
  }
  if (BTDATA == 'M') { //Si on reçoit un M, on active la maintenance
    lcd.clear();
    lcd.setCursor(3, 0);
    lcd.print("SERVICE EN");
    lcd.setCursor(3, 1);
    lcd.print("MAINTENANCE");
    Serial.println("MAINTENANCE");
    tone (buzzer, 500);
    delay(1000);
    noTone(buzzer);
    Ouvert();
    systemeEnMaintenance = true;
    BTDATA = 0;
  }
  if (BTDATA == 'S') { //Si on reçoit un S, on arrête la maintenance
    lcd.clear();
    lcd.setCursor(3, 0);
    lcd.print("FIN DE LA");
    lcd.setCursor(3, 1);
    lcd.print("MAINTENANCE");
    Serial.println("MAINTENANCE OFF");
    tone (buzzer, 500);
    delay(1000);
    noTone(buzzer);
    systemeEnMaintenance = false;
    BTDATA = 0;
  }
  if (BTDATA == 'm') { //Si on reçoit un M, on active la maintenance
    //LE BODIC
    lcd.clear();
    lcd.setCursor(3, 0);
    lcd.print("SERVICE EN");
    lcd.setCursor(3, 1);
    lcd.print("MAINTENANCE");
    Serial.println("MAINTENANCE");
    tone (buzzer, 500);
    delay(1000);
    noTone(buzzer);
    Ouvert();
    systemeEnMaintenance = true;
    BTDATA = 0;
  }
  if (BTDATA == 'a') { //Si on reçoit un S, on arrête la maintenance
    //LE BODIC
    lcd.clear();
    lcd.setCursor(3, 0);
    lcd.print("FIN DE LA");
    lcd.setCursor(3, 1);
    lcd.print("MAINTENANCE");
    Serial.println("MAINTENANCE OFF");
    tone (buzzer, 500);
    delay(1000);
    noTone(buzzer);
    systemeEnMaintenance = false;
    BTDATA = 0;
  }
  if (BTDATA == 'r') { //Si on reçoit un M, on active la maintenance
    //Réparateur
    lcd.clear();
    lcd.setCursor(3, 0);
    lcd.print("SERVICE EN");
    lcd.setCursor(3, 1);
    lcd.print("MAINTENANCE");
    Serial.println("MAINTENANCE");
    tone (buzzer, 500);
    delay(1000);
    noTone(buzzer);
    Ouvert();
    systemeEnMaintenance = true;
    BTDATA = 0;
  }
  if (BTDATA == 'g') { //Si on reçoit un S, on arrête la maintenance
    //Réparateur
    lcd.clear();
    lcd.setCursor(3, 0);
    lcd.print("FIN DE LA");
    lcd.setCursor(3, 1);
    lcd.print("MAINTENANCE");
    Serial.println("MAINTENANCE OFF");
    tone (buzzer, 500);
    delay(1000);
    noTone(buzzer);
    systemeEnMaintenance = false;
    BTDATA = 0;
  }
  if (BTDATA == 'v') { //Si on reçoit un M, on active la maintenance
    //Camenen
    lcd.clear();
    lcd.setCursor(3, 0);
    lcd.print("SERVICE EN");
    lcd.setCursor(3, 1);
    lcd.print("MAINTENANCE");
    Serial.println("MAINTENANCE");
    tone (buzzer, 500);
    delay(1000);
    noTone(buzzer);
    Ouvert();
    systemeEnMaintenance = true;
    BTDATA = 0;
  }
  if (BTDATA == 't') { //Si on reçoit un S, on arrête la maintenance
    //Camenen
    lcd.clear();
    lcd.setCursor(3, 0);
    lcd.print("FIN DE LA");
    lcd.setCursor(3, 1);
    lcd.print("MAINTENANCE");
    Serial.println("MAINTENANCE OFF");
    tone (buzzer, 500);
    delay(1000);
    noTone(buzzer);
    systemeEnMaintenance = false;
    BTDATA = 0;
  }
  if (BTDATA == 'V') { //Si on reçoit un V, on active le verrouillage du système
    Ferme();
    lcd.clear();
    lcd.setCursor(4, 0);
    lcd.print("SYSTEME ");
    lcd.setCursor(3, 1);
    lcd.print("VERROUILLE");
    Serial.println("SYSTEME VERROUILLE");
    tone (buzzer, 500);
    delay(1000);
    noTone(buzzer);
    //delay(200000000);
    systemeEnMaintenance = true;
    BTDATA = 0;
  }
  if (BTDATA == 's') { //Si on reçoit un s, on arrête le verrouillage du système
    lcd.clear();
    lcd.setCursor(4, 0);
    lcd.print("SYSTEME");
    lcd.setCursor(2, 1);
    lcd.print("DEVERROUILLE");
    Serial.println("SYSTEME DEVERROUILLE");
    tone (buzzer, 500);
    delay(1000);
    noTone(buzzer);
    Ouvert();
    systemeEnMaintenance = false;
    BTDATA = 0;
  }
  if (!systemeEnMaintenance) {     // Si système pas en maintenance
    //if (irrecv.decode(&results))
    //{
    //  Serial.println(results.value,HEX);
    //  irrecv.resume();
    //}
    //if (results.value == CODE_IR_9)
    //{
    //  Ouvert();
    //}
    //if (results.value == CODE_IR_0)
    //{
    //  Ferme();
    //}
    etatbouton = digitalRead (bouton);
    if (etatbouton == HIGH) {
      Serial.println("FERMETURE EN COURS");
      lcd.clear();
      lcd.setCursor(3, 0);
      lcd.print("FERMETURE");
      lcd.setCursor(3, 1);
      lcd.print("EN COURS");
      delay(1000);
      Ferme();
      tone (buzzer, 500);
      // wait 1 second
      delay (1000);
      // stops sound
      noTone(buzzer);
      delay(250);
      Serial.println("FERMETURE TERMINEE");
      lcd.clear();
      lcd.setCursor(3, 0);
      lcd.print("FERMETURE");
      lcd.setCursor(3, 1);
      lcd.print("TERMINEE");
      delay(2000);
      lcd.clear();
      boutonFermeturePorte = false;
    }
    etatbouton2 = digitalRead (bouton2);
    if (etatbouton2 == HIGH) {
      Serial.println("OUVERTURE EN COURS");
      lcd.clear();
      lcd.setCursor(3, 0);
      lcd.print("OUVERTURE");
      lcd.setCursor(3, 1);
      lcd.print("EN COURS");
      delay(1000);
      tone (buzzer, 1000);
      // wait 1 second
      delay (1000);
      // stops sound
      noTone(buzzer);
      delay(250);
      Serial.println("OUVERTURE TERMINEE");
      lcd.clear();
      lcd.setCursor(3, 0);
      lcd.print("OUVERTURE");
      lcd.setCursor(3, 1);
      lcd.print("TERMINEE");
      Ouvert();
      lcd.clear();
      boutonFermeturePorte = true;
    }
    etatbouton3 = digitalRead (bouton3);
      if (etatbouton3 == HIGH) {
        iconeCadenas = false;
      }
      
    // see if no new maps are detected
    digitalWrite (ledpin1, LOW);
    if (! myReader.PICC_IsNewCardPresent ())
    {

      // not found, stops searching
      return;
    }
    // Checks whether the key tag can be read
    if (! myReader.PICC_ReadCardSerial ())
    {
      // failed to read
      return;
    }
    // Show UID on serial monitor
    String key = "";
    for (byte i = 0; i < myReader.uid.size; i ++)
    {
      key.concat (String (myReader.uid.uidByte [i] < 0x10 ? "0 " : " "));
      key.concat (String (myReader.uid.uidByte [i], HEX));
    }
    // Uppercase code of found key for better comparison
    key.toUpperCase ();

    // Print to monitor so you know which key is being read
    Serial.println ();
    Serial.print ("Badge d'accès :");
    Serial.print (key);

    // Grants access if key “..” is the same
    // Each key tag has its own code, read your code via monitor
    Serial.println ();
    Serial.print ("ACCES: ");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("ACCES: ");

    if (key == BADGE_PORT_PLAISANCE)
    {

      // LED rouge off, LED verte on
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      // Determines the frequency of the buzzer
      tone (buzzer, 1000);
      delay (1000);
      // stop, sound
      noTone(buzzer);

      // Print on monitor
      Serial.print ("AUTORISE : MALO LENORMAND");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MALO LENORMAND");
      Ouvert();
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      boutonFermeturePorte = true;
    }

    else if (key == BADGE_BLEU)
    {

      // LED rouge off, LED verte on
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      // Déterminer la fréquence du buzzer
      tone (buzzer, 1000);
      delay (1000);
      // Stoper le son
      noTone(buzzer);

      // Écrire sur le moniteur
      Serial.print ("AUTORISE : MALO LENORMAND");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MALO LENORMAND");
      Ouvert();
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, LOW);
      boutonFermeturePorte = true;
    }

    else if (key == BADGE_NFC)
    {

      // LED rouge off, LED verte on
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      // Déterminer la fréquence du buzzer
      tone (buzzer, 1000);
      delay (1000);
      // Stoper le son
      noTone(buzzer);

      // Écrire sur le moniteur
      Serial.print ("AUTORISE : MALO LENORMAND");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MALO LENORMAND");
      Ouvert();
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      boutonFermeturePorte = true;
    }

    else if (key == BADGE_ROUGE)
    {

      // LED rouge off, LED verte on
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      // Déterminer la fréquence du buzzer
      tone (buzzer, 1000);
      delay (1000);
      // Stoper le son
      noTone(buzzer);

      // Écrire sur le moniteur
      Serial.print ("AUTORISE : MALO LENORMAND");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MALO LENORMAND");
      Ouvert();
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      boutonFermeturePorte = true;
    }

    else if (key == JEAN)
    {

      // LED rouge off, LED verte on
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      // Déterminer la fréquence du buzzer
      tone (buzzer, 1000);
      delay (1000);
      // Stoper le son
      noTone(buzzer);

      // Écrire sur le moniteur
      Serial.print ("AUTORISE : JEAN KERMORVANT");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("JEAN KERMORVANT");
      Ouvert();
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      boutonFermeturePorte = true;
    }

    else if (key == CPE)
    {

      // LED rouge off, LED verte on
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      // Déterminer la fréquence du buzzer
      tone (buzzer, 1000);
      delay (1000);
      // Stoper le son
      noTone(buzzer);

      // Écrire sur le moniteur
      Serial.print ("AUTORISE : CPE");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR LE BAGOUSSE");
      Ouvert();
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      boutonFermeturePorte = true;
    }

    else if (key == ERIC_CAMENEN)
    {

      // LED rouge off, LED verte on
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      // Déterminer la fréquence du buzzer
      tone (buzzer, 1000);
      delay (1000);
      // Stoper le son
      noTone(buzzer);

      // Écrire sur le moniteur
      Serial.print ("AUTORISE : ERIC CAMENEN");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR CAMENEN");
      Ouvert();
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      boutonFermeturePorte = true;
    }

    else if (key == LEBODIC)
    {

      // LED rouge off, LED verte on
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      // Déterminer la fréquence du buzzer
      tone (buzzer, 1000);
      delay (1000);
      // Stoper le son
      noTone(buzzer);

      // Écrire sur le moniteur
      Serial.print ("AUTORISE : STEPHANE LE BODIC");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR LE BODIC");
      Ouvert();
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      boutonFermeturePorte = true;
    }

    else if (key == DIRECTEUR)
    {

      // LED rouge off, LED verte on
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      // Déterminer la fréquence du buzzer
      tone (buzzer, 1000);
      delay (1000);
      // Stoper le son
      noTone(buzzer);

      // Écrire sur le moniteur
      Serial.print ("AUTORISE : MR LE PICARD");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR LE PICARD");
      Ouvert();
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      boutonFermeturePorte = true;
    }

    else if (key == DE_CRUZ)
    {

      // LED rouge off, LED verte on
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      // Déterminer la fréquence du buzzer
      tone (buzzer, 1000);
      delay (1000);
      // Stoper le son
      noTone(buzzer);

      // Écrire sur le moniteur
      Serial.print ("AUTORISE : TECHNICIEN");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR DE CRUZ");
      Ouvert();
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      boutonFermeturePorte = true;
    }

    else if (key == DANO)
    {

      // LED rouge off, LED verte on
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      // Déterminer la fréquence du buzzer
      tone (buzzer, 1000);
      delay (1000);
      // Stoper le son
      noTone(buzzer);

      // Écrire sur le moniteur
      Serial.print ("AUTORISE : MR DANO");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("MR DANO");
      Ouvert();
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      boutonFermeturePorte = true;
    }

    else if (key == EWEN)
    {

      // LED rouge off, LED verte on
      digitalWrite (ledpin1, LOW);
      digitalWrite (ledpin2, HIGH);
      // Déterminer la fréquence du buzzer
      tone (buzzer, 1000);
      delay (1000);
      // Stoper le son
      noTone(buzzer);

      // Écrire sur le moniteur
      Serial.print ("AUTORISE : EWEN LE PRIOL");
      lcd.setCursor(7, 0);
      lcd.print("AUTORISE");
      lcd.setCursor(0, 1);
      lcd.print("EWEN LE PRIOL");
      Ouvert();
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);
      boutonFermeturePorte = true;
    }

    else {

      // Red LED on, green off
      digitalWrite (ledpin1, HIGH);
      digitalWrite (ledpin2, LOW);

      // Determines the frequency of the buzzer
      tone (buzzer, 500);
      // wait 1 second
      delay (1000);
      // stops sound
      noTone(buzzer);

      // Print on monitor
      Serial.print ("REFUSE");
      lcd.setCursor(7, 0);
      lcd.print("REFUSE");
      lcd.setCursor(0, 1);
      lcd.print(key);
      delay (3000);
    }
    Serial.println ();

    //etatbouton2 = digitalRead (bouton2);
    //  if (etatbouton2==HIGH) {
    //   Serial.println("lecture en cours...");
    //   #define BADGE key
    //  }

  }
}

void Ouvert() {
  //monServomoteur.write(ouvert); // voir #define en haut
  digitalWrite(ElectroAimant, LOW);
  iconeCadenas = true;
  delay(5000);
  digitalWrite(ElectroAimant, HIGH);
}

void Ferme() {
  //monServomoteur.write(ferme); // voir #define en haut
  digitalWrite(ElectroAimant, HIGH);
  iconeCadenas = false;
}

void debut() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("A");
  delay(400);
  lcd.clear();
  delay(400);
  lcd.setCursor(0, 0);
  lcd.print("A");
  delay(400);
  lcd.clear();
  delay(500);
  lcd.setCursor(0, 0);
  lcd.print("A");
  delay(tempsdarret);
  lcd.setCursor(1, 0);
  lcd.print("R");
  delay(tempsdarret);
  lcd.setCursor(2, 0);
  lcd.print("D");
  delay(tempsdarret);
  lcd.setCursor(3, 0);
  lcd.print("U");
  delay(tempsdarret);
  lcd.setCursor(4, 0);
  lcd.print("I");
  delay(tempsdarret);
  lcd.setCursor(5, 0);
  lcd.print("N");
  delay(tempsdarret);
  lcd.setCursor(6, 0);
  lcd.print("O");
  delay(tempsdarret);
  lcd.setCursor(8, 0);
  lcd.print("S");
  delay(tempsdarret);
  lcd.setCursor(9, 0);
  lcd.print("E");
  delay(tempsdarret);
  lcd.setCursor(10, 0);
  lcd.print("C");
  delay(tempsdarret);
  lcd.setCursor(11, 0);
  lcd.print("U");
  delay(tempsdarret);
  lcd.setCursor(12, 0);
  lcd.print("R");
  delay(tempsdarret);
  lcd.setCursor(13, 0);
  lcd.print("I");
  delay(tempsdarret);
  lcd.setCursor(14, 0);
  lcd.print("T");
  delay(tempsdarret);
  lcd.setCursor(15, 0);
  lcd.print("Y");
  delay(tempsdarret);
  lcd.setCursor(0, 1);
  lcd.print("C");
  delay(tempsdarret);
  lcd.setCursor(1, 1);
  lcd.print("O");
  delay(tempsdarret);
  lcd.setCursor(2, 1);
  lcd.print("R");
  delay(tempsdarret);
  lcd.setCursor(3, 1);
  lcd.print("P");
  delay(tempsdarret);
  lcd.setCursor(4, 1);
  lcd.print("O");
  delay(tempsdarret);
  lcd.setCursor(5, 1);
  lcd.print("R");
  delay(tempsdarret);
  lcd.setCursor(6, 1);
  lcd.print("A");
  delay(tempsdarret);
  lcd.setCursor(7, 1);
  lcd.print("T");
  delay(tempsdarret);
  lcd.setCursor(8, 1);
  lcd.print("I");
  delay(tempsdarret);
  lcd.setCursor(9, 1);
  lcd.print("O");
  delay(tempsdarret);
  lcd.setCursor(10, 1);
  lcd.print("N");
  delay(tempsdarret);
  lcd.setCursor(12, 1);
  lcd.print("V");
  delay(tempsdarret);
  lcd.setCursor(13, 1);
  lcd.print("1");
  delay(tempsdarret);
  lcd.setCursor(14, 1);
  lcd.print(".");
  delay(tempsdarret);
  lcd.setCursor(15, 1);
  lcd.print("0");
  delay(1000);
  tone(buzzer, 1000);
  delay(250);
  noTone(buzzer);
  delay(250);
  tone(buzzer, 1000);
  delay(250);
  noTone(buzzer);
  delay(250);
  tone(buzzer, 1000);
  delay(250);
  noTone(buzzer);
  lcd.clear();
  lcd.setCursor(2, 0);
  lcd.print("L");
  delay(400);
  lcd.clear();
  delay(400);
  lcd.setCursor(2, 0);
  lcd.print("L");
  delay(400);
  lcd.clear();
  delay(500);
  lcd.setCursor(2, 0);
  lcd.print("L");
  delay(tempsdarret);
  lcd.setCursor(3, 0);
  lcd.print("A");
  delay(tempsdarret);
  lcd.setCursor(4, 0);
  lcd.print("N");
  delay(tempsdarret);
  lcd.setCursor(5, 0);
  lcd.print("C");
  delay(tempsdarret);
  lcd.setCursor(6, 0);
  lcd.print("E");
  delay(tempsdarret);
  lcd.setCursor(7, 0);
  lcd.print("M");
  delay(tempsdarret);
  lcd.setCursor(8, 0);
  lcd.print("E");
  delay(tempsdarret);
  lcd.setCursor(9, 0);
  lcd.print("N");
  delay(tempsdarret);
  lcd.setCursor(10, 0);
  lcd.print("T");
  delay(tempsdarret);
  lcd.setCursor(12, 0);
  lcd.print("D");
  delay(tempsdarret);
  lcd.setCursor(13, 0);
  lcd.print("E");
  lcd.setCursor(0, 1);
  lcd.print("R");
  delay(tempsdarret);
  lcd.setCursor(1, 1);
  lcd.print("F");
  delay(tempsdarret);
  lcd.setCursor(2, 1);
  lcd.print("I");
  delay(tempsdarret);
  lcd.setCursor(3, 1);
  lcd.print("D");
  delay(tempsdarret);
  lcd.setCursor(5, 1);
  lcd.print("S");
  delay(tempsdarret);
  lcd.setCursor(6, 1);
  lcd.print("E");
  delay(tempsdarret);
  lcd.setCursor(7, 1);
  lcd.print("C");
  delay(tempsdarret);
  lcd.setCursor(8, 1);
  lcd.print("U");
  delay(tempsdarret);
  lcd.setCursor(9, 1);
  lcd.print("R");
  delay(tempsdarret);
  lcd.setCursor(10, 1);
  lcd.print("I");
  delay(tempsdarret);
  lcd.setCursor(11, 1);
  lcd.print("T");
  delay(tempsdarret);
  lcd.setCursor(12, 1);
  lcd.print("Y");
  delay(400);
  lcd.setCursor(13, 1);
  lcd.print(".");
  delay(400);
  lcd.setCursor(14, 1);
  lcd.print(".");
  delay(400);
  lcd.setCursor(15, 1);
  lcd.print(".");
  delay(400);
  lcd.setCursor(13, 1);
  lcd.print(" ");
  lcd.setCursor(14, 1);
  lcd.print(" ");
  lcd.setCursor(15, 1);
  lcd.print(" ");
  delay(400);
  lcd.setCursor(13, 1);
  lcd.print(".");
  delay(400);
  lcd.setCursor(14, 1);
  lcd.print(".");
  delay(400);
  lcd.setCursor(15, 1);
  lcd.print(".");
  delay(400);
  lcd.setCursor(13, 1);
  lcd.print(" ");
  lcd.setCursor(14, 1);
  lcd.print(" ");
  lcd.setCursor(15, 1);
  lcd.print(" ");
  delay(400);
  lcd.setCursor(13, 1);
  lcd.print(".");
  delay(400);
  lcd.setCursor(14, 1);
  lcd.print(".");
  delay(400);
  lcd.setCursor(15, 1);
  lcd.print(".");
  delay(400);
  lcd.setCursor(13, 1);
  lcd.print(" ");
  lcd.setCursor(14, 1);
  lcd.print(" ");
  lcd.setCursor(15, 1);
  lcd.print(" ");
  lcd.clear();
}

Merci par avance pour votre aide.
Cordialement,
Geek56.

Salut. Un bus SPI se partage, il est fait pour cela.
Il suffit simplement de choisir une broche SS (chip select) différent pour chaque module.

Merci de ta réponse. Si j'ai bien compris, je peux brancher les broches SPI sur une breadbord et les raccorder aux deux lecteurs en même temps, non ?
Cordialement,
Geek56.

Oui, MOSI, MISO, CLOCK en parallèle, et deux broches SS, 53 pour le lecteur RFID :

Pour la SD choisis une autre broche, au choix.

Je peux choisir n'importe quelle broche ?
Cordialement,
Geek56.

Oui, à partir du moment où ce n'est pas une broche à problème, comme RX ou TX.
Ensuite tu passes le N° de broche à la librairie SDFAT :

  if (!SD.begin(pin_choisie)) {

Bonjour,
désolé de répondre si tard mais j'ai été très occupé. J'ai pu tester ce que tu (@hbachetti) m'avais dit de faire et cela ne marche pas. Déjà que avec un programme qui ne fait fonctionner qu'un des deux (par exemple le lecteur RFID), le composant testé ne marche pas alors qu'il marche sans qu'il n'y ait d'autres lecteurs de branchés sur le SPI. Je n'ai donc pas testé avec un programme qui les faisait fonctionner en même temps. J'ai même essayé avec plusieurs broches pour le SS du lecteur SD mais ça ne marchait toujours pas.
Merci d'avance.
Cordialement,
Geek56.

Tu veux dire qu'avec un lecteur SD et le lecteur RFID branchés sur le SPI, avec des SS différents, même un logiciel simple de lecture RFID ne fonctionne pas ? Alors qu'il fonctionne sans lecteur SD branché ?
C'est effectivement étrange, mais cela peut arriver que par exemple le lecteur SD ait besoin d'être initialisé pour que les broches MISO et MOSI soient dans un état correct.
J'ai déjà expérimenté un cas avec une carte Ehernet et un lecteur SD. Si la carte Ethernet n'est pas initialisée avant le lecteur SD, la SD n'est pas vue.
Je n'ai jamais essayé RFID + SD.

Effectivement, tu as compris. Que me conseilles-tu donc de faire ? Peut-être d'initialiser les deux lecteurs dans le programme ?

Oui, peut être le RFID en premier, ensuite la SD, ou le contraire.

J'ai fait un petit essai avec une MEGA.
SS du RFID sur 53
SS de la SD sur 49
Si les deux modules sont branchés, le lecteur RFID fonctionne.
Par contre la SD ne fonctionne pas. Si je retire le lecteur RFID elle fonctionne.
J'ai beau initialiser le RFID dans le sketch de lecture SD (exemple SDinfo de SDFat) pas moyen d'initialiser la SD.
Il y a bien un problème, mais je ne suis pas le seul :
Google

Pour être franc, après avoir été échaudé avec un montage carte Ethernet + carte SD sur une MEGA, je n'ai jamais été convaincu par la SD sur ARDUINO. Certaines SD fonctionnent très bien, d'autres pas du tout, d'autres provoquent des erreurs de manière aléatoire.

J'ai réalisé un projet de contrôle d'accès avec un ESP32 (serveur WEB) et un RC522, en utilisant les systèmes de fichiers SPIFFS et FAT pour le stockage.

Tout dépend de l'espace de stockage dont tu as besoin. En général une SD a une capacité monstrueuse pour nos petits besoins.

Pour ma part j'avais partitionné la FLASH comme ceci :

  • 64Ko SPIFFS pour les fichiers HTML
  • 1,4Mo FAT pour les données liées au lecteur RFID :
    • données cartes
      • N° de cartes
      • noms des utilisateurs
      • durée de validité
      • solde
    • journal historique

Cela marche très bien.

Ok merci, pour le moment je ne peux pas accéder à arduino car j'ai un problème avec JAVA. Moi aussi j'ai fait un système de contrôle d'accès dont vous trouverez le code en haut de la page, sur ma première publication. Mon lecteur SD marche normalement sur une arduino mega sans autre lecteur sur le SPI. J'ai 4 Go sur ma carte SD et je voudrais juste enregistrer dans un fichier .txt l'horodatage, l'action réalisée et l'identifiant du badge ainsi que son propriétaire. Je pense que ceci ne devrait pas poser de problème mais reste le problème de brancher les deux lecteurs sur le SPI.

Et tu penses que les 4K d'EEPROM de la MEGA ne suffisent pas ?

Je ne connais pas. Tu peux m'expliquer s'il te plait ?

C'est une mémoire interne à l'ATMEGA2560, non volatile.
Il existe de nombreux tutos :
Google

Le problème est que l'EEPROM est un bout de mémoire à plat, sans système de fichiers, et on doit gérer soi même les emplacements où l'on écrit, où l'on lit, index, etc. Ce n'est pas de la tarte.
Il existe cependant des librairies : Google

Avec un ESP32 il est possible de bénéficier d'un système de fichiers (1.5Mo), FAT, SPIFFS ou LittleFS, se rapprochant beaucoup plus du fonctionnement d'une SD.

Et avec une mega ?

Pas de filesystem d'un niveau équivalent.

Ok. Et en plus, ce serait plus simple d'utiliser un lecteur de carte SD mais il n'y a vraiment aucune alternative au SPI ?