Pasar datos de una SD a otra SD

Buen dia a todos

Tengo una cuestion y no se como solucionarla, lo que pasa es que estoy trabajando con dos modulos SD de arduino y una ESP32.

mi proyecto consiste en almacenar los datos de un sensor en una de las SD (SD1), luego de esto habra un menu donde estan las siguientes opciones:

///////////////// MENU /////////////////

  1. Leer archivos
  2. copiar archivos
    //////////////////////////////////////////

Dicho menu se muestra en una interfaz de usuario, la primera opcion cuando se ejecuta me dara la lista de archivos que se encuentran en la SD1.
La segunda opcion cuando se ejecuta me permitira seleccionar uno de los archivos que se encuentran en la SD1 y me permitira copiarlo a la SD2

agradeciria si alguien me puede guiar en como hacer todo esto, pues estos modulos me resultan algo desconocidos.

muchas gracias de antemano

Google ESP32 SD

estoy usando este codigo


#include <SD.h>

const int chipSelect1 = 4; // Pin CS de la primera tarjeta SD
const int chipSelect2 = 5; // Pin CS de la segunda tarjeta SD

void setup() {
  Serial.begin(9600);
  
  // Inicialización de la primera tarjeta SD
  if (!SD.begin(chipSelect1)) {
    Serial.println("Error al inicializar la primera tarjeta SD.");
    return;
  }
  Serial.println("Primera tarjeta SD inicializada correctamente.");
  
  // Inicialización de la segunda tarjeta SD
  if (!SD.begin(chipSelect2)) {
    Serial.println("Error al inicializar la segunda tarjeta SD.");
    return;
  }
  Serial.println("Segunda tarjeta SD inicializada correctamente.");
  
  // Lee y escribe el archivo en ambas tarjetas
  transferirArchivo("archivo.txt");
}

void loop() {
}

void transferirArchivo(String nombreArchivo) {
  // Abre el archivo de lectura en la primera tarjeta
  File archivoLectura = SD.open(nombreArchivo, FILE_READ);
  
  // Si no se puede abrir el archivo, muestra un mensaje y termina la función
  if (!archivoLectura) {
    Serial.println("Error al abrir el archivo en la primera tarjeta SD.");
    return;
  }
  
  // Abre el archivo de escritura en la segunda tarjeta
  File archivoEscritura = SD.open(nombreArchivo, FILE_WRITE);
  
  // Si no se puede abrir el archivo, muestra un mensaje y termina la función
  if (!archivoEscritura) {
    Serial.println("Error al abrir el archivo en la segunda tarjeta SD.");
    archivoLectura.close();
    return;
  }
  
  // Lee el contenido del archivo de lectura y escríbelo en el archivo de escritura
  while (archivoLectura.available()) {
    archivoEscritura.write(archivoLectura.read());
  }
  
  // Cierra ambos archivos
  archivoLectura.close();
  archivoEscritura.close();
  
  Serial.println("Archivo transferido correctamente de la primera a la segunda tarjeta SD.");
}

pero cuando conecto los dos modulos no me funciona

Prueba individualmente.
Funcionan?

Te sirve usando la librería SdFat en lugar de la librería SD?

#include <SdFat.h>

const int chipSelect1 = 4; // Pin CS de la primera tarjeta SD
const int chipSelect2 = 5; // Pin CS de la segunda tarjeta SD

SdFat SD1;
SdFat SD2;

void setup() {
  Serial.begin(115200);

  if (!SD1.begin(chipSelect1)) {
    Serial.println("Error al inicializar la primera tarjeta SD.");
    return;
  }
  Serial.println("Primera tarjeta SD inicializada correctamente.");
  
  // Inicialización de la segunda tarjeta SD
  if (!SD2.begin(chipSelect2)) {
    Serial.println("Error al inicializar la segunda tarjeta SD.");
    return;
  }
  Serial.println("Segunda tarjeta SD inicializada correctamente.");

  // Lee y escribe el archivo en ambas tarjetas
  transferirArchivo("archivo.txt");
}

void loop() {
}

void transferirArchivo(String nombreArchivo) {
  // Abre el archivo de lectura en la primera tarjeta
  File archivoLectura = SD1.open(nombreArchivo, FILE_READ);
  
  // Si no se puede abrir el archivo, muestra un mensaje y termina la función
  if (!archivoLectura) {
    Serial.println("Error al abrir el archivo en la primera tarjeta SD.");
    return;
  }
  
  // Abre el archivo de escritura en la segunda tarjeta
  File archivoEscritura = SD2.open(nombreArchivo, FILE_WRITE);
  
  // Si no se puede abrir el archivo, muestra un mensaje y termina la función
  if (!archivoEscritura) {
    Serial.println("Error al abrir el archivo en la segunda tarjeta SD.");
    archivoLectura.close();
    return;
  }
  
  // Lee el contenido del archivo de lectura y escríbelo en el archivo de escritura
  while (archivoLectura.available()) {
    archivoEscritura.write(archivoLectura.read());
  }
  
  // Cierra ambos archivos
  archivoLectura.close();
  archivoEscritura.close();
  
  Serial.println("Archivo transferido correctamente de la primera a la segunda tarjeta SD.");
}

La simulación

si, individualmente funcionan bien

Si, pero si usas dos (en el supuesto que la clase SD admita más de una instancia), ¿cómo determinas a cuál te refieres en ésta sección del código?

  // Abre el archivo de lectura en la primera tarjeta
  File archivoLectura = SD.open(nombreArchivo, FILE_READ);

  // ...

  // Abre el archivo de escritura en la segunda tarjeta
  File archivoEscritura = SD.open(nombreArchivo, FILE_WRITE);

¿SD se refiere a la clase SD que iniciaste con chipSelect1 o a la que iniciaste con chipSelect2?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.