EEPROM technique

Hi all,
I’m trying to write an integer to EEPROM but have intermittent issues when I go to read it back. Below is the basic of what I’m trying to do:

int NextFeedTimeHr;    // values from 1 to 23
int NextFeedTimeMin;  // values 0 to 59

void setup(){
    EEPROM.get(1, NextFeedTimeHr);
    EEPROM.get(2, NextFeedTimeMin);

void loop(){
    //do stuff then go to Set_Feed_Time() to change next feed time.....(only happens twice a day)

void Set_Feed_Time() {
    EEPROM.put(1, NextFeedTimeHr);
    EEPROM.put(2, NextFeedTimeMin);

Occasionally the value gets corrupted sometimes and i get a random large positive/negative number or it will not save to memory at all. Any suggestions?

FYI i just pull all power to the module and plug it back in to test to see if values will load back up correctly.


An int needs four bytes, but with your addresses 1 and 2 your integers are overlapping.

Either store your values in one-byte types like uint8_t or use addresses that allow for enough seperation like

  EEPROM.put(0, intOne);
  EEPROM.put(4, intTwo);

Or use a struct and store that as a single entity.

To expand on @ScruffR’s answer, I usually use a struct with a version field so I know when to initialize the storage.

const int currentVersion = 10;
struct {
  int version;
  int NextFeedTimeHr;    // values from 1 to 23
  int NextFeedTimeMin;  // values 0 to 59
} storage;

void setup() {
  EEPROM.get(0, storage);
  if (storage.version != currentVersion) {
    storage.version = currentVersion;
    storage.NextFeedTimeHr = 18;
    storage.NextFeedTimeMin = 0;

void loop() {
  // do stuff and call saveStorage() to persist data

void saveStorage() {
  EEPROM.put(0, storage);

Thank you both for your replies!