Another way is to use wl and wr as bytes and not as unsigned integers.
The operation wl=MyInteger will always select the last 8 bits from the MyInteger value.
So if MyInteger=XXXXXXXXYYYYYYYY and wr=MyInteger then wr = YYYYYYYY
So , now for the left part we have to move it 8 position to the right wl=MyInteger>>8;
wl=00000000XXXXXXXX=XXXXXXXX
The rest is pretty similar to the first approach.
#include <EEPROM.h>
unsigned int StoredValue;
void SaveToEEPROM(unsigned int MyInteger){
//MyInteger is 2 byte (unsigned int) so 2*8=16bit long
//Lets say that: MyInteger XXXXXXXXYYYYYYYY
//THE BYTE ALWAYS SELECTS THE LAST 8 BITS
byte wl;
wl=MyInteger>>8; //8 zeros at beginning wl=XXXXXXXX
byte wr;
wr=MyInteger; //wr=YYYYYYYY
EEPROM.write(0,wl); //I write XXXXXXXX
EEPROM.write(1,wr); //I write YYYYYYYY
}
unsigned int ReadFromEEPROM(){
byte wl;
wl=EEPROM.read(0); // I read wl=XXXXXXXX
byte wr;
wr=EEPROM.read(1); //I read wr=YYYYYYYY
unsigned int w;
w=wl; //w=00000000XXXXXXXX
w=w<<8; //w=XXXXXXXX00000000
w=w+wr; //w=XXXXXXXX00000000+YYYYYYYY=XXXXXXXXYYYYYYYY
return w;
}
void setup() // the set up part (runs only once)
{
Serial.begin(9600); // set up Serial library at 9600 bps
//Read from the EEPROM
StoredValue=ReadFromEEPROM();
if (StoredValue>60000) {
StoredValue=0;
}
Serial.print("The latest stored value is : "); //Print the stored value
Serial.println(StoredValue,DEC);
}
void loop() // The main loop (runs over and over again)
{
Serial.println("I am sleeping for 10 sec");
delay(10000);
//Save a new value at the EEPROM
SaveToEEPROM(StoredValue+1);
//Read again from the EEPROM
StoredValue=ReadFromEEPROM();
Serial.print("The new stored value after 10sec is : ");
Serial.println(StoredValue,DEC);
}
You can download this example from here : EEPROMAdvancedExample2
Below you can watch the video demo of our program