Leggere RFID e scrivere su microSD...forse

Ciao a tutti,
con un piccolo Nano volevo leggere il valore del token RFID frequenza 13,56MHz e scriverlo su una micro SD. Detto così mi sembrava abbastanza semplice visto che gli esempi in rete sono parecchi.
Fatto il tutto e messo in parallelo le linee SPI e i CS su pin diversi : D10 e D4 o leggo il token, togliendo le linee del lettore/scrittore Sd o scrivo sulla microSd togliendo il lettore dei token
Vi allego il programmino che ho cercato di fare; nell'intestazione sono specificati i collegamenti con il Nano
Ovviamente sto sbagliando da qualche parte , ma non capisco dove

/*
 * ARDUINO RFID KIT 13.56 MHZ
 * -----------------------------------------------------------------------------------------
 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
 *             Reader/PCD   Uno           Mega      Nano v3    Leonardo/Micro   Pro Micro
 * Signal      Pin          Pin           Pin       Pin        Pin              Pin
 * -----------------------------------------------------------------------------------------
 * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
 * SPI SS      SDA(SS)      10            53        D10        10               10
 * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
 * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
 * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
 * -----------------------------------------------------------------------------------------
 *             Reader/uSD   Uno                 Nano v3        
 * Signal      Pin          Pin                  Pin           
 * -----------------------------------------------------------------------------------------
 * CS          CS           D4                    D4           
 * SPI MOSI    MOSI         11 / ICSP-4           D11          
 * SPI MISO    MISO         12 / ICSP-1           D12          
 * SPI SCK     SCK          13 / ICSP-3           D13        
 * 
 */
#include <SPI.h>
#include <MFRC522.h>
#include <SD.h>
#define SDA_FID 10 
#define RESET_FID 9
unsigned long ccl;
File myFile;
MFRC522 RC522(SDA_FID, RESET_FID); 
String codiceLetto;
int xarray[4];
int j;
//============================================================================== 
void setup(){ 
  Serial.begin(9600);
  SPI.begin(); 
  Serial.print("Setup SPI...");
  Serial.println("Inizializzazione OK !!"); 
  codiceLetto="prova registrazione token";
  Serial.println("Scrivo intestazione !!");
  scrivi();
  leggi();
  Serial.println("Avvicina token da leggere...");
}  
//============================================================================== 
void loop(){   
   RC522.PCD_Init();
   delay(500);
   if ( ! RC522.PICC_IsNewCardPresent() || ! RC522.PICC_ReadCardSerial() ) {
        delay(50); return;}                
      for (byte i = 0; i < RC522.uid.size; i++) {   
           xarray[i]=(RC522.uid.uidByte[i]);             
        }
     
     codiceLetto=String();   
     for (int j=0;j<4;j++)
     {
       codiceLetto+=xarray[j];        
     }
  Serial.print("Codice letto ");
  Serial.println(codiceLetto);
   ccl=(codiceLetto.toInt());
   Serial.print("Valore:");
   Serial.println(ccl);
   Serial.print("Stringa: ");
   Serial.println(codiceLetto);
   Serial.println();
   scrivi();
  delay(1000);  
  Serial.println("Avvicina token da leggere...");
}
//==================================================================
void scrivi(){ 
    Serial.print("Inizializzo la SDcard...");
//  pinMode(10, OUTPUT);   
  if (!SD.begin(4)) {
    Serial.println("Inizializzazione FALLITA !!");
    return;
  }
  Serial.println("Inizializzazione OK !!");
  myFile = SD.open("test.txt", FILE_WRITE);
  if (myFile) {
    Serial.print("SCRIVO su file test.txt..."); 
    myFile.println(codiceLetto);     
    myFile.close();                       
    Serial.println(" FATTO !!");    
    Serial.println();    
  } }
//=============================================================
void leggi(){
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("LEGGO dati da file test.txt: ");
    
// Leggo dal file e scrivo su seriale fino a quando non trovo niente altro 
   while (myFile.available()) {

          Serial.write(myFile.read());
        }   
          myFile.close();     // Chiudo il file 
        } 
  }

se leggo il tochen staccando le linee SPI della Sd ottengo

Setup SPI...Inizializzazione OK !!
Scrivo intestazione !!
Inizializzo la SDcard...Inizializzazione FALLITA !!
Avvicina token da leggere...
Codice letto 685776219
Valore:685776219
Stringa: 685776219

Inizializzo la SDcard...Inizializzazione FALLITA !!
Avvicina token da leggere...

Viceversa scrivo e leggo su Sd ma non leggo token

Un grazie in anticipo a chi mi vorrà aiutare

hai provato ad assegnare le porte nel setup()

pinMode(4,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(10,HIGH);

Fatto, ma nulla
così come è scrive e poi legge la sd e poi tutto fermo su leggi token
ho provato ad abilitare alternativamente 10 e il 4 ma nulla

Durante le varie prove ho notato che mettendo il MISO di uno o dell'altro abilitavo la relativa funzione come se ci fosse un'interruttore e per curiosità con un interruttore su pin12 che commuta i due MISO ora va uno ora l'altro.

Nel bus SPI, MISO, MOSI e SCK sono sempre in comune con tutti, non devi switcharli. In sostanza tutti vedono quel che ci passa sopra, ma l'unico che ci presta davvero attenzione è il dispositibo il cui SS è basso (nota infatti che SS è un segnale active-low), per cui è questo che devi switchare, eventualmente.

Comunque così a occhio lo sketch mi sembra corretto, è strano che non funzioni. Se ho tempo lo provo anch'io.

Grazie SukkoPera,
Ora riprovo facendo delle routine con basso 4 e alto 10 e alla fine alto4 e basso10 vediamo se combino qualcosa; Le linee SPI sono rigorosamente in parallelo e sono solo due.
vado a riprovare, ciao

ciao SukkoPera,
ho riprovato mettendo dei blocchi per settare le patenze, forse è esagerato ma comunque non va neppure così.
il tutto qui

/*
 * ARDUINO RFID KIT 13.56 MHZ
 * -----------------------------------------------------------------------------------------
 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
 *             Reader/PCD   Uno           Mega      Nano v3    Leonardo/Micro   Pro Micro
 * Signal      Pin          Pin           Pin       Pin        Pin              Pin
 * -----------------------------------------------------------------------------------------
 * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
 * SPI SS      SDA(SS)      10            53        D10        10               10
 * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
 * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
 * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
 * -----------------------------------------------------------------------------------------
 *             Reader/uSD   Uno                 Nano v3        
 * Signal      Pin          Pin                  Pin           
 * -----------------------------------------------------------------------------------------
 * CS          CS           D4                    D4           
 * SPI MOSI    MOSI         11 / ICSP-4           D11          
 * SPI MISO    MISO         12 / ICSP-1           D12          
 * SPI SCK     SCK          13 / ICSP-3           D13        
 * 
 */
#include <SPI.h>
#include <MFRC522.h>
#include <SD.h>
#define SDA_FID 10 
#define RESET_FID 9
unsigned long ccl;
File myFile;
MFRC522 RC522(SDA_FID, RESET_FID); 
String codiceLetto;
int xarray[4];
int j;
//============================================================================== 
void setup(){ 
  pinMode(4,OUTPUT);
  pinMode(10,OUTPUT);
  digitalWrite(4,HIGH);
  digitalWrite(10,HIGH);
  Serial.begin(9600);
  SPI.begin(); 
  Serial.print("Setup SPI...");
  Serial.println("Inizializzazione OK !!"); 
  codiceLetto="prova registrazione token";
  Serial.println("Scrivo intestazione !!");
  scrivi();
  Serial.println("Avvicina token da leggere...");
}  
//============================================================================== 
void loop(){ 
    pinMode(4,OUTPUT);
    pinMode(10,OUTPUT);
    digitalWrite(4,HIGH);
    digitalWrite(10,HIGH);
    digitalWrite(10,LOW);
  RC522.PCD_Init();
    delay(500);
  if ( ! RC522.PICC_IsNewCardPresent() || ! RC522.PICC_ReadCardSerial() ) {
     delay(50); return;}                
  for (byte i = 0; i < RC522.uid.size; i++) {   
           xarray[i]=(RC522.uid.uidByte[i]);}
  codiceLetto=String();   
     for (int j=0;j<4;j++){
       codiceLetto+=xarray[j]; }
   Serial.print("Codice letto ");
   Serial.println(codiceLetto);
   ccl=(codiceLetto.toInt());
   Serial.print("Valore:");
   Serial.println(ccl);
   Serial.print("Stringa: ");
   Serial.println(codiceLetto);
   Serial.println();
     scrivi(); 
     leggi();
   delay(3000);  
   Serial.println("Avvicina token da leggere...");
}
//==================================================================
void scrivi(){ 
    Serial.print("Inizializzo la SDcard...");
    pinMode(4,OUTPUT);
    pinMode(10,OUTPUT);
    digitalWrite(4,HIGH);
    digitalWrite(10,HIGH);
    digitalWrite(4,LOW);  
 if (!SD.begin(4)) {
    Serial.println("Inizializzazione FALLITA !!");return;}
    Serial.println("Inizializzazione OK !!");
 myFile = SD.open("test.txt", FILE_WRITE);
 if (myFile) {
    Serial.print("SCRIVO su file test.txt..."); 
    myFile.println(codiceLetto);     
    myFile.close();                       
    Serial.println(" FATTO !!");    
    Serial.println();  } 
    }
//=============================================================
void leggi(){
    pinMode(4,OUTPUT);
    pinMode(10,OUTPUT);
    digitalWrite(4,HIGH);
    digitalWrite(10,HIGH);
    digitalWrite(4,LOW); 
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("LEGGO dati da file test.txt: ");
    while (myFile.available()) {
          Serial.write(myFile.read());}   
          myFile.close();     // Chiudo il file 
     } 
  }

per questa sera basta, sono fuso, riprenderò domani a mente fersca, ciao e grazie a tutti per il supporto

Mettere nel loop() if (!SD.begin(4)) non mi sembra così corretto, si inizializza la SD una volta sola nel setup e poi resta solo da aprire il file, scrivere e chiuderlo, perchè inizializzare ad ogni loop?
SPI.begin(); serve a niente nel tuo caso

questo si

Brunello:
hai provato ad assegnare le porte nel setup()

pinMode(4,OUTPUT);

pinMode(10,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(10,HIGH);

anche se non da nessun cambiamento ci va nel setup() però, non ovunque

void loop(){
    pinMode(4,OUTPUT);
    pinMode(10,OUTPUT);
    digitalWrite(4,HIGH);
    digitalWrite(10,HIGH);
    digitalWrite(10,LOW);


void setup(){
  pinMode(4,OUTPUT);
  pinMode(10,OUTPUT);
  digitalWrite(4,HIGH);
  digitalWrite(10,HIGH);


void scrivi(){
    Serial.print("Inizializzo la SDcard...");
    pinMode(4,OUTPUT);
    pinMode(10,OUTPUT);
    digitalWrite(4,HIGH);
    digitalWrite(10,HIGH);
    digitalWrite(4,LOW);  

void leggi(){
    pinMode(4,OUTPUT);
    pinMode(10,OUTPUT);
    digitalWrite(4,HIGH);
    digitalWrite(10,HIGH);
    digitalWrite(4,LOW);

pare ci sia un po' di confusione

Buongiorno Pablos,
la confusione generata dalla disperazione e dalla poca conoscenza , in senso inverso.
Non sapevo più che fare, ora modifico secondo i suggerimenti e pulisco
Grazie

Ecco fatto, ho snellito il tutto e fatte le modifiche suggerite, ora risulta così

/*
 * ARDUINO RFID KIT 13.56 MHZ
 * -----------------------------------------------------------------------------------------
 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
 *             Reader/PCD   Uno           Mega      Nano v3    Leonardo/Micro   Pro Micro
 * Signal      Pin          Pin           Pin       Pin        Pin              Pin
 * -----------------------------------------------------------------------------------------
 * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
 * SPI SS      SDA(SS)      10            53        D10        10               10
 * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
 * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
 * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
 * -----------------------------------------------------------------------------------------
 *             Reader/uSD   Uno                 Nano v3        
 * Signal      Pin          Pin                  Pin           
 * -----------------------------------------------------------------------------------------
 * CS          CS           D4                    D4           
 * SPI MOSI    MOSI         11 / ICSP-4           D11          
 * SPI MISO    MISO         12 / ICSP-1           D12          
 * SPI SCK     SCK          13 / ICSP-3           D13        
 * 
 */
#include <SPI.h>
#include <MFRC522.h>
#include <SD.h>
#define SDA_FID 10 
#define RESET_FID 9
unsigned long ccl;
File myFile;
MFRC522 RC522(SDA_FID, RESET_FID); 
String codiceLetto;
int xarray[4];
int j;
//============================================================================== 
void setup(){ 
  pinMode(4,OUTPUT);
  pinMode(10,OUTPUT);
  digitalWrite(4,HIGH);
  digitalWrite(10,HIGH);
  Serial.begin(9600);
  SPI.begin(); 
  Serial.print("Setup SPI...");
  Serial.println("Inizializzazione OK !!"); 
   if (!SD.begin(4)) {
    Serial.println("Inizializzazione microSD FALLITA !!");return;}
    Serial.println("Inizializzazione microSD OK !!");
  codiceLetto="prova registrazione codice";
  Serial.println("Scrivo intestazione !!");
  scrivi();
  Serial.println("Avvicina token da leggere...");
}  
//============================================================================== 
void loop(){ 
  RC522.PCD_Init();
    delay(500);
  if ( ! RC522.PICC_IsNewCardPresent() || ! RC522.PICC_ReadCardSerial() ) {
     delay(50); return;}                
  for (byte i = 0; i < RC522.uid.size; i++) {   
           xarray[i]=(RC522.uid.uidByte[i]);}
  codiceLetto=String();   
     for (int j=0;j<4;j++){
   codiceLetto+=xarray[j]; }
   ccl=(codiceLetto.toInt());
   Serial.print("Codice:");
   Serial.println(ccl);
     scrivi(); 
     leggi();
   delay(3000);  
   Serial.println("Avvicina token da leggere...");
}
//==================================================================
void scrivi(){ 
 myFile = SD.open("test.txt", FILE_WRITE);
 if (myFile) {
    Serial.print("SCRIVO su file test.txt..."); 
    myFile.println(codiceLetto);     
    myFile.close();                       
    Serial.println(" FATTO !!");    
    Serial.println();  } 
    }
//=============================================================
void leggi(){
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("LEGGO dati da file test.txt: ");
    while (myFile.available()) {
          Serial.write(myFile.read());}   
          myFile.close();     // Chiudo il file 
     } 
  }

ma ancora se ci sono entrambi non va ; solo allo start

Setup SPI...Inizializzazione OK !!
Inizializzazione microSD OK !!
Scrivo intestazione !!
SCRIVO su file test.txt... FATTO !!

Avvicina token da leggere...

dopo di che si ferma tutto; se tolgo il collegamento del MISO della schedina Sd legge ma non registra.

Setup SPI...Inizializzazione OK !!
Inizializzazione microSD FALLITA !!
Codice:2431987843
Avvicina token da leggere...
Codice:2431987843
Avvicina token da leggere...
Codice:2431987843

forse non sto selezionando la SD? non andrebbe selezionato alternativamente RFID e SD?
se si come fare senza mettere le dichiarazioni di cs alto e basso?
grazie

ALTRA AMENITA' ovviamente per me povero apprendista stregone:
sempre con il MISO della Sd staccato ho staccato involontariamente anche il 3,3V che da Arduino alimenta la scheda RFID e con mia sorpresa legge ugualmente i codici.
Non è che sto distruggendo qualcosa? ad ogni buon conto ho ripristinato il tutto