Go Down

Topic: Fecha variable, como nombre de archivo SD  (Read 979 times) previous topic - next topic

Betito

Jan 09, 2018, 06:42 am Last Edit: Jan 09, 2018, 07:24 pm by Betito
Por favor solicito ayuda estoy un poco detenido en este proyecto, pues no puedo generar un nombre para un archivo en la SD que varíe de acuerdo a la fecha.
Ojala pudieran ayudarme.

FRAN2017


Betito

La fecha la obtengo del RTC, quiero formar una variable donde se guarden los datos de la fecha así "20180109" y esa variable que sea el nombre q tenga el archivo para q cada día genere otro archivo.

surbyte

Tema muy debatido en el foro, es mas esta ampliamente resuelto en muchas oportunidades.

Busca fecha sd

Este es un link posible

Link2 posible

Betito

#4
Jan 12, 2018, 02:13 am Last Edit: Jan 12, 2018, 02:26 am by Betito
Muchas gracias Surbyte, creo q tus codigos me han sido de gran ayuda hasta el momento, solo me quedan aun dudas, por ejemplo yo antes de void Setup describo la varable filename.
Code: [Select]

char filename[] = "D12345678.txt";  // defino la variable donde guardo el nombre con la fecha


//Despues en seguida t muestro parte de la funcion donde creo ejecuto la funcion para convertir la //varaible en cadena.
void loop()
{
      getFileName();
   }
   void getFileName()
   {
{
  DateTime now = RTC.now(); //obtiene datos del modulo RTC
  sprintf(filename, "D%02d%02d%04d.txt", now.day(), now.month(), now.year());

 
  Serial.print(filename); //Al imprimir su valor si esta de acuerdo con la fecha en el RTC.

 
  Archivo = SD.open(filename, FILE_WRITE); //segun yo se le asignara el valor de la variable al nombre del texto!!!!
 
 
  if (Archivo) {

   
    Archivo.println("Hola, esto es lo que se está escribiendo en el archivo");
   
    //Se cierra el archivo para almacenar los datos.
    Archivo.close();

   
    Serial.println("Todos los datos fueron almacenados");
  }

  //En caso de que haya habido problemas abriendo datos.txt, se muestra por pantalla.
  else {

    Serial.println("El archivo no se abrió correctamente");// justo me dice q no se abrio de forma correcta por consiguiente tampoco se crea el archivo con ese nombre.
  }



esa es la unica parte q me esta afectando... porq no crea el archivo.


Betito

Al imprimir la variable filename
resulta
D11012018.txt
no se si no lo acepte al guardar el archivo porq no tiene las comas "".??

Lucario448

Es mejor que no los tenga.

En el sistema de archivos FAT, las comillas dobles (") son uno de los caracteres prohibidos para un nombre de archivo; los demás vienen siendo: *, ?, /, \, [espacio] (excepto en LFN), NULL ('\0'), . (prohibido solo dentro de la extensión del archivo en SFN, pero permitido de cero a múltiples veces en LFN)

Betito

Lucario448, gracias por ese detalle es la primer vez q intento realizar un trabajo en arduino me ha llevado muchos detalles, pero este último aun me ha complicado mas no logró entenderlo del todo que me falta para que me reconozca el
filename como nombre para el archivo??

Lucario448

#8
Jan 12, 2018, 03:44 pm Last Edit: Jan 12, 2018, 03:49 pm by Lucario448
En la librería SD incluida con la IDE, los archivos son referenciados por su "nombre SFN" (también conocido como "8.3").

Los sistemas operativos modernos aprovechan la capacidad LFN de FAT32 para poder asignarles nombres más humanamente naturales (límite de hasta 255 caracteres, con mayúsculas y minúsculas, se permiten espacios, multiples puntos y los caracteres pueden ser ASCII extendido o hasta Unicode). Sin embargo, por cuestiones de retrocompatibilidad con software muy antiguo, el "nombre SFN" todavía existe. Ejemplo:

"Este es un archivo de texto.txt" es el nombre LFN, y su contraparte SFN (creada por SO) sería "ESTEES~1.TXT" (elimina espacios, recorta el nombre a los primeros 6 caracteres y el "~1" es como un contador que permite hasta 99 archivos que inicien con "ESTEES" en el mismo directorio o "carpeta"). Nótese que en la conversión a SFN todo va en mayúscula, esto se debe a que en esta forma solo se almacenan las letras del alfabeto inglés en mayúscula (aparte de los números, ., -, _).



El punto al que quiero llegar, es que si la librería solo soporta SFN, "D11012018" a pesar de no tener caracteres prohibidos, tiene 9 de longitud (y el máximo es 8 ). Quizá sin la 'D' el problema se solucione; porque no estoy seguro si la librería hace la misma conversión de LFN a SFN que realizan los SO modernos (a mayúsculas sé que sí).

fr10000

Betito, es una magnífica respuesta la que te ha dado Lucario448, quizas debas usar archivos 8.3 he investigar un poco más pero ganar tiempo asi.

Lo que yo puedo aportar es que si necesitas ponerle una cabecera al archivo, podrias prescindir de la unidad de mil y la centena del año.

Por lo que en el archivo, la cabecera ocuparía 2 lugares y la fecha 6 (AA180116.txt).
 
Otra opcion seria usar un caracter de cabecera, un caracter de siglo y luego la fecha (A0180116.txt).

Como opción, para tener el año completo, podrias poner la fecha completa como primer línea de tu archivo de texto y guardar los archivos en carpetas 1900, 2000, 2100.

Yo me he topado con ese problema antes del año 2000 pero ya en estos tiempos he optado por guardar el año con 2 caracteres.

Espero puedas resolver tu programa.

Saludos.
 

Betito

Muchas gracias por sus comentarios, de verdad que me fue de mucha ayuda sus mensajes, pues termine asignandole una cabecera antes de la fecha a la cual le asigne, 6 caracteres.

gracias a su ayuda logre concluir el proyecto :) .


Go Up