muy buenas
igual llego un poco tarde pero creo que se me ha ocurrido una posible solución.
la librería sd solo deja inicializar una única tarjeta por lo que al realizar la inicialización en el setup (una detrás de la otra) solo reconoce la una de ellas. para solventarlo he pensado en inicializarlas en el loop.
NOTA: el código lo he creado para escribir en dos sd de forma selectiva (yo decido en cual mediante un selector) no creo que sea difícil cambiarlo para lo que quieres. solo ten en cuenta que parece que la inicialización de cada una de ellas conlleva bastante tiempo de ciclo.
//inclusion de las librerias necesarias
#include<SD.h>//libreria para el empleo de tarjetas SD
/pines para el protocolo SPI no hace falta declararlos pero para tenerlos en cuenta
MISO-->Pin 50
MOSI-->Pin 51
SCK -->Pin 52
SS -->Pin 53/
/en vez de usar el pin 53 usaremos el 49 y el 48
pero el 53 ha de quedar como salida/
//comenzamos con la asignacion de pines
const int selector_tarjeta_1=5;
const int selector_tarjeta_2=6;
const int tarjeta_2=48;
const int tarjeta_1=49;
const int led_tarjeta_1=3;
const int led_tarjeta_2=4;
void setup(){
Serial.begin(9600);
//definimos las entradas
pinMode(selector_tarjeta_1,INPUT);
pinMode(selector_tarjeta_2,INPUT);
pinMode(2,INPUT);
//acivamos las PULLUP de las entradas para activarlas por nivel bajo
digitalWrite(2,HIGH);
digitalWrite(selector_tarjeta_1,HIGH);
digitalWrite(selector_tarjeta_2,HIGH);
//definimos las salidas
pinMode(tarjeta_1,OUTPUT);
pinMode(tarjeta_2,OUTPUT);
pinMode(led_tarjeta_1,OUTPUT);
pinMode(led_tarjeta_2,OUTPUT);
pinMode(53,OUTPUT);
//dejamos las salidas en su estado de reposo normal
digitalWrite(tarjeta_1,HIGH);//para seleccionar esta tarjeta se pondria la salida a nivel bajo
digitalWrite(tarjeta_2,HIGH);//para seleccionar esta tarjeta se pondria la salida a nivel bajo
digitalWrite(led_tarjeta_1,LOW);
digitalWrite(led_tarjeta_2,LOW);
//la inicialezacion de la tarjeta se realizará dentro del loop
}
void activar_tarjeta_1(){
desactivar_tarjeta_2();
do {
SD.begin(tarjeta_1);
}
while(!SD.begin(tarjeta_1));
digitalWrite(led_tarjeta_1,HIGH);
}
void desactivar_tarjeta_1(){
digitalWrite(led_tarjeta_1,LOW);
digitalWrite(tarjeta_1,HIGH);
}
void activar_tarjeta_2(){
desactivar_tarjeta_1();
do {
SD.begin(tarjeta_2);
}
while(!SD.begin(tarjeta_2));
digitalWrite(led_tarjeta_2,HIGH);
}
void desactivar_tarjeta_2(){
digitalWrite(led_tarjeta_2,LOW);
digitalWrite(tarjeta_2,HIGH);
}
void loop(){
//comprobamos si hemos activado la tarjeta y la inicializamos
if(digitalRead(selector_tarjeta_1)==LOW&&digitalRead(led_tarjeta_1)==LOW){
activar_tarjeta_1();
}
if(digitalRead(selector_tarjeta_2)==LOW&&digitalRead(led_tarjeta_1)==LOW){
activar_tarjeta_2();
}
if(digitalRead(selector_tarjeta_1)==HIGH&&digitalRead(selector_tarjeta_2)==HIGH&&(digitalRead(led_tarjeta_1)==HIGH||digitalRead(led_tarjeta_2)==HIGH)){
desactivar_tarjeta_1();
desactivar_tarjeta_2();
}
if(digitalRead(led_tarjeta_1)==HIGH||digitalRead(led_tarjeta_2)==HIGH){
File dataFile=SD.open("valores.txt",FILE_WRITE);
if (dataFile){
dataFile.println("dato");
dataFile.close();
}
}
}