Busca en nuestro Blog. Encontrarás múltiples aplicaciones, soluciones, ejemplos de código. Navega utilizando la nube de etiquetas o busca utilizando criterios específicos

Cómo tocar datos de la EEPROM

Comprende cómo trabajar con controladores industriales Arduino

Introducción

EEPROM es una memoria cuyos valores se mantienen cuando se apaga la placa Arduino del controlador. En este ejemplo se muestra cómo escribir y leer desde la EEPROM.

En nuestros productos,

Ardbox >> tiene 1KB 
M-Duino >>  tiene 4KB de EEPROM.

Requisitos

Ethernet o 20 I/Os PLC:
Ethernet PLC >> 

 20 I/Os PLC >>

Librería EEPROM:
EEPROM.h Arduino Library >>


Software

En este ejemplo veremos cómo utilizar las funciones EEPROM.write(), EEPROM.read(), EEPROM.put() y EEPROM.get().

 El primer código de ejemplo se implementa cómo almacenar un byte de la entrada analógica 0 en el EEPROM utilizando el EEPROM.write().  EEPROM.write() almacena un byte en el 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);
}

 

El segundo código de ejemplo se implementa como leer un byte de 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);
}

 

El tercer código de ejemplo se implementa como utilizar EEPROM.put(). EEPROM.put() es una función ha que permite escribir en el EEPROM, pero con EEPROM.put() puede 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 */
}

 

El siguiente código de ejemplo se implementa cómo a nosotros el EEPROM.get(). Es similar que el EEPROM.read(),  pero en lugar de leer un byte con EEPROM.get() puede 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 el sitio web oficial de Arduino

Arduino Libraries >>


¿Quieres más información? 

¡Solo llena el formulario! 

¡Quiero saber más!  Por favor, llene el formulario correctamente.