Recuperar valor de tarjeta SD

Buenos dias, estoy intentando hacer un contador up dando pulsos a la entrada 2 de mi arduino MEGA. Cada pulso lo voy guardando en la SD que tengo conectada a traves de la placa arduino Ethernet Shield, asi si me quedo sin alimentación, siempre tengo el ultimo valor de la cuenta guardado.

Hasta aqui todo correcto, el problema viene cuando quiero recuperar el valor guardado en la SD para continuar la cuenta por donde se quedo y no desde 0.

Utilizo el ejemplo que trae el software 1.0.1 (modificado) y en el Monitor Serial observo como se guarda y despues como me muestra el valor guardado, con lo que esa parte de lectura/escritura de la SD la tengo correcta.

Os pongo mi codigo para ver si alguien detecta el fallo. Saludos y gracias de antemano.

#include <SD.h>

//Variables

int valor;
int estadoanterior;
int contador;
int buttonPin = 2; //El boton conectado en el pin 2
File myFile;

void setup()
{
pinMode(buttonPin, INPUT);

Serial.begin(9600); //Abrir las comunicaciones serie y esperar

Serial.print("Initializing SD card...");
pinMode(4, OUTPUT);

if (!SD.begin(4))
{
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
{

////// LECTURA VALORES SD //////

myFile = SD.open("datos.txt"); //volver a abrir el archivo para lectura
if (myFile)
{
Serial.println("Leyendo en datos.txt:");
while (myFile.available()) //leer desde el archivo hasta que no hay nada más en él
{
Serial.write(myFile.read());
contador = myFile.read(); //¡¡¡¡¡posible linea erronea!!!!!
}
myFile.close(); //cerrar archivo
}
else
{
Serial.println("error abriendo datos.txt"); //si el archivo no se abre, imprime un error
}
}
}

void loop()
{

/////// CONTADOR ///////

valor = digitalRead(buttonPin);
if (valor != estadoanterior)
if (valor == 1)
{
contador++;
Serial.println(contador);
}
estadoanterior = valor;

////// ESCRITURA VALORES SD //////

if (valor == 1)

{
SD.remove("datos.txt"); //borrar SD antes de insertar guardar valores
myFile = SD.open("datos.txt", FILE_WRITE); // abrir el archivo donde vamos a leer/escribir datos. Sólo puede ser abierto un archivo a la vez, así que habria que cerrar este antes de abrir otro archivo.
if (myFile) //si el archivo se abrió bien, escribir en él
{
Serial.print("Escribiendo en datos.txt...");
myFile.println(contador);
myFile.close(); //cerrar archivo

Serial.println("hecho.");
}
else
{
Serial.println("error abriendo datos.txt"); //si el archivo no se abre, imprime un error
}
}
}

Voy a abreviar la pregunta por si alguien no me ha entendido o no me he sabido explicar.

¿Que comando debo escribir en el programa del arduino, para leer un valor que está alojado en un archivo dentro de la tarjeta SD de la Ethernet Shield?

Y no me funciona:
valor = myFile.read();

En cambio, con este comando si que lo visualizo en el Monitor Serial:
Serial.write(myFile.read());

Gracias de antemano.

Hola Jomogar.

El shield que usas no funciona con comandos AT?? Yo estuve utilizando un shield 3G/GPS y descargando un manual de comandos AT se hace "sencillo" controlar su funcionamiento...

Saludos.

Gracias por la ayuda.

Hecha un vistazo a esto por si te sirve de algo.
http://www.extremadura-web.es/Blog/2013/01/16/leer-linea-fichero-sd-en-arduino/

No creo que heche ningun vistazo, el post tiene mas de 120 días

Ultima respuesta : Jan 06, 2013, 10:17 am

buen día jomogar quisiera saber si lograste hacer que funcionara correctamente el contador

saludos gracias

En el 2015 le escribí a alguien por responder algo del 2013.
Ahora tu en el 2017 me respondes a mi algo del 2015.
Por esta razón no se deben revivir temas viejos.
Si te interesa el tema, crea un hilo nuevo y espera a ser respondido.
No respondas nada que tenga mas de 120 dias a menos que tu lo hayas creado.