Ayuda para implmentar varias acciones en una SD.

Hola que tal...
les comento de rapido que me arme un datalogger con 2 dth11 y 2 ds1820 lo cual me da; 4 registros de temperatura y dos de humedad, es una herramienta que hice para verificar la refrigeración de camaras de la competencia y de las nuestras (ahora que incluimos tableros de control basados en arduino podemos ofrecer; modo nocturno, modo ventilacion minima, blast refrigeración, apagar ventilacion con puerta, etc... ) todo queda muy guapo... de hecho tengo algunas graficas de este aparato... pero ahora quiero hacer varias cosas mas avanzadas. Bueno al menos desde mi punto de vista.

Lo que tengo;
Arduino Uno
Arduino ethernet shield
Micro sd
2 sensores dth11
2 sensores ds1820

el datalog queda así en la SD;

FECHA HR T1 T2 H1 T1 H2 T2

1 25/11/2015 06:47:20 42.75 38.5 67 44 73 42
2 25/11/2015 06:48:59 44.75 41.5 57 45 73 42
3 25/11/2015 06:49:59 45.5 42.75 56 46 68 45
4 25/11/2015 06:50:59 45.75 43.5 55 46 68 45
5 25/11/2015 06:51:59 45.75 43.75 58 46 70 46
6 25/11/2015 06:52:59 45.5 44 58 46 70 45
7 25/11/2015 06:53:59 45.75 44.25 58 46 70 45
8 25/11/2015 06:54:59 45.75 44.25 58 46 70 45
9 25/11/2015 06:55:59 45.25 44.25 59 46 71 46

Ahora...

Me gustaria agregarle una pantalla lcd 20 x 04 tengo un monton aqui sin hacer nada y creo que se vera mas guapo...

me imagino que ir imprimiendo las temperaturas y humedades que van saliendo no es problema con
un sprintf...

Pero me gustaria tener dos botones para "ver" las que esan grabadas... y quizas implementar un boton para el minimo... o maximo

Encontre este ejemplo de como leer linea por linea una sd;
http://www.extremadura-web.es/Blog/2013/01/16/leer-linea-fichero-sd-en-arduino/

Pero... seria posible hacerlo mientras el data graba datos?
Toma una muestra cada minuto... yo supongo que si...

Otra cosa... aqui lee desde la linea 1, y las tiene que especificar en el programa... pero como puedo
leer desde la una hasta las demas? Sin tener necesidad de declararlas en el progrma?

Muchas gracias, espero sus comentarios.

-Alex.

Efectivamente puedes abrir el archivo log en modo lectura|escritura. Lo único que tienes que tener en cuenta, aparte de gestionar la "multitarea" es guardar la dirección del puntero de lectura antes de escribir un nuevo dato, pues esto requiere que coloques el puntero en el final del archivo para agregar los datos, y luego retornarlo a la posición en la que te hallabas con la lectura. Revisa los métodos de la clase File seek y size, que son los que necesitarás.
Saludos.

Muchas gracias noter...

Bueno, creo que lo de grabar datos no tendra mucho problema ya que puedo hacer dos cosas en el programa... la primera es esperar por los botones a ser oprimidos... la segunda revisar el tiempo para tomar la lectura... no creo que se interfieran...

Tengo algunas dudas size... devuelve el tamaño del archivo en bytes.... como me ayudara a saber en que linea buscar?

Y seek busca en una linea en particular... pero como saber cuantas lineas hay?

busca la primera linea ....
encuentra la ultima linea ( si es vacia ultima linea -1) 
lastLine = ultima linea;

crear un indice de sdLines{1,lastLine}

entonces podemos ver linea por linea no?

file.seek(currentLine) = lcd.line1
file.seek(currentLine-1) = lcd.line1
file.seek(currentLine-2) = lcd.line1
file.seek(currentLine-3) = lcd.line1 

Algo asi? 

Si tienes algun ejemplo anque se breve... me ayudarias mucho.

Gracias.
-Alex.

A ver...
A medida que vayas leyendo datos, el puntero actual del fichero se va desplazando y apuntando a la siguiente posición a leer. Entonces, cuando finalices de leer una línea va a estar apuntando al inicio de la siguiente. Puedes guardar en un unsigned long la posición de ese cursor antes de hacer una escritura. Después, si te mueves a la posición que indica el tamaño de archivo, algo así como myFile.seek(myFile.size()), lo que haces es colocar el puntero justo al final del archivo, con lo que si luego escribes añades esos datos al final del fichero (si escribieras mientras apuntas a otra parte, sobreescribes lo apuntado). Sólo te queda realizar un nuevo seek a la posición que habías guardado antes, y continúas leyendo donde lo habías dejado.
En cuanto a saber cuántas líneas hay, si todas las líneas tienen la misma longitud, divides longitud de archivo entre longitud de línea, y tienes el número de líneas. Si no es así, no te queda otra que recorrer el archivo entero y contar los saltos de línea. Dependiendo del uso que quieras dar tendrás que plantearte una estrategia u otra.
Saludos.

A bueno, entiendo ahora..
digamos que la primera vez que busque algo con seek se ira o bueno mas bien
el cursor se queda en la ultima linea, por lo que leer hacia abajo es relativamente facil.

Solo tendría que "contar" cuantas veces me he movido hacia un lado o hacia otro
para saber a donde regresar el curson en caso de que quiera grabar algo nuevo a la SD.

Es correcto?

Gracias.

-Alex.

Supongo que lo de contar es otra opción. Lo que yo digo, en principio es:
-Voy leyendo el archivo desde el inicio.
-Necesito agregar datos.
-Anoto posición actual de puntero.
-Muevo puntero a final de archivo. Escribo nuevos datos.
-Seek a la posición guardada. Continúo leyendo donde lo dejé.