Guardar en EEPROM un numero entre 0 y 999

Buenas,

Quiero guardar en la EEPROM de mi Arduino Nano una variable cuyo valor puede ser un número entre 0 y 999. He visto que cada dirección es un byte por lo que como máximo podrá guardar un valor de 255. ¿Cómo guardo un número mayor? Gracias!

¿Has visto put y get en EEPROM?
Permite la escritura/lectura de prácticamente cualquier tipo de dato.

No no las conocía, es la primera vez que trato el tema de usar la EEPROM para valores que no se borren. Miraré lo que me has dicho. Gracias!

He intentado utilizar EEPROM.put pero me da problemas.

#include <EEPROM.h>
int a=64;

void setup(){}

void loop(){
  EEPROM.put(0, 64);
}

Este simple código me da el error:

sketch_apr18b.ino: In function 'void loop()':
sketch_apr18b:7: error: 'class EEPROMClass' has no member named 'put'

Como si EEPROM.put no existiese… en los ejemplos del Arduino IDE sólo vienen ejemplos de write, read y clear. Pero creía que put, get… también estaban incluidas en la librería EEPROM.h, ¿qué es lo que ocurre? Muchas graciassss

De hecho, se usa de la siguiente manera:

EEPROM.put(0, a);

Se le introduce el nombre de la variable, no un valor constante.

Google: Arduino EEPROM.put y ahi verás como se usa.

Siempre antes de consultar agota la búsqueda simple. Luego pregunta lo que no entiendas.

#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 native USB port 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 */
}

Perdón Lucario448 me equivoqué al copiar. El ejemplo lo puse con la variable:

#include <EEPROM.h>
int a=64;

void setup(){}

void loop(){
  EEPROM.put(0, a);
}

Y me siguen dando el mismo error:

sketch_apr18b.ino: In function 'void loop()':
sketch_apr18b:7: error: 'class EEPROMClass' has no member named 'put'

Surbyte lo intenté con el código que pusiste y tampoco me funciona, por eso acudí al foro. Me sale el mismo error:

sketch_apr18c.ino: In function 'void setup()':
sketch_apr18c:21: error: 'class EEPROMClass' has no member named 'put'
sketch_apr18c:36: error: 'class EEPROMClass' has no member named 'put'

La version de Arduino IDE que uso es la 1.0.5 para Mac y los ejemplos que vienen con write, read y clear sí funcionan. ¿Pudiera ser de la librería?

Entonces utiliza estas funciones para leer/escribir más de un byte en la EEPROM:

void escribirEEPROM(unsigned int direccion, unsigned int n) {
  byte* p = &n;
  for (unsigned int i = 0; i < sizeof(int); i++, direccion++) EEPROM.update(direccion, b[i]);
}

int leerEEPROM(unsigned int direccion) {
  int n = 0; 
  byte* p = &n;
  for (unsigned int i = 0; i < sizeof(int); i++, direccion++) b[i] = EEPROM.read(direccion);
  return n;
}

Tal parece que la versión 1.0.5 realmente no implementa put y get en EEPROM.

Hola, disculpen la ignorancia pero estoy también comenzando a usar la memoria eeprom y también estoy teniendo problemas en el garuado y lectura de datos, pero mi pregunta ahora es por el ultimo post de lucario448.

void escribirEEPROM(unsigned int direccion, unsigned int n) {
byte* p = &n;
for (unsigned int i = 0; i < sizeof(int); i++, direccion++) EEPROM.update(direccion, b*);*
}
int leerEEPROM(unsigned int direccion) {

  • int n = 0;*
    _ byte* p = &n;_
    _ for (unsigned int i = 0; i < sizeof(int); i++, direccion++) b = EEPROM.read(direccion);_
    * return n;*
    }
    en el skecth pones que se devuelve la variable “n”, en que momento es pasado ese dato, por que no logro ver donde es asignado el valor recuperado de la eeprom y guardado en la variable n. Muchas gracias

A ver. Se define un entero n dentro de la función. A continuación se apunta a ese entero con el puntero *p. Mediante dicho puntero se escriben dos bytes ocupados por el entero n con dos lecturas de la eeprom, actualizando el valor de n, que es lo que retorna la función.
No obstante, creo que aquí no está la solución a tu problema. Voy a ver si entiendo la consulta en el hilo que iniciaste.

Doble posteo de Scout1987, hilo cerrado