Go Down

Topic: nombre variable en archivos en SD SOLUCIANADO (Read 6219 times) previous topic - next topic

Aaron_loor

Jul 16, 2014, 09:07 pm Last Edit: Jul 22, 2014, 05:02 pm by Aaron_loor Reason: 1
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

Marcial

Puede usar una variable para el nombre del archivo

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

Aaron_loor

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

Aaron_loor

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();
            }
         
    }     



Marcial

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);


Aaron_loor

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

Aaron_loor


Marcial

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

Aaron_loor

gracias Marcial
agradezco tu interés y tu tiempo

carlosmorera

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.


noter

Pues no parece un problema complicado ¿En qué punto estáis actualmente?

Aaron_loor

en punto de que cambie un poco lo de guardar por día y terminé el proyecto hace 2 años

noter

#13
Feb 03, 2016, 06:11 pm Last Edit: Feb 03, 2016, 06:12 pm by noter
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

mintordia

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.

Go Up