Qué es una EEPROM
La EEPROM es una memoria cuyos valores se conservan cuando la placa Arduino del controlador de automatización Arduino está apagada. A continuación, hay ejemplos con la función EEPROM.write(), EEPROM.read(), EEPROM.put() y EEPROM.get(). Muestran cómo escribir y leer de la EEPROM.
En nuestros controladores lógicos programables para la automatización industrial,
Ardbox PLC Arduino >>> tiene 1KB
M-Duino PLC Arduino >>> tiene 4KB de EEPROM.
Requisitos
Ethernet o 20 I/Os PLC:
Ethernet PLC >>
Librería Arduino EEPROM:
Librería EEPROM.h Arduino IDE >>
Software
En este ejemplo de Arduino EEPROM veremos cómo utilizar las funciones EEPROM.write(), EEPROM.read(), EEPROM.put() y EEPROM.get().
Ejemplo EEPROM.write()
El primer código de ejemplo de la EEPROM de Arduino implementa cómo almacenar un byte de la entrada analógica 0 en la memoria de la EEPROM usando EEPROM.write(). EEPROM.write() almacena un byte en la EEPROM:
#include <EEPROM.h> int addr = 0; // current adress in the EEPROM void setup() { /** Empty setup. **/ } void loop() { /*** Need to divide by 4 because analog inputs range from 0 to 1023 and each byte of the EEPROM can only hold a value from 0 to 255. ***/ int val = analogRead(0) / 4; /*** Write byte val to addres addr of the EEPROM. ***/ EEPROM.write(addr, val); /*** Increment value addr to store next byte to the EEPROM. ***/ addr = addr + 1; if (addr == EEPROM.length()) { addr = 0; } delay(100); }
Ejemplo EEPROM.read()
El segundo código de ejemplo implementa cómo leer un byte de la memoria EEPROM utilizando la función EEPROM.read():
#include <EEPROM.h> int address = 0; byte value; void setup() { // initialize serial and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Ardbox only } } void loop() { // read a byte from the current address of the EEPROM value = EEPROM.read(address); // print value to the serial port Serial.print(address); Serial.print("\t"); Serial.print(value, DEC); Serial.println(); address = address + 1; if (address == EEPROM.length()) { address = 0; } delay(500); }
Ejemplo EEPROM.put()
El tercer código de ejemplo se implementa como utilizar EEPROM.put(). EEPROM.put() es una función que permite escribir en la memoria EEPROM, pero con EEPROM.put() puedes escribir datos más complejos en el EEPROM como una estructura, float, etc...
#include <EEPROM.h> struct MyObject { float field1; byte field2; char name[10]; }; void setup() { Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Ardbox only } float f = 123.456f; //Variable to store in EEPROM. int eeAddress = 0; //Location we want the data to be put. //One simple call, with the address first and the object second. EEPROM.put(eeAddress, f); Serial.println("Written float data type!"); /** Put is designed for use with custom structures also. **/ //Data to store. MyObject customVar = { 3.14f, 65, "Working!" }; eeAddress += sizeof(float); //Move address to the next byte after float 'f'. EEPROM.put(eeAddress, customVar); Serial.print("Written custom data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!"); } void loop() { /* Empty loop */ }
Ejemplo EEPROM.get()
El siguiente código de ejemplo se implementa cómo a nosotros el EEPROM.get(). Es similar al EEPROM.read(), pero en lugar de leer un byte, con EEPROM.get() puedes obtener datos más complejos como una estructura:
#include <EEPROM.h> void setup() { float f = 0.00f; //Variable to store data read from EEPROM. int eeAddress = 0; //EEPROM address to start reading from Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Ardbox only } Serial.print("Read float from EEPROM: "); //Get the float data from the EEPROM at position 'eeAddress' EEPROM.get(eeAddress, f); Serial.println(f, 3); //This may print 'ovf, nan' if the data inside the EEPROM is not a valid float. secondTest(); //Run the next test. } struct MyObject { float field1; byte field2; char name[10]; }; void secondTest() { int eeAddress = sizeof(float); //Move address to the next byte after float 'f'. MyObject customVar; //Variable to store custom object read from EEPROM. EEPROM.get(eeAddress, customVar); Serial.println("Read custom object from EEPROM: "); Serial.println(customVar.field1); Serial.println(customVar.field2); Serial.println(customVar.name); } void loop() { /* Empty loop */ }
Vea más información en la página oficial Arduino IDE