Robologs - Leer SD

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 6

https://robologs.

net/2019/02/16/como-leer-y-escribir-en-una-tarjeta-sd-y-micro-sd-
con-arduino/

Cómo leer y escribir en una tarjeta SD y micro SD con Arduino


Posted on February 16, 2019 by N4n0

¡Hola! En el tutorial de hoy os enseñaré cómo leer y escribir en tarjetas SD con


Arduino utilizando la librería SD y un módulo SD para Arduino.
Utilizar una tarjeta SD con Arduino es muy útil para ampliar su capacidad de memoria,
lo que nos permite almacenar datos de sensores, archivos de imagen, etc. Además la
memoria de las tarjetas SD no es volátil, por tanto no se pierde ningún dato si se va la
corriente o reiniciamos la placa Arduino.
Lista de Materiales
 Un módulo SD para Arduino.
 Tarjeta SD
 Una placa Arduino y cable USB
 Jumpers Macho-Hembra
La tarjeta SD que utilicemos debe ser compatible con el módulo y estar formateada en
el sistema de archivos FAT16 o FAT32.
También tenemos que asegurarnos que el nivel lógico del módulo sea compatible con
Arduino (¡siempre hay que leer toda la documentación de nuestras piezas!). Si no lo es,
tendremos que usar un conversor de niveles.

Conexiones
En la mayoría de placas Arduino las conexiones serán:
 Arduino 5V – Módulo VCC
 Arduino GND – Módulo GND
 Arduino D11 – Módulo MISO
 Arduino D12 – Módulo MOSI
 Arduino D13 – Módulo SCK
 Arduino D4 – Módulo CS

Si estamos trabajando con Arduino Mega habrá que cambiar los pines 11, 12 y 13 por


los pines 50, 51 y 52 respectivamente.

Leer un fichero
En este primer ejemplo buscaremos un archvo dentro de la tarjeta SD con el nombre
“fichero.txt” y mostramos su contenido por el monitor Serial del IDE de Arduino.
(Nota: quizá es muy obvio decirlo, pero antes de correr este programa tenemos que haber
creado un archivo llamado “fichero.txt” dentro de la tarjeta SD o nuestra Arduino no va a
tener nada para leer…)
01 #include <SD.h>
02  
03 int pin_lector = 4; //Pin CS
04 File archivo; //Objeto file que nos servira para
05  
06 void setup() {
07   Serial.begin(9600);
08   pinMode(pin_lector, OUTPUT);
09  
10   //Inicializamos la tarjeta SD con la funcion SD.begin.
11   //Si todo funciona bien, nos devolvera un 'True'
12   bool val = SD.begin(pin_lector);
13  
14   //Si no se ha podido inicializar la tarjeta, mostrar un error
15   if(not val)
16     Serial.println("No se ha podido inicializar la tarjeta SD");
17  
18   //Si se ha inicializado correctamente, leemos el fichero
19   else
20   {
21     archivo = SD.open("fichero.txt", FILE_READ); //Abrimos el fichero
22  
23     //Si no se ha podido abrir, mostramos un error
24     if(not archivo)
25       Serial.println("No se ha podido abrir el fichero");
26  
27     //De lo contrario, leemos el fichero y mostramos su contenido
28     else
29     {
30       char c = archivo.read();
31       while(c != -1) //Leemos hasta el final
32       {
33         Serial.print(c);
34         c = archivo.read();
35          
36       }
37       archivo.close(); //Es muy importante cerrar el archivo al final
38     }
39   }
40  
41 }
42  
43 void loop() {
44     //En este ejemplo no necesitamos el void loop
45   }
Si quisiéramos acceder a un archivo que estuviera dentro de una carpeta tendríamos
que pasarle todo el path a la función SD.open(). Es decir:
archivo = SD.open("carpeta/fichero.txt", FILE_READ);

Escribir en un fichero
También podemos escribir en un fichero. El siguiente programa buscará el “fichero.txt” y
escribirá un texto al final. Si no puede encontrar el archivo creará uno nuevo con este
nombre.
01 #include <SD.h>
02  
03 int pin_lector = 4; //Pin CS
04 File archivo; //Objeto file que nos servira para
05  
06 void setup() {
07   Serial.begin(9600);
08   pinMode(pin_lector, OUTPUT);
09  
10   //Declaramos el string que escribiremos en el fichero
11   char texto[] = "Este es un texto de prueba";
12  
13   //Inicializamos la tarjeta SD con la funcion SD.begin.
14   //Si todo funciona bien, nos devolvera un 'True'
15   bool val = SD.begin(pin_lector);
16  
17   //Si no se ha podido inicializar la tarjeta, mostrar un error
18   if(not val)
19     Serial.println("No se ha podido inicializar la tarjeta SD");
20  
21   //Si se ha inicializado correctamente, leemos el fichero
22   else
23   {
24     archivo = SD.open("fichero.txt", FILE_WRITE); //Abrimos el fichero
25  
26     //Si no se ha podido abrir, mostramos un error
27     if(not archivo)
28       Serial.println("No se ha podido abrir el fichero");
29  
30     //De lo contrario escribimos el texto
31     else
32     {
33        archivo.println(texto);
34        archivo.close(); //Es muy importante cerrar el archivo al final
35     }
36   }
37 }
38  
39 void loop()
40 {
41 //En este ejemplo no necesitamos el void loop
42 }

Comprobar si un fichero existe


Otra cosa que podemos hacer es comprobar si un fichero existe o no mediante la
función SD.exists(). Al correr el siguiente código, mostrará el texto “Fichero
encontrado!” si encuentra el archivo que hemos usado en los ejemplos anteriores.
01 #include <SD.h>
02  
03 int pin_lector = 4; //Pin CS
04  
05 void setup() {
06   Serial.begin(9600);
07   pinMode(pin_lector, OUTPUT);
08  
09   //Inicializamos la tarjeta SD con la funcion SD.begin.
10   //Si todo funciona bien, nos devolvera un 'True'
11   bool val = SD.begin(pin_lector);
12  
13   //Si no se ha podido inicializar la tarjeta, mostrar un error
14   if(not val)
15     Serial.println("No se ha podido inicializar la tarjeta SD");
16  
17   //Si se ha inicializado correctamente procedemos a buscar el fichero
18   else
19   {
20     if(SD.exists("fichero.txt"))
21     {
22        Serial.println("Fichero encontrado!");
23     }
24  
25     else
26       Serial.println("No se ha encontrado el fichero");
27   }
28  
29 }
30  
31 void loop() {
32     //En este ejemplo no necesitamos el void loop
33   }

Destruir un fichero
La librería SD también nos permite destruir ficheros con la función SD.remove. Este
ejemplo buscará el archivo que hemos utilizado en los ejemplos anteriores y, si lo
encuentra, lo eliminará.
01 #include <SD.h>
02  
03 int pin_lector = 4; //Pin CS
04  
05 void setup() {
06   Serial.begin(9600);
07   pinMode(pin_lector, OUTPUT);
08  
09   //Inicializamos la tarjeta SD con la funcion SD.begin.
10   //Si todo funciona bien, nos devolvera un 'True'
11   bool val = SD.begin(pin_lector);
12  
13   //Si no se ha podido inicializar la tarjeta, mostrar un error
14   if(not val)
15     Serial.println("No se ha podido inicializar la tarjeta SD");
16  
17   //Si se ha inicializado correctamente procedemos a borrar el fichero
18   else
19   {
20     //Comprobamos si el fichero existe
21     if(SD.exists("fichero.txt"))
22     {
23        SD.remove("fichero.txt"); //Eliminamos el fichero
24        Serial.println("Fichero eliminado");
25     }
26  
27     else
28       Serial.println("No se ha encontrado el fichero");
29   }
30  
31 }
32  
33 void loop() {
34     //En este ejemplo no necesitamos el void loop
35   }

Estos son los usos más básicos de la librería SD, pero nos permite hacer muchas otras
cosas: listar todos los ficheros, mostrar información sobre la tarjeta SD… todas estas
funcionalidades pueden encontrarse en la documentación de la página de Arduino.

También podría gustarte