practica en memoria eeprom usando librería AT24CX [SOLUCIONADO]

Buenos días a todos saludos

Actualmente estoy practicando para realizar un programa que cada cierto tiempo me guarde un dato tipo Float en memoria eeprom 24LC512 y se incremente dicha posición hasta llegar a 390 datos y estoy usando la librería AT24XC, para lo cual elabore un pequeño programa de prueba, para comprobar si me lee y guarda los datos tal como yo quiero, pero no me esta funcionando quería que me aclararan cuales errores estoy cometiendo ya que no lo puedo detectar y este es el programa que hice:

#include <Wire.h>
#include <AT24CX.h>
float temp;
float f;
int   Time_Seg = 86400;    // duracion de un dia 24 horas o 86400 seg
int   i;
int   Count_Seg;
AT24CX Memoria;


// setup
void setup() {

Serial.begin(9600);
Serial.println("Uso de la librería AT24CX para leer y escribir datos tipo Float");
Count_Seg = 0;    
i=0;
temp = 3.14;
f=0;
}




void loop() {
 
             if(Count_Seg >= 60){                
             Serial.print(F("Se guarda valor en memoria: "));
             Serial.println(temp);  
             Serial.print("posicion[");
             Serial.print(i);
             Serial.println("] = ");
             Memoria.writeFloat(i, temp);  
             Count_Seg = 0;
             temp++;
             i++;
             if (i >10){
               i=0;
               }            
             }
             delay(1000);
             Count_Seg++;
             f = Memoria.readFloat(i);
             delay(100);
             Serial.print("... leo     en memoria: ");
             Serial.print("posición[");
             Serial.print(i);
             Serial.print("] = ");
             Serial.println(f);
             

 }

Moderador:
En el título no debe usarse la palabra Ayuda. Edita!!
Edita también el código usando etiquetas tal como se explica en las normas que te dejo a continuación.

Lee las Normas del foro

No aclaras qué es lo que no funciona?

La librería AT24CX tiene un ejemplo que es este, lo has probado?

Moderador:
Gracias por NO editar como te he pedido.

Tu respuesta se ha vuelto muy confusa para leer.

Por favor edita título quitando la palabra Ayuda, el código inicial debe ir con etiquetas.
Intenta hacer una respusta limpia.

Buenas aquí me auto respondo

Después de varias pruebas logre hacer que mi memoria AT24C512 grabara la información correctamente y la leyera de la misma forma, mi error fue que a la hora de grabar los datos olvide que un Float equivale a 4 byte y a la hora de realizar la grabación lo realizaba de forma consecutiva, es decir, en la posición 1 colocaba por ejemplo 3.14 y en la 2 colocaba otro como 6.14 y que sucedía que sencillamente me borraba parte del dato en la primera celda, y cuando leia dicho dato me arrojaba pura basura. lo modifique y aquí les dejo el código, el cual trabaja de la siguiente manera. Graba un valor en determinado tiempo aquí es mas o menos 5 seg, pero se puede modificar dicho valor, que inicialmente lo puse de 22.33, colocado en el registro temp, el ira guardando el valor de temp incrementado en 1 y lo coloca en la próxima posición del float siguiente.

#include <Wire.h>
#include <AT24CX.h>
float temp;
float f;
int   Time_Seg = 86400;    // duracion de un dia 24 horas o 86400 seg
int   i;
int   j;
int   Count_Seg;
AT24CX Memoria;


// setup
void setup() {
 
 Serial.begin(9600);
 Serial.println("Uso de la libreria AT24CX para leer y escribir varios tipos de datos");
 Serial.println("----------------------");
Count_Seg = 0;    
i=0;
j=0;
temp = 22.33;
f=0;






}




void loop() {
             
             if(Count_Seg >= 5){    
             Serial.print(F("Se guarda valor en memoria["));
             Serial.print(temp);  
             Serial.print("]  posicion[");
             Serial.print(i);
             Serial.println("] = ");
             Memoria.writeFloat(i, temp);  
             Count_Seg = 0;
             if (i >360){
               i=0;
               temp = 22.33;
             }
             temp++;
             i = i + 4;                
             }            
             delay(500);
             Serial.println("Procedo a leer Memoria");
             for(j=0;j<360+4*sizeof(float); j+= sizeof(float)){
             f = Memoria.readFloat(j);
             delay(10);
             Serial.print("posicion[");
             Serial.print(j);
             Serial.print("] = ");
             Serial.println(f);
             }
             Count_Seg++;              


 }

Espero que les sirva y si me puede sugerir como mejorarlo muchas gracias, funciona al 100%. Saludos

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.