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
}
}
}