Arduino Forum

International => Español => Proyectos => Topic started by: Aaron_loor on Jul 16, 2014, 09:07 pm

Title: nombre variable en archivos en SD SOLUCIANADO
Post by: Aaron_loor on Jul 16, 2014, 09:07 pm
saludos nuevamente a la comunidad jeje
bueno vengo nuevamente de preguntón, esta vez con dudas en el nombre del archivo a guardar en una sd
les comento un poco que estoy haciendo un dataloger de unos datos que vienen en una cadena de caracteres, la que bueno eso  ya fue realizado pero esto crea una increíble lista donde viene:
Fecha Hora Datos a guardar
tanto la fecha y hora así como los datos, todo son sacados de la cadena de caracteres, en fin
quiero que día a día se haga un archivo con la fecha, ejemplo : 17/07/2014
y así cada día,
el dato lo tengo en una variable String como palabra7
Quote

String palabra7 = "";


y claro en este momento todo se guarda en la sd con el nombre de archivo "Registro"
Quote

               File dataFile = SD.open("Registro.txt", FILE_WRITE);


y quiero saber como cambiar ese nombre de "registro" a uno que cambe día a día
gracias
Title: Re: ayuda archivos en SD
Post by: Marcial on Jul 17, 2014, 11:18 am
Puede usar una variable para el nombre del archivo

String nombre = "Registro.txt";
File dataFile = SD.open(nombre , FILE_WRITE);
Title: Re: ayuda archivos en SD
Post by: Aaron_loor on Jul 17, 2014, 03:40 pm
amm creo que no me explique bien, el "registro" ya se guarda pero yo quiero que se guarde con la fecha, es decir con la variable palabra7 pero como agrego el txt
Title: Re: ayuda archivos en SD
Post by: Aaron_loor on Jul 17, 2014, 04:26 pm
el código de mi programa es el siguiente, funciona muy bien pero crea de manera infinita el datalog en un mismo archivo, y lo que necesito es que cree un archivo nuevo cada día, podría ser con un dato que ya obtengo como la fecha, la cual se almacena en la variable String palabra7 en fin espero que me puedan ayudar
desde ya gracias
Quote

#include <SD.h>
const int chipSelect = 53;
int error = 13;
int numChar = 0;
char incomingByte = 0;
int cantPalabras = 1;
String palabra1 = "";
String palabra2 = "";
String palabra3 = "";
String palabra4 = "";
String palabra5 = "";
String palabra6 = "";
String palabra7 = "";
String palabra8 = "";
String palabra9 = "";
String palabra10 = "";
String palabra11 = "";
String palabra12 = "";
String palabra13 = "";
String palabra14 = "";
String palabra15 = "";


void setup() {
    pinMode(error, OUTPUT);
  Serial.begin(19200);
  Serial.print("Iniciando tarjeta SD...");
  pinMode(53, OUTPUT);
   
  if (!SD.begin(chipSelect)) {
    Serial.println("Error en Tarjeta");
    digitalWrite(error, HIGH);
    return;
  }
  Serial.println("Tarjeta OK.");
  digitalWrite(error, LOW);


void loop(){
    while (Serial.available()>0){
        numChar = Serial.read();
        incomingByte = numChar;
        if (numChar==32){
          cantPalabras++; 
        }
       if (numChar==80){
            cantPalabras++;
        }
        if (numChar==109){
            cantPalabras++;
        }
       if (numChar!=13 && numChar!=10 && numChar!=32 && numChar!=80 && numChar!=109 && numChar!=102){
            if(cantPalabras==1){
                palabra1 = palabra1+incomingByte; 
            } 
            if(cantPalabras==2){
                palabra2 = palabra2+incomingByte; 
            }
           if(cantPalabras==3){
                palabra3 = palabra3+incomingByte; 
            }
           if(cantPalabras==4){
                palabra4 = palabra4+incomingByte; 
            }
           if(cantPalabras==5){
                palabra5 = palabra5+incomingByte; 
            }
           if(cantPalabras==6){
                palabra6 = palabra6+incomingByte; 
            }
           if(cantPalabras==7){
                palabra7 = palabra7+incomingByte; 
            }
           if(cantPalabras==8){
                palabra8 = palabra8+incomingByte; 
            }
           if(cantPalabras==9){
                palabra9 = palabra9+incomingByte; 
            }
           if(cantPalabras==10){
                palabra10 = palabra10+incomingByte; 
            }
           if(cantPalabras==11){
                palabra11 = palabra11+incomingByte; 
            }
            if(cantPalabras==12){
                palabra12 = palabra12+incomingByte; 
            }
            if(cantPalabras==13){
                palabra13 = palabra13+incomingByte; 
            }
            if(cantPalabras==14){
                palabra14 = palabra14+incomingByte; 
            }
       }
            if(numChar==102){//102 es f representa final de cadena
                delay(100);
                File dataFile = SD.open("Registro.txt", FILE_WRITE);
                if (dataFile) {
                }
                Serial.print(palabra7);
                dataFile.print(palabra7);
                Serial.print("  ");
                dataFile.print("  ");
                Serial.print(palabra10);
                dataFile.print(palabra10);
                Serial.print("  H2S=");
                dataFile.print("  H2S=");
                Serial.print(palabra3);
                dataFile.print(palabra3);
                Serial.print("mCH4=");
                dataFile.print("CH4=");
                Serial.print(palabra5);
                dataFile.print(palabra5);
                Serial.print(palabra6);
                dataFile.print(palabra6);
                Serial.println("m  ");
                dataFile.println("m  ");
                dataFile.close();
                palabra1 = "";
                palabra2 = "";
                palabra3 = "";
                palabra4 = "";
                palabra5 = "";
                palabra6 = "";
                palabra7 = "";
                palabra8 = "";
                palabra9 = "";
                palabra10= "";
                palabra11 = "";
                palabra12 = "";
                palabra13 = "";
                palabra14 = "";
                palabra15 = "";
                cantPalabras = 1; 
                Serial.flush();
            }
         
    }     


Title: Re: ayuda archivos en SD
Post by: Marcial on Jul 18, 2014, 01:03 pm
File dataFile = SD.open(palabra7  , FILE_WRITE);

no se en que formato esta esa fecha, si tiene demasiados caracteres para el nombre de archivo :

File dataFile = SD.open(palabra7.substring(from, to)  , FILE_WRITE);

Title: Re: ayuda archivos en SD
Post by: Aaron_loor on Jul 18, 2014, 03:56 pm
hola este es el error que me manda, creo que porque tengo que usar un constant char  y no un String

logger_datos_de_cadena_completo.ino: In function 'void loop()':
logger_datos_de_cadena_completo:98: error: no matching function for call to 'SDClass::open(String&, int)'
C:\Program Files (x86)\Arduino\libraries\SD/SD.h:74: note: candidates are: File SDClass::open(const char*, uint8_t)

y por otra parte, le tengo que agregar algo aí como la extención .txt segun entiendo
Title: Re: ayuda archivos en SD
Post by: Aaron_loor on Jul 21, 2014, 10:07 pm
por favor ayuda!
Title: Re: ayuda archivos en SD
Post by: Marcial on Jul 22, 2014, 10:28 am
char Nombre_Fichero[13];                                               // Auxilia para nombre de fichero
String  Auxiliar="Fichero.TXT";                                        // Nombre real del fichero enl a SD
Auxiliar.toCharArray(Nombre_Fichero,Auxiliar.length()+1);              // Nombre del fichero en disco

File dataFile = SD.open(Nombre_Fichero  , FILE_WRITE);

creo q es asi ...
Title: Re: ayuda archivos en SD
Post by: Aaron_loor on Jul 22, 2014, 05:00 pm
gracias Marcial
agradezco tu interés y tu tiempo
Title: Re: nombre variable en archivos en SD SOLUCIANADO
Post by: carlosmorera on Jan 27, 2016, 03:28 pm
Hola, Pudiste solucionar el problema con el nombre del archivo? Estoy en la misma situacion. Quiero guardar mis datos del GPS Data Logger en un archivo que sea con el nombre de la fecha.

Saludos,
Carlos.
Title: Re: nombre variable en archivos en SD SOLUCIANADO
Post by: Aaron_loor on Jan 29, 2016, 07:26 pm
no amigo, no pude
Title: Re: nombre variable en archivos en SD SOLUCIANADO
Post by: noter on Jan 29, 2016, 07:51 pm
Pues no parece un problema complicado ¿En qué punto estáis actualmente?
Title: Re: nombre variable en archivos en SD SOLUCIANADO
Post by: Aaron_loor on Feb 03, 2016, 04:49 pm
en punto de que cambie un poco lo de guardar por día y terminé el proyecto hace 2 años
Title: Re: nombre variable en archivos en SD SOLUCIANADO
Post by: noter on Feb 03, 2016, 06:11 pm
Jaja :)
Vale. No me fijé en la fecha de tu hilo, y como no me salió el aviso al haber sido resucitado pensé que era un problema más reciente. Además no habías puesto el solucionado  :D
Title: Re: nombre variable en archivos en SD SOLUCIANADO
Post by: mintordia on May 13, 2016, 08:44 pm
tengo la solucion a crear archivos con el nombre de una variable por si te interesa, al parecer solo te falto agrerar el caracter nulo al final de tu variable, ya que al crear el archivo inicializando tu variable de la siguiente manera char nombre[13]="13052016.txt"; lo que el compilador hace es reservar en el ultimo espacio un caracter nullo y de esta manera si te deja crear el archivo, lo que yo hice fue en una funcion getnombre(); adquirir la fecha de un reloj de tiempo real y asignarla a la variable tipo nombre solo modificando los primeros 8 elementos, lo que por defecto dejaba el .txt mas el caracter nullo en la variable. esto me permitio crear archivos con el nombre de la fecha, solo debes tomar en cuienta que no te deja usar caracteres como ':' o '/' en el nombre del archivo. espero a alguien pueda servirle esto.