la librería eeprom - eldesvandejose.com

Anuncio
This page was exported from - El desván de Jose
Export date: Mon Nov 21 4:56:36 2016 / +0000 GMT
LA LIBRERÍA EEPROM
Las plaquitas de Arduino cuentan con una zona de memoria de un tipo conocido como EEPROM (Electrically Erasable Read Only
Memory, Memoria de Sólo Lectura, Borrable Eléctricamente). Aunque el nombre pueda no parecer muy afortunado, se trata de una
memoria no volátil, es decir, cuyo contenido no se pierde cuando se desconecta la alimentación. Sin embargo, se puede borrar y
reescribir mediante las adecuadas señales eléctricas. Podemos considerar estas memorias como diminutísimos discos duros (la
capacidad varía de unas versiones de Arduino a otras, pero oscila entre 1 y 4 Kb). Si bien es muy poco, para determinados usos es
adecuada.
La librería EEPROM incorpora las instrucciones necesarias para gestionar estas memorias. ESTA LIBRERÍA FORMA PARTE
DEL IDE DE ARDUINO. NO ES NECESARIO DESCARGARLA.
Esta librería está formada por métodos que pueden ser usados directamente, sin necesidad de instanciar un objeto. Los métodos con
los que cuenta aparecen a continuación:
LA PROPIEDAD EEPROM[]
Es una matriz que se refiere a las celdas (unidades donde se almacena la información; en la práctica, cada celda contiene un byte) de
la EEPROM de nuestra plaquita. Se trata de una matriz que puede ser leida y/o escrita, apuntando, con el índice, a la celda en la que
queremos escribir, o de la que queremos leer.
Un ejemplo genérico de uso obedecería al siguiente esquema:
#include <EEPROM.h>
byte valor;
void setup(){
// Leer la primera celda (el primer byte).
valor = EEPROM[0];
//Escribir en el primer byte.
EEPROM[0] = 65;
//Comparar contenidos
if (EEPROM[0] >20){
// Líneas de código
}
}
void loop(){ /* Sección loop sin contenido */ }
EL MÉTODO read()
Se usa como forma de leer una posición de memoria de la EEPROM. La sintaxis general obedece a EEPROM.read(posicion);. Observa
que, como esta clase no se instancia en objeto, referenciamos el método (lo haremos así con todos) directamente a través del nombre
de la clase.
Un ejemplo de uso que lee una y otra ves los primeros 512 bytes de la memoria EEPROM es el siguiente código:
#include <EEPROM.h>
int indice = 0;
int valor;
void setup() {
Serial.begin(9600);
}
void loop(){
valor = EEPROM.read(indice);
Serial.print(indice);
Serial.print("t");
Serial.print(valor);
Serial.println();
Output as PDF file has been powered by [ Universal Post Manager ] plugin from www.ProfProjects.com
| Page 1/3 |
This page was exported from - El desván de Jose
Export date: Mon Nov 21 4:56:36 2016 / +0000 GMT
indice = indice + 1;
if (indice == 512) indice = 0;
delay(500);
}
EL MÉTODO write()]
Este es complementario del anterior. Nos permite escribir un byte específico en una posición de la memoria EEPROM. La sintaxis
general obedece al esquema EEPROM.write(posición, valor);. Vemos un ejemplo a continuación:
#include <EEPROM.h>
byte valor;
void setup() {
for (valor = 0; valor < 255; valor ++)
EEPROM.write(valor, valor);
}
void loop(){}
Observa que usamos una sola variable para referirnos a la posición y al valor. Como el método se encuentra en un bucle que itera
entre 0 y 254, lo que hará será escribir el valor 0 en la posición 0, el valor 1 en la posición 1, y así sucesivamente. No es muy útil,
pero, a efectos de referencia se entiende muy claro.
Observa también que el bucle se encuentra en la sección setup, no en loop. Esto no es lo habitual en entorno Arduino, pero viene muy
bien cuando queremos que un grupo de instrucciones (en este caso el bucle) no se esté ejecutando permanetemente.
EL MÉTODO update()
Su funcionamiento y uso es el mismo que el anterior. La diferencia es que este método sólo escribe el valor en la celda indicada, si el
que hay es diferente, no si ya es igual. La sintaxis es la misma que la del método anterior.
EL MÉTODO put()
Este método se emplea cuando se hace necesario escribir en la memoria datos que exceden del límite de un solo carácter. Por
supuesto, tales datos ocupan más de un byte y se almacenan del modo que vemos a continuación:
#include <EEPROM.h>
float valorFlotante = 1285.67;
int direccion = 0;
void setup() {
EEPROM.put(direccion, valorFlotante);
}
void loop() {}
Este código coloca el valor de la variable valorFlotante en la EEPROM, a partir de la celda especificada en la variable direccion (en el
ejemplo, 0). Si queremos saber el número de bytes que ocupa el valor (y, por ende, el número de celdas), podemos usar la función de
Arduino sizeof(), como se ve a continuación:
numBytes = sizeof(valorFlotante);
Recuerda: un número de tipo float se almacena en 32 bits (cuatro bytes).
EL MÉTODO get()
Este es complementario del anterior. Se usa para leer un dato de la EEPROM, de cualquier tamaño. Especificamos la dirección de
inicio, y nombre de la variable donde se almacenará la lectura. De este modo, según el tipo de variable, el método "sabe" cuantas
posiciones de memoria consecutivas debe leer.
Output as PDF file has been powered by [ Universal Post Manager ] plugin from www.ProfProjects.com
| Page 2/3 |
This page was exported from - El desván de Jose
Export date: Mon Nov 21 4:56:36 2016 / +0000 GMT
#include <EEPROM.h>
float valorFlotante;
int direccion;
void setup(){
EEPROM.get(direccion, valorFlotante);
}
void loop(){}
Este código leerá cuatro bytes y almacenará el contenido en forma de valor numérico flotante en la variable valorFlotante.
Output as PDF file has been powered by [ Universal Post Manager ] plugin from www.ProfProjects.com
| Page 3/3 |
Descargar