28-08-2021, 08:41 AM
Buenos días, estoy intentando leer la ultima linea en una tarjeta microSD, para poder utilizar esa información y actualizar unas variables en Arduino
el problema es que no consigo que lo haga, he estado buscando y he visto una libreria SEPARADOR.H que me serviria perfectamente con mi idiea, el problema es que no consigo que funcione.
parece que no extrae la información de la tarjeta o que no se posiciona en el principio de la ultima linea para leer, me podéis echar una mano?
mi nivel de programacion no llega ni a la tapa de un libro de programación, por lo que os pido paciencia, Gracias.
estos datos estarían en mi fichero
contadorPotenciaTotal, Contador PUNTA, Contador LLANO, Contador Valle, Contador Year anterior;
5987, 4108, 1879, 61, 2429;
la idea es que en caso de apagada de luz al reiniciar el arduino el solo leyera la SD y actualizara el ultimo valor, os dejo el codigo por si veis donde falla.
lo absurdo es que me funciono un par de veces, pero algo he tocado y no consigo ver el que, llevo ya una semanita, intentando resolver el problema.
el problema es que no consigo que lo haga, he estado buscando y he visto una libreria SEPARADOR.H que me serviria perfectamente con mi idiea, el problema es que no consigo que funcione.
parece que no extrae la información de la tarjeta o que no se posiciona en el principio de la ultima linea para leer, me podéis echar una mano?
mi nivel de programacion no llega ni a la tapa de un libro de programación, por lo que os pido paciencia, Gracias.
estos datos estarían en mi fichero
contadorPotenciaTotal, Contador PUNTA, Contador LLANO, Contador Valle, Contador Year anterior;
5987, 4108, 1879, 61, 2429;
la idea es que en caso de apagada de luz al reiniciar el arduino el solo leyera la SD y actualizara el ultimo valor, os dejo el codigo por si veis donde falla.
lo absurdo es que me funciono un par de veces, pero algo he tocado y no consigo ver el que, llevo ya una semanita, intentando resolver el problema.
Código:
#include <Separador.h>
Separador s;
#include <SD.h>
#include <SPI.h>
File printFile;
String buffer;
boolean SDfound;
void setup() {
Serial.begin(9600);
if (SDfound == 0) {
if (!SD.begin(4)) {
Serial.print("The SD card cannot be found");
while(1);
}
}
SDfound = 1;
printFile = SD.open("DATALOG.txt",FILE_READ);
if (printFile)
{
bool line=false;
printFile.seek(printFile.size()-1); //Ubicacion en posicion anterior a ultimo caracter
Serial.println("entramos en el if si esta conectado el archivo");
while (printFile.available())
{
if(line==false) //Primero leer en reversa para buscar salto de linea
{
char caracter=printFile.read();
//Serial.println(caracter);
printFile.seek(printFile.position()-2);
Serial.println("estamos buscando el inicio de la linea");
if(caracter=='\n') //Cuando encuentra salto de linea cambia estado
{
Serial.println("hemos encontrado el salto linea");
line=true;
}
}
if(line==true) //Empieza a leer normalmente de izquierda a derecha
{ char caracter = printFile.read();
//Serial.println(caracter);
String cadena = cadena+caracter;
Serial.println("estamos leyendo la ultima linea");
if(caracter==';')
{
Serial.print("estamos en el break");
break;
}
Serial.println("estamos al inicio de cargar datos");
Serial.println(cadena);
String datosrecibidos = printFile.readStringUntil(';');
Serial.println();
Serial.println();
Serial.println(datosrecibidos);
//String datosrecibidos = cadena; //buffer = printFile.readStringUntil('\n');
//Serial.println(datosrecibidos); //Printing for debugging purpose
String elemento1 = s.separa(datosrecibidos,',',0);
String elemento2 = s.separa(datosrecibidos,',',1);
String elemento3 = s.separa(datosrecibidos,',',2);
String elemento4 = s.separa(datosrecibidos,',',3);
String elemento5 = s.separa(datosrecibidos,',',4);
String elemento6 = s.separa(datosrecibidos,',',5);
delay (200);
if (elemento1 !=0){
Serial.println("el elemento1 es:"+ elemento1);
Serial.println("el elemento2 es:"+ elemento2);
Serial.println("el elemento3 es:"+ elemento3);
Serial.println("el elemento4 es:"+ elemento4);
Serial.println("el elemento5 es:"+ elemento5);
Serial.println("el elemento6 es:"+ elemento6);
}
}
}
printFile.close();
}
}
void loop() {
//empty
}