Hola a todos, les agradezco de antemano el apoyo que me puedan brindar, les comento, estoy realizando un proyecto con controles rf, cuando lea un control necesito comparar con una base de datos de un archivo de texto en una sd, si el control existe en esa base de datos realizar unas acciones, tengo un programa que me funciona con base de datos pequeña,almaceno todo en una variable String y luego voy obteniendo datos, pero cuando supero los 300 bytes la variable no me aguanta y el programa no lee nada, no soy bueno con el tema de arreglos, quisiera que me ayuden por favor dándome ideas de algún arreglo para almacenar en la variable solo una fila a la vez y no todo el archivo, Gracias.
Acá les envió el código que estoy usando para la prueba y el ejemplo de base de datos.
#include<Wire.h>
#include<Separador.h>
#include <SPI.h> // incluye libreria interfaz SPI
#include <SD.h> // incluye libreria para tarjetas SD
#define SSpin 10 // Slave Select en pin digital 10
unsigned long control;
int fila;
int salida;
File database;
Separador S;
void setup() {
Serial.begin(9600); // inicializa monitor serie a 9600 bps
Wire.begin();
//rtc.setDateTime(dt); //Adjust date-time as defined 'dt' above (QUITAR COMENTARIOS LA PRIMERA CARGA PARA PROGRAMAR EL MODULO DE RELIOJ CON ESTA HORA,VOLVER A CARGAR DESPUES COMENTARIADO)
Serial.println("Inicializando tarjeta SD..."); // texto en ventana de monitor
delay(2000);
if (!SD.begin(SSpin)) { // inicializacion de tarjeta SD
Serial.println("fallo en inicializacion !");// si falla se muestra texto correspondiente y
delay(2000);
return; // se sale del setup() para finalizar el programa
}
Serial.println("inicializacion correcta"); // texto de inicializacion correcta
database = SD.open("database.txt", FILE_WRITE);
}
void loop() {
database = SD.open("database.txt"); // apertura de archivo
int i=0;
int j=1;
int k=2;
int l=3;
Serial.println("Entrada");
while (database.available())
{
String captura_datos = database.readString(); // lee y almacena todo el archivo database¡¡¡¡¡¡¡¡
while(control!=1)// para el programa de prueba la ultima lina del arvhivo es 1,1,1,1
{
// leo los datos almacenados en las primeras casillas con separacion por comas
String datosfila=S.separa(captura_datos,',',i);
String datoscontrol=S.separa(captura_datos,',',j);
String datospersona=S.separa(captura_datos,',',k);
String datossalida=S.separa(captura_datos,',',l);
//convierto las variables obtenidas
fila=datosbandera.toInt();
control=datoscontrol.toInt();
salida=datossalida.toInt();
// imprimo datos aun en String para verificar
Serial.println("datos cargados");
Serial.print(datosfila);
Serial.print(",");
Serial.print(datoscontrol);
Serial.print(",");
Serial.print(datospersona);
Serial.print(",");
Serial.println(datossalida);
// imprimo variable convertidas a int
Serial.println("datos convertidos");
Serial.println(fila);
Serial.println(control);
Serial.println(salida);
i=i+4;
j=j+4;
k=k+4;
l=l+4;
delay(3000);
}
database.close();
Serial.println("salida");
control=0;
}
}
Base de datos tipo: num fila, codigo control,datos,salida a activar
1,5592512,Andrea Perez 205,2,
2,5592525,carlos Perez 504,5,
3,5592568,Jimmy Calderon 602,6,
4,5592593,Angie Jurado 208,2,
5,1,1,1,1,