Hola gente Arduinera, estoy teniendo un problema medio extraño y estoy seguro que es una tontera pero no logro darme cuenta que estoy haciendo mal.
Estoy trabajando con un Arduino Pro-Mini 328P y me encontre con la necesidad de almacenar información en la eeprom del microcontrolador. El problema consiste en que grabo una información dentro de la memoria pero cuando voy a leerla me encuentro con que solo una parte de la información que estoy tratando de guardar esta en la memoria.
Les dejouna imagen para que vean lo que esta sucediendo y el codigo con el cual estoy trabajando.
Codigo de Escritura
#include <EEPROM.h>
int info=0b1111111100000000;
byte H;
byte L;
int address=0;
void setup() {
Serial.begin(9600);
}
void loop() {
H = highByte(info);
L = lowByte(info);
EEPROM.write(address,H);
EEPROM.write(address+1,L);
address++;
delay(500);
}
Codigo de Lectura:
#include <EEPROM.h>
int address = 0;
int value;
void setup(){
Serial.begin(9600);
}
void loop(){
value = EEPROM.read(address);
Serial.print(address);
Serial.print("\t");
Serial.print(value, DEC);
Serial.println();
address++;
delay(500);
}
Primero ejecuto el código de escritura lo que debería grabar esto:
Hace lo que tu le estas diciendo que haga.Cuando address vale 0,graba 255 en la direccion 0 y 0 en la direccion 1 (address + 1) ,luego incrementas address en 1,luego 0+1= 1 ,graba 255 donde tenias guardado el 0... y asi todas las direcciones.tendrias que incrementar address de 2 en 2 ,en vez de 1 en 1.Ademas en tu sketch de grabado no limitas el numero de grabaciones y el atmega 328p solo tiene 1 KB de eeprom ,por lo que si te dejas ese sketch funcionando mucho tiempo la variable address se desborda y vuelve a comenzar de nuevo ,volviendo a grabar en la eeprom ,y el ciclo de grabaciones de la eeprom es limitado.
PD: veo que estás haciendo algo inusual a la arquitectura de Arduino.
Normalmente, las variables como int se almacenan en el orden LH (también conocido como "little-endian"); y tu lo haces al revés (también conocido como "big-endian").
No es que esté mal, es sólo un consejo de rendimiento y de "consistencia".
Además de que existen funciones como put y get; los cuales escriben y leen respectivamente, tipos de datos diferentes del byte o char.
El único truco aquí, es el tener que saber la longitud del tipo de dato a leer/escrbir (en caso de ser más de un dato).
Por dios.. que error de novato tienen razón estaba sobreescribiendo los datos, sabia que era un error tonto pero bueno.
Si jose sabia lo de la limitación de grabado, el código que subi lo simplifique al máximo ya que estaba seguro que en esas líneas estaba mi error, en mi codigo final no permito que mi variable address sobrepase el valor de 1023. Lucario448 gracias por tu comentario voy a leer sobre las funciones put y get seguramente lo voy a poder usar en mi proyecto.