Arduino micro Sd Lectura

Saludos! he estado leyendo este foro en busca de la respuesta pero no la he encontrado! necesito de su ayuda para resolver el problema que tengo y es que necesito hacer un tipo horómetro pero que me vaya guardando cada minuto en una micro sd, las horas, minutos, segundos pero hay un problema y es que quiero que cuando arduino arranque, lea la micro sd y guarde en 3 tipos de variables, horas, minutos, y segundos, la ultima posicion en la que se haya guardado antes de apagar la placa un ejemplo seria asi

horas,minutos,segundos 0,32,12 0,31,12 0,32,12

osea que hora=0, minuto=32, segundo=12 cuando el arduino arranque ya inicie con estos valores y asi pueda seguir haciendo el conteo siempre y cuando se presione un boton, el conteo siga aumentando y hasta que suelte el boton, almacene los ultimos datos en la micro y pare el conteo y si presiono el boton, continue

hasta ahora no he logrado leer correctamente los datos de la micro sd

podrian ayudarme a resolver este problema?

Y cual es tu código?

Leíste las normas supongo? No postees códigos con texto plano, debes usar etiquetas, si no sabes o no entiendes, lee las normas de nuevo. Esta mu claro.

Este es el codigo que he utilizado

#include <SPI.h>
#include <SD.h>
#include <SdFat.h>

File myFile;
int contador = 1;
int hora = 0;
int minuto = 0;
int segundo = 0;

void setup()
{
  Serial.begin(9600);
  Serial.print("Iniciando SD ...");
  if (!SD.begin(4)) {
    Serial.println("No se pudo inicializar");
    return;
  }
  Serial.println("inicializacion exitosa");
}

void loop()
{
  if(minuto >= 59)
  {
    hora += 1;
    minuto = 0;
    segundo = 0;
  }
  else
  {
    if(segundo == 59)
    {
      segundo=0;
      minuto += 1;
    }
    else
    {
      segundo+=1;
    }
  }
  
  if(contador==31)
  {
    myFile = SD.open("datalog.txt", FILE_WRITE);//abrimos  el archivo
    
    if (myFile) 
    { 
      Serial.print("Escribiendo SD: ");
      
      myFile.print(hora);
      myFile.print(",");
      myFile.print(minuto);
      myFile.print(",");
      myFile.print(segundo);
      myFile.println();
      
      myFile.close(); //cerramos el archivo
      
      Serial.print(hora);
      Serial.print(",");
      Serial.print(minuto);
      Serial.print(",");
      Serial.print(segundo);
      Serial.println();       
                  
    } 
    else 
    {
      Serial.println("Error al abrir el archivo");
    }
    contador=1;
  }
  else
  {
    contador += 1;
  }
  
  delay(1000);
}

ya leí las normas tambien

En la librería SD hay ejemplos de varias clases uno se llama ReadWrite.ino y es este

#include <SPI.h>
#include <SD.h>

File myFile;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("Initializing SD card...");

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

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open("test.txt", FILE_WRITE);

  // if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }

  // re-open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");

    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
}

void loop() {
  // nothing happens after setup
}

Hace lo que tu hiciste guardar algo y luego al final lo lee
Usa esa guia para leer los datos en tu setup() asignar los valores de hora, minuto, etc a tus variables y seguir desde ahi.

pues no entre a hacer lo que se me da la gana
solo entre a hacer una pregunta de la cual llevo 1 semana sin parar intentandolo hacer y pues no ha resultado nada, he buscado en varios lugares informacion pero nada y asi que desidi como ultima ruta hacer esto

Leiste mi respuesta? Porque ahi tienes la solución.

El tema es que la gente se ofusca buscando en internet pero no busca en el primer sitio o sea en los ejemplos de la misma librería. Siempre los ejemplos contemplas lo que necesitas. Aun si el ejemplo sigue siendo dificil de entender al menos tienes ya un enfoque diferente incluso para buscarlo en internet.

La segunda parte del ejemplo ReadWrite.ino es como se leen los datos de la SD. El ultimo dato que leas es el que buscas.

Aca estan los datos que almaceno en la memoria.
lo que necesito ahora es, tomar esos datos y almacenarlos en variables puedan estar almacenadas en la memoria sram para que pueda hacer su conteo como horometro, por que lo que hace el codigo hasta el momento es tomar lo que esta en la micro sd y mostrarlo en el monitor serial

falla en la lectura de una micro sd.png

La otra manera que pienso es que se almacene en memoria EEPROM, solo las horas y en micro sd se guarde horas, minutos y segundos y este como una copia de seguridad, pero tiene un limite

falla en la lectura de una micro sd.png

ArduMyth: Te voy a ser muy claro. Clic en icono navegador Chrome. Se abre google. Pongo en el campo: "arduino lectura SD" y me sale esto cómo primer resultado: https://www.luisllamas.es/tarjeta-micro-sd-arduino/

¿Llevas 1 semana para ejemplos que trae la propia librería y que se encuentran con búsquedas normales? A mí, disculpa pero no me cuadra. No obstante ahí tienes más información.

Fíjate qué has dicho que el Moderador SIEMPRE, espera que subrayo,[u]SIEMPRE[/u] es tan negativo. Si llevabas 2 post y acabas de entrar al foro, ¿cómo puedes hacer dicha afirmación?

¿multicuenta que quizás ya fue apercibido?

pues ya revise muchas paginas esa es una de las primeras que vi porque aparecen arribita

y pues no he visto que la propia libreria muestre codigo donde guarda en variables lo que encontro en la micro sd, lo que si he visto es que muestra en el puerto serial todo lo que esta en el archivo, y nada mas

@surbyte
Ya lo logre! Muchas gracias por tu ayuda te lo agradezco bastante! estoy agradecido por tu ayuda!

aqui esta el codigo que lo que hace es, que solo inicia y lee el archivo y lo guarda en variable de tipo char, despues de eso se pasan a variables int para que que cada 59 segundos elimine el archivo y despues escriba

#include <SPI.h>
#include <SD.h>

File myFile;
int contador = 1;
int hora = 0;
int minuto = 0;
int segundo = 4;

void setup()
{
  Serial.begin(9600);
  Serial.print("Iniciando SD ...");
  if (!SD.begin(4)) {
    Serial.println("No se pudo inicializar");
    return;
  }
  Serial.println("inicializacion exitosa");

  LeeArchivo();

  Serial.println(); Serial.println(); Serial.println(); 
}

void loop()
{
  if(minuto >= 59)
  {
    hora += 1;
    minuto = 0;
    segundo = 0;
  }
  else
  {
    if(segundo == 59)
    {
      segundo=0;
      minuto += 1;
    }
    else
    {
      segundo+=1;
    }
  }
  GuardaArchivo();
  
  Serial.print("Hora: ");
  Serial.print(hora);
  Serial.print(", Minuto: ");
  Serial.print(minuto);
  Serial.print(", Segundo: ");
  Serial.print(segundo);
  Serial.println(); 
  
  delay(1000);
}

/****************************
*   CADA 59 SEGUNDOS GUARDO  *
******************************/
void GuardaArchivo()
{
  if( segundo == 59)
  {
    EliminaArchivo();
    EscribeArchivo();
  }
}

/****************************
* LEO LOS DATOS DEL ARCHIVO *
******************************/
void LeeArchivo()
{
  Serial.println(); Serial.println(); Serial.println(); 
  myFile = SD.open("datalog.txt");
  
  if (myFile) 
  {
    while (myFile.available()) 
    {
      char palabra = myFile.read();
      Serial.print(palabra);
      if(palabra!=',')
      {
        
        if(hora==0)
        {
          hora = myFile.parseInt();
          Serial.println(hora);
        }
        if(minuto==0)
        {
          minuto = myFile.parseInt();
          Serial.println(minuto);
        }
      }
    }
    myFile.close();
    segundo=0;
  } 
  else 
  {
    Serial.println("Error Al Abrir El Archivo");
  }
}

/*****************************
*     ELIMINA EL ARCHIVO    *
*****************************/
void EliminaArchivo()
{
  if(SD.remove("datalog.txt"))
  {
    Serial.println("Eliminacion exitosa");
  }
}

/*****************************
*   ESCRIBO EN EL ARCHIVO    *
******************************/
void EscribeArchivo()
{
  myFile = SD.open("datalog.txt", FILE_WRITE);//abrimos  el archivo
  if (myFile) 
  { 
    Serial.print("Escribiendo SD: ");
    myFile.print(4);
    myFile.print(",");
    myFile.print(hora);
    myFile.print(",");
    myFile.print(minuto+1);
    myFile.println();
    myFile.close(); //cerramos el archivo
  } 
  else 
  {
    Serial.println("Error al abrir el archivo");
  }
}

muchas gracias por tu ayuda y pues tuve que buscar en ingles porque en español no encontre nada
he aqui de donde agarre el ejemplo arduino uno - Saving a .txt file to SD Card and Reading each content data to txt file then save it to a variable - Arduino Stack Exchange

por si a alguien le sirve aqui esta el ejemplo