Buenas, estoy haciendo un proyecto donde con una barrera IR cuento cuantas personas van pasando y calculo la capacidad del momento en un lugar.
Mi idea es que cada vez que pase guardar en un datalogger en la SD la cantidad de personas del momento, asi si se corta la electricidad y vuelve recupero los datos.
Mi problema surge al buscar la ultima linea del archivo SD y pasarlo a una variable para trabajar con eso.
La verdad que vengo hace dias probando y buscando info en internet y no logro hacerlo andar, realize muchas pruebas pero nada.
Alguno tiene una idea de como puedo hacerlo? Simplemente necesito un idea que seguir asi puedo avanzar porq estoy bloqueado.
Muchas gracoas
bnjis:
Mi problema surge al buscar la ultima linea del archivo SD y pasarlo a una variable para trabajar con eso.
La última línea o el final del archivo?
Podrías darme una especie de muestra de lo que guarda el susodicho archivo?
Gracias por responder.
Mi idea es en el archivo ir agregando cada vez que el contador suma el numero actual ej:
1
2
3
4
5
...
Y sipor esas razones se corta la corriente, que en el setup al iniciar la placa pueda recuperar el ultimo registro para largar de ese numero el contador...
Se entiende??
Pregunto? Has guardado datos en la SD?
Los has recuperado luego?
Bueno lo unico que debes hacer es al leer los datos de la SD quedarte con el último
Los ejemplos de escritura y lectura de la SD son suficientemente didácticos para resolver tu problema
Surbyte gracias!
Si los puedo grabar y leer a todos, en eso no estoy teniendo problemas.
Mi duda surge que al principio o tendria problema en leer todo el archivo, ya que no tendria datos, pero imaginate en algun momento donde el archivo llegue a mas de 10.000 registros nose si va a demorar mucho eso...
Por eso lo q queria era situar directamente en el utimo registro... pero tampoco se si por ahi el tiempo de leer todo el archivo sea microsegundos y se justifique hacerlo asi...
Si el archivo se abre para lectura/escritura (FILE_WRITE), el puntero siempre se colocará al final del archivo. Si se abre para solo lectura, habría que redirigirlo de la siguiente manera:
archivo.seek(archivo.size());
Pero como esto lleva al final de archivo y no al comienzo de la última línea, habrá que realizar lo siguiente.
// Puntero en el final del archivo, o sea,
// archivo.position() == archivo.size()
archivo.seek(archivo.position() - 1);
char c = archivo.peek();
while (c != '\n') {
archivo.seek(archivo.position() - 1);
c = archivo.peek();
}
archivo.read();
// Ahora sí, posicionado en la última línea
Bueno, como vas tirando la información en cuenta gotas, es dificil suponer. Pero ya te dieron la solución.
Otra solución posible es que guardes en EEPROM la ultima posición usada y busques a partir de ahi.
Buenas,
Primero gracias por las respuestas.
Solucione el problema haciendo directamente para nuevos ingresos ir guardando en un archivo, y directamente guardo en otro archivo que borro cada ves q sumo el numero, entonces siempre queda en primera linea. De esa forma tengo el registro del momento y despues en cuanto quedo.
Mi duda ahora pasa que no puedo hacer andar el ethernet y la sd... busco hay mucha informacion en la web pero no lo logro hacer andar.
Lei que como comparten el bus SPI no pueden iniciar juntos, pero los desactivo cuando inicio y tampoco logro hacerlo andar.
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);// deshabilitar la tarjeta SD
pinMode (4, OUTPUT);
digitalWrite (4, HIGH);// Iniciamos el server:
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());// deshabilitar el chip Ethernet
pinMode (10, OUTPUT);
digitalWrite (10, HIGH);
digitalWrite (4, LOW);
//INICIAMOS LA TARJETA SD
Serial.print("Initializing SD card...");
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");
Ese es el codigo... cuando tiene la tarjeta SD puesta no carga el ip... en el monitor tira 255.255.255.255
Pero cuando la saco ahi si tira el ip correcto...
Alguno tiene una idea?
Si estas colgando tu código completo te falta asignar estos
Ethernet.begin(mac, ip, gateway, subnet);
Algo así
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip ( 192,168, 0,177);
IPAddress gateway ( 192,168, 0, 1 );
IPAddress subnet ( 255,255,255, 0 );
EthernetServer server(80);
;
void setup()
{
Ethernet.begin(mac, ip, gateway, subnet);
delay(100);
server.begin();
Serial.println("Listo");
}