La cuestión está en que en la parte del código de configuración (void setup(){}) hay dos pines clave que se configuran:
CS (Chip Select) del controlador ethernet, denominado en código normalmente como CS_PIN, que va al pin 4.
SD controlador de la memoria MicroSD, denominado en código normalmente como DS_PIN, va al pin 10.
Hay que configurar las dos en el bloque setup. En el siguiente ejemplo además se hace un pequeña lectura de la memoria:
#include <SPI.h>
#include <SD.h>
const int CS_PIN = 4;
const int SD_PIN = 10;
void setup()
{
Serial.begin(9600);
while (!Serial) ;
// wait for serial port to connect. Needed for Leonardo only
Serial.print("Probando SD card...");
pinMode(SD_PIN, OUTPUT);
// Configuración necesaria para leer la tarjeta MicroSD
// Esto es necesario aunque creas que no lo usas.
if (!SD.begin(CS_PIN))
{
Serial.println("No hay tarjeta");
return; // NO sigas
}
Serial.println("SD encontrada.");
File dataFile = SD.open("archivo.txt");
if (dataFile) // Si ha podido abrir el fichero
{
while (dataFile.available()) // Mientras no llegues al final
Serial.write(dataFile.read()); // Lee el fichero y envialo al serie
dataFile.close(); // Cierra el fichero al acabar
}
else // SI no puede abrir el fichero
Serial.println("Error, no puedo usar archivo.txt");
}
void loop() { }
En el libro „ARDUINO A FONDO“ no está la configuración correctamente indicada, ni está incluida la librería <SPI.h> necesaria para la comunicación con el dispositivo MicroSD. No he conseguido ver en ningún sitio en Internet esta configuración. Quizás porque no he buscado bien. Pero por eso, he hecho este pequeño artículo; para que cualquiera que esté con la misma shield no se vuelva loco buscando los problemas con los que se va ha encontrar, que no son pocos.
Os remito también a un ejemplo básico para leer la tarjeta:
https://www.arduino.cc/en/Tutorial/CardInfo muy útil para detectar los datos básicos de tu tarjeta.
Los comandos básicos para manejar la memoria SD son:
File.Available() Nos indica que si hemos llegado al fin e un fichero .
File.flush() Se asegura de que se escribe en la SD todo. Algo que hace automáticamente
al hacer close() .
File.read() Lee un carácter del fichero abierto y avanza a la siguiente posición .
File.write() Escribe un carácter al fichero y avanza la posición .
File.position() Te indica la posición donde escribirá/leerá el próximo carácter en relación al
principio el fichero .
File.size() Devuelve el tamaño de un fichero .
File.seek(pos) Coloca el apuntador que indica donde leerá/escribirá en la posición que le
indicamos a partir del inicio y siempre que este entre 0 y File.size() .
File.peek() Lee un char de la posición que marca el apuntador y no avanza .
File.isDirectory() Indica si el fichero abierto es o no un directorio .
Hay algún que otro método adicional que podéis consultar en la documentación de la SD library.
Saludos y espero que os haya resultado de utilidad.
Entradas relaccionadas:
Entrada 124 - Programando una consola en Java con NetBeans 2/X
Entrada 123 - Como crear un proyecto con Swing en NetBeans 8.X
Entrada 120 - Proyecto Arduino ethernet SD + consola en Java 1/X
@eltiopacote
Listado de entradas: http://www.pacovalverde.es/indice
No hay comentarios:
Publicar un comentario