Go Down

Topic: Grabar una suma en archivo SD (Read 363 times) previous topic - next topic

cicutomarcelo

Buenas estimados...
Este fin de semana la saque chispas a la tarjeta SD, sin embargo me terminó ganando...
Necesito hacer algo simple: Empezar con un valor guardado en un archivo en la tarjeta SD y luego ir sumando su mismo valor dentro del loop y grabando el ultimo valor de la suma en el mismo archivo...suena simple no?

Pongo mi codigo: (la parte inicial que borra el archivo en la SD la puse para asegurarme de empezar con el número 5 la suma, pero si funcionara, no haría falta)


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

File myFile;
int suma =0;


void setup() {
  Serial.begin(9600);
  Serial.print("Inicia SD...");

  if (!SD.begin(4)) {
    Serial.println("Error Inicio");
    while (1);
  }

  if (SD.exists("TEST.TXT")) {
      SD.remove("TEST.TXT");
      Serial.print("Eliminando archivo...");
      delay(1500);
  } else { Serial.println("No existe archivo para borrar"); }
 
  myFile = SD.open("TEST.TXT", FILE_WRITE);
  if (myFile) {
    Serial.println("Escribiendo en archivo..: 5");
    myFile.print("5");
    myFile.close();
    Serial.println("Ok");
    delay(1500);
  } else {
    Serial.println("error archivo");
  }

}

void loop() {
  myFile = SD.open("TEST.TXT");
  String total ="";
  if (myFile) {
    Serial.println("Leyendo archivo:");
    while (myFile.available()) {
        total = myFile.read();
    }
    Serial.println("Valor leido archivo: " +total);
    suma = suma + total.toInt();
    Serial.println("Valor de Suma: ");
    Serial.println(suma);
    myFile.close();
  } else {
    Serial.println("error archivo");
  }
  delay(4500);

  myFile = SD.open("TEST.TXT", FILE_WRITE);
  if (myFile) {
    Serial.print("Grabando Nuevo valor...");
    myFile.seek(0);
    Serial.print("Valor a Grabar: ");
    Serial.println(suma);
    myFile.print(suma);
    myFile.close();
    Serial.println("Ok");
  } else {
    Serial.println("error archivo");
  }
  delay(4500);
 
}


Resultado en el archivo en la SD:

553104156210258314366420468524576630678


Lo que se ve en el serial es esto:
Inicia SD...Eliminando archivo...Escribiendo en archivo..: 5
Ok
Leyendo archivo:
Valor leido archivo: 53
Valor de Suma:
53
Grabando Nuevo valor...Valor a Grabar: 53
Ok
Leyendo archivo:
Valor leido archivo: 51
Valor de Suma:
104
Grabando Nuevo valor...Valor a Grabar: 104
Ok
Leyendo archivo:
Valor leido archivo: 52
Valor de Suma:
156
Grabando Nuevo valor...Valor a Grabar: 156
Ok
Leyendo archivo:
Valor leido archivo: 54
Valor de Suma:
210
Grabando Nuevo valor...Valor a Grabar: 210
Ok
Leyendo archivo:
Valor leido archivo: 48
Valor de Suma:
258
Grabando Nuevo valor...Valor a Grabar: 258
Ok



Alguien me puede explicar de donde salen esos números?

La idea es que en el archivo SD solo tenga un número que es la suma de 5 tanta veces que se ejecute el loop, solo un número, el total...

Muchas Gracias por responder.
Saludos.




cicutomarcelo

Agrego por las dudas, trabajo con Arduino Mega y el Shield Ethernet w5100
La librería SD instalada es la 1.2.1
Gracias.

Lucario448

Quizá sea por la forma de lectura:
Code: [Select]
total = myFile.read();

Lo correcto debería ser:
Code: [Select]
total = myFile.readString();


PD: código va entre etiquetas generadas por </>

cicutomarcelo

Hola Lucario448
Que suerte que me contestaste....
Efectivamente era eso...pero de donde sacaste la función readString()...en los ejemplos de la librería no figura...
Sos un genio...
De donde sos? Haces proyectos en arduino?
Gracias.
Saludos.

cicutomarcelo

Buenas...
Ahora tengo el problema que al grabar en el archivo SD no se me posiciona al principio con el seek y los valores de la suma me los agrega y no sobre escribe el valor anterior...
Alguna sugerencia de los amigos del foro...
Gracias por la ayuda.
Saludos.

Go Up