Seguimos con la memoria EEPROM de Arduino, su memoria no volátil: vimos cómo leer y escribir de forma básica, y vimos cómo guardar un dato mayor de un byte recortándolo y almacenándolo repartido en varias posiciones de memoria. Pero lo que no vimos en ese apartado fue ¿cómo lo recuperamos?
Pues básicamente vamos a hacer lo mismo que en el ejemplo anterior pero al revés, volviendo a tirar de opreaciones de desplazamiento de bit. Declararemos una variable con el tipo de lo que queremos recuperar y junto a ella otra variable contenedor, leo un byte, lo almaceno en la auxiliar, lo desplazo hacia la izquierda para que sea el más significativo y lo anexo al total con una operación OR, y finalmente limpiamos la variable auxiliar.
Enchurrado en código es similar a esto:
long Numero = 0; //Variable contenedor inicializada a 0 long Contenedor = 0; //recorremos el bucle hacia atrás, al revés que en el ejemplo anterior for (int i = sizeof(Numero); i > 0 ; i--){ //Aquí guardamos en el contenedor // un byte de datos Contenedor = EEPROM.read(i-1); //Desplazamos tantos bits como toque //en esta iteración del bucle. //El if es porque en la última iteración //no habría que desplazar. if (i != 1){ Contenedor = Contenedor << (8*i); } //Utilizamos la operación a nivel de bit OR para //añadir a nuestro resultado final //el valor del byte leído. Dato = Dato | Contenedor; //Reiniciamos la variable //auxiliar para evitar problemas //con datos leídos previamente Contenedor = 0; }
Este ejemplo es limitado, ya que sólo te valdría en caso de que hayas guardado un único valor repartido en bytes, como en el ejemplo anterior. En el futuro veremos cómo usar los métodos get() y put() que simplican el tema.
Como en el ejemplo anterior es necesario conocerse las operaciones de desplazamiento de bit y las operaciones lógicas a nivel de bit.
Si tienes interés en Arduino a mi me ha servido de ayuda la wiki de Arduinobot y su manual en PDF.