Moderador:
En el título no debe usarse la palabra Ayuda. Edita!!
Edita también el código (aunque sean pocas líneas) usando etiquetas como lo explican las normas.
Lee el link que te dejo.
Y para terminar, evita usar Mayúsculas. En cualquier foro su uso es como gritarnos. Asi que modifica usando minúsculas. Normas del foro
No puedo responder a un código parcial, sería bueno que postearas todo tu código.
Unsigned long usa 4 bytes y efectivamente debes descomponer el dato en bytes separados para guardarlo, y para recuperarlo leer los 4 bytes para posteriormente reconstruir el dato original.
Creo que hay ejemplos que tienen ya las funciones definidas para guardar y recuperar todos los tipos de datos.
Esto resuelve tus problemas.
EEPROM.get(address, dato) para leer y
EEPROM.put(address,dato) para guardar.
dato puede ser cualquier cosa, solo debes tener en cuanto cuantos bytes ocupa usando sizeof(dato).
En tu caso son 4 byte, de modo que i debe incrementarse cada 4 valores.
Mira los ejemplos de EEPROM.get y EEPROM.put para mas información
Te dejo el código modificado.
#include <RCSwitch.h>
#include <EEPROM.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
Serial.begin(9600);
EEPROM.begin(4096);
mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2
Serial.print("INICIADO");
}
void loop() {
if (mySwitch.available()) {
int i = 0;
unsigned long valor;
Serial.println("Received ");
Serial.println( mySwitch.getReceivedValue() );
Serial.print(" / ");
Serial.print( mySwitch.getReceivedBitlength() );
Serial.print("bit ");
Serial.println("Protocol: ");
Serial.println( mySwitch.getReceivedProtocol() );
valor = mySwitch.getReceivedValue();
EEPROM.put(i, valor);
EEPROM.get(i, valor);
Serial.println(valor);
mySwitch.resetAvailable();
}
}
Algo mas, no abuses del uso de la grabación/lectura en la misma dirección. Puedes dañar la EEPROM en dicha grupo de direcciones.
Entiendo, según el tipo de dato que tienen ese par de instrucciones en particular, escriben o leen el número de bytes necesarios, yo lo hacía tipo "old school" (byte a byte) jeje
Todos los días se aprende algo nuevo, muchas gracias.
La "Old school" sigue vigente pero es mucho mas fácil con put y get.
Si tienes una estructura o variables diferentes float, int, long, solo debes incrementar respetando el tamaño del tipo de variable y listo. Es muy fácil.