Bonjour,
Tout est dans le titre : je voudrais connecter mon arduino méga avec un module RFID ET un module micro SD.
J'ai donc branché mon module SD sur mon Méga comme ceci : 3v3 >> 3v3 ; CS >> 53 ; MOSI >> 51 ; CLK >> 52 ; MISO >> 50 et GND >> GND.
Mais du coup, je ne peux brancher mon RFID vu que les PINs 50, 51 et 52 sont déjà utilisés !
J'ai essayé avec les PINs 8, 9, 10, 11, 12, 13 mais ça bug (Bon, je m'y attendais un peu).
Je tien à préciser que j'ai également un LCD branché sur les PINs 2, 3, 4, 5, 6, et 7.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
 
#include <SD.h> //carte SD
#include <LiquidCrystal.h> //LCD
#include <SPI.h> // SPI
#include <MFRC522.h> // RFID
 
#define SS_PIN 10
#define RST_PIN 9
 
 
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
MFRC522 rfid(SS_PIN, RST_PIN); 
 
// déclaration de quelques variables
const int chipSelect = 53;  //pin de l'Arduino reliee au CS du module SD
Sd2Card card;
SdVolume volume;
SdFile root;
File myFile;
 
byte nuidPICC[4];
 
bool Setup = false;
 
void setup()
{
  // définition des dimensions du LCD
  lcd.begin(16, 2);
  SPI.begin(); 
  rfid.PCD_Init(); 
 
  lcd.setCursor(2, 0);
  lcd.print("Recherche de");
  lcd.setCursor(4, 1);
  lcd.print("carte SD");
 
  delay(2000);
 
  pinMode(10, OUTPUT);     // 53 si ArduinoMega. Peu importe la valeur de chipSelect.
 
  // On vérifie si une carte est présente
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    lcd.clear();
    lcd.setCursor(1, 0);
    lcd.print("pas de carte ?");
    return;
  } 
  else {
    lcd.clear();
    lcd.setCursor(4, 0);
    lcd.print("la carte"); 
 
    lcd.setCursor(2, 1);
    lcd.print("est bien la.");
  }
 
  // On trouve le volume
  if (!volume.init(card)) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("FORMATAGE REQUIS");
    lcd.setCursor(2, 1);
    lcd.print("OU INCORRECT");
    return;
  }
 
  delay(2000);
 
  // On se prepare a jouer dans les fichiers
  if (!SD.begin(chipSelect)) {
    lcd.clear();
    lcd.setCursor(4, 0);
    lcd.print("Echec de");
    lcd.setCursor(0, 1);
    lcd.print("l'initialisation");
    return;
  }
  lcd.clear();
  lcd.setCursor(1, 0);
  lcd.print("Initialisation");
  lcd.setCursor(7, 1);
  lcd.print("OK");
 
  delay(2000);
  // ouverture du fichier pour ecriture (il sera créé s'il n'existait pas déjà)
  myFile = SD.open("SECRET.txt", FILE_WRITE);
  // Si l'ouverture du fichier a fonctionné, on écrit quelque chose à l'intérieur
  if (myFile) {
    lcd.clear();
    lcd.setCursor(1, 0);
    lcd.print("Ecriture dans");
    lcd.setCursor(1, 1);
    lcd.print("le fichier...");
 
 
    myFile.println("Arduino est venu ici!");
    // fermeture du fichier
    myFile.close();
  } 
  else {
    // si l'ouverture du fichier a échoué, on l'indique
    file_error();
  }
 
  delay(2000);
 
  // on ouvre le fichier, et on vérifie son contenu
  myFile = SD.open("SECRET.txt");
  if (!myFile) {
    file_error();
  }
 
  Setup = true;
}
 
 
void loop(void) {
  lcd.clear();
  if(Setup){
    if ( !rfid.PICC_IsNewCardPresent()){
      return;
    }
 
    if ( !rfid.PICC_ReadCardSerial()){
      return;
    }
 
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }
 
    lcd.clear();
    lcd.setCursor(1, 0);
    lcd.print("badge detected");
    for (byte i = 0; i < 4; i++) 
    {
      lcd.setCursor(3*1, 1);
      lcd.print(nuidPICC[i], HEX);
      lcd.print("-");
    }
 
 
    // Re-Init RFID
    rfid.PICC_HaltA(); // Halt PICC
    rfid.PCD_StopCrypto1(); // Stop encryption on PCD
  }
  delay(100);
}
 
void file_error(){
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("@#@##@FILE#@##@#");
    lcd.setCursor(0, 1);
    lcd.print("#@##@ERROR@@#@@");
}
Voilà.
Merci d'avance.