# Getting to use EEPROM

**URL:** <https://forum.arduino.cc/t/getting-to-use-eeprom/1239377>\
**Category:** Programming\
**Created:** [March 24, 2024, 5:52pm UTC](https://forum.arduino.cc/t/getting-to-use-eeprom/1239377 "2024-03-24T17:52:07Z")\
**Posts on this page:** 5\
**Page:** 2

<div class="post-metadata">

**Author:** ![dolittle](https://avatars.discourse-cdn.com/v4/letter/d/e19adc/32.png) [@dolittle](https://forum.arduino.cc/u/dolittle)\
**Post date:** [March 25, 2024, 12:06pm UTC](https://forum.arduino.cc/t/getting-to-use-eeprom/1239377/22 "2024-03-25T12:06:41Z")

</div>

OK I got it - but am still having difficulty with this - i understand that the limit number of the value is 255 but what if I need 700?

```arduino
#include <EEPROM.h>

void setup() {

  Serial.begin(115200);
  Serial.println(" startng eeprom demo ");

}

void loop() {

  static int status = 0;

  if (status == 0) {
    writeDefaults(1, 15);
    writeDefaults(2, 30);
    writeDefaults(3, 60);
    writeDefaults(4, 700); 
    status++;
  }
  if (status == 1) {
    readDefaults();
    status++;
  }
  delay(1000);

}

void writeDefaults(int address, byte myInt) {
  Serial.print("defaults ");
  byte hiByte = highByte(myInt); //breaks up into into 2 bytes
  byte loByte = lowByte(myInt);
  EEPROM.put(address, myInt);

  Serial.print(" Done "); Serial.println(address);
}

void readDefaults() {

  int value;
  for (int x = 1; x < 5; x++) {
    value = EEPROM.read(x);
    Serial.print(x);
    Serial.print("\t");
    Serial.print(value);
    Serial.println();
  }

}

```

---

<div class="post-metadata">

**Author:** ![J-M-L](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/j-m-l/32/766245_2.png) [@J-M-L](https://forum.arduino.cc/u/J-M-L)\
**Post date:** [March 25, 2024, 12:22pm UTC](https://forum.arduino.cc/t/getting-to-use-eeprom/1239377/23 "2024-03-25T12:22:41Z")

</div>

> [@dolittle](#):
>
> i understand that the limit number of the value is 255 but what if I need 700?

use put and get directly with the data you want.  
pack all the preferences into a structure and store the structure, that will make your life easier

here is an example

```arduino
#include <EEPROM.h>
struct Configuration {
  char locationName[30];
  float temperature;
  int relativeHumidity;
};

const uint16_t EEPROM_ADDRESS = 0;

Configuration myConfiguration;

void printConfiguration(Configuration& aConfiguration) {
  Serial.print("Location Name: "); Serial.println(aConfiguration.locationName);
  Serial.print("Temperature: "); Serial.println(aConfiguration.temperature, 3);
  Serial.print("Relative Humidity: "); Serial.println(aConfiguration.relativeHumidity);
  Serial.println("----------------------------");
}

void setup() {
  Serial.begin(115200);
  strlcpy(myConfiguration.locationName, "Paris", sizeof myConfiguration.locationName);
  myConfiguration.temperature = 17.6;
  myConfiguration.relativeHumidity = 67;

  Serial.println("Initial Configuration:");
  printConfiguration(myConfiguration);

  // save the config
  EEPROM.put(EEPROM_ADDRESS, myConfiguration);

  // modify the configuration
  strlcpy(myConfiguration.locationName, "London", sizeof myConfiguration.locationName);
  myConfiguration.temperature = 12.6;
  myConfiguration.relativeHumidity = 95;

  Serial.println("Modified Configuration:");
  printConfiguration(myConfiguration);

  // Now read it back from EEPROM
  EEPROM.get(EEPROM_ADDRESS, myConfiguration);

  Serial.println("Configuration From EEPROM:");
  printConfiguration(myConfiguration);
}

void loop() {}

```

---

<div class="post-metadata">

**Author:** ![dolittle](https://avatars.discourse-cdn.com/v4/letter/d/e19adc/32.png) [@dolittle](https://forum.arduino.cc/u/dolittle)\
**Post date:** [March 25, 2024, 5:26pm UTC](https://forum.arduino.cc/t/getting-to-use-eeprom/1239377/25 "2024-03-25T17:26:44Z")

</div>

OK got it - thanks to you all

```arduino
#include <EEPROM.h>

const byte E_Address[] = {1, 3, 5, 7};
const byte addressCnt = sizeof(E_Address);
const int E_Value [] = {15, 30, 60, 700};
const byte valueCnt = sizeof(E_Value);

void setup() {

  Serial.begin(115200);
  Serial.println(" startng eeprom demo ");

}

void loop() {

  static int status = 0;

  if (status == 0) {
    for ( int x = 0; x < addressCnt; x++) {
      writeDefaults(E_Address[x], E_Value[x]);
      Serial.print("Status ");Serial.println(status);
    }
 status++;
  }
  if (status == 1) {
    for ( int x = 0; x < addressCnt; x++) {
      readDefaults(E_Address[x]);
       Serial.print("Status ");Serial.println(status);
    }
 status++;
  } 

}
//----------------------------------------------------------

void writeDefaults(int address, int value) {
  Serial.print("write defaults ");
  EEPROM.put(address, value);
  Serial.print(" address "); Serial.print(address);
  Serial.print(" value "); Serial.println(value);
}

void readDefaults(int address) {
  int value;
  EEPROM.get(address, value);
  Serial.print(address);
  Serial.print("\t");
  Serial.print(value);
  Serial.println();
}

```

---

<div class="post-metadata">

**Author:** ![dolittle](https://avatars.discourse-cdn.com/v4/letter/d/e19adc/32.png) [@dolittle](https://forum.arduino.cc/u/dolittle)\
**Post date:** [April 17, 2024, 4:12pm UTC](https://forum.arduino.cc/t/getting-to-use-eeprom/1239377/26 "2024-04-17T16:12:41Z")

</div>

Sorry to have to updare this but I am still having an issue:  
here is the test code:

```arduino
// Storing variables in EEPROM
// Sequential read / write of variables.
//
// NANO ATMEGA328P

#include <EEPROM.h>

#define EEADDR 166 // Start location to write EEPROM data.

unsigned int field1, field2, field3, field4;

void setup() {
  // **********************************************************
  // NEEDED to change from 4 mhz to 16 mhz on this NANO ONLY
  cli();
  CLKPR = 0x80;
  CLKPR = 0x01;
  sei();
  // **********************************************************

  Serial.begin(38400); // FOR THIS NANO ONLY
  Serial.println("EEPROM variable read and write.");

  field1 = 40;
  field2 = 80;
  field3 = 120;
  field4 = 200;

}

void loop() {

  static int status = 0;

  if (status == 0) {
    int r = random(100, 65535);
    field1 = r;
    field2 = r + 1;
    field3 = r + 2;
    field4 = r + 3;
    writeEE();
    status++;
  }
  if (status == 1) {
    readEE();
    status++;
  }
}

void writeEE() {
  int EEAddr = EEADDR;
  EEPROM.put(EEAddr, field1); EEAddr += sizeof(field1);
  EEPROM.put(EEAddr, field2); EEAddr += sizeof(field2);
  EEPROM.put(EEAddr, field3); EEAddr += sizeof(field3);
  EEPROM.put(EEAddr, field4); EEAddr += sizeof(field4);
  Serial.println("EEPROM Written");
  show_vars();

}
void readEE() {
  int EEAddr = EEADDR;
  EEPROM.get(EEAddr, field1); EEAddr += sizeof(field1);
  EEPROM.get(EEAddr, field2); EEAddr += sizeof(field2);
  EEPROM.get(EEAddr, field3); EEAddr += sizeof(field3);
  EEPROM.get(EEAddr, field4); EEAddr += sizeof(field4);
  Serial.println("EEPROM READ");
  show_vars();
}

void show_vars(void) {
  Serial.print("1 "); Serial.println(field1);
  Serial.print("2 "); Serial.println(field2);
  Serial.print("3 "); Serial.println(field3);
  Serial.print("4 "); Serial.println(field4);
}

the problem is when I read the EEPROM it does not show what was written ie

```

EEPROM variable read and write.  
EEPROM Written  
1 16907  
2 16908  
3 16909  
4 16910  
EEPROM READ  
1 16910  
2 0  
3 16910  
4 0

```arduino

```

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [October 14, 2024, 4:13pm UTC](https://forum.arduino.cc/t/getting-to-use-eeprom/1239377/27 "2024-10-14T16:13:04Z")

</div>

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.

[Previous page](https://forum.arduino.cc/t/getting-to-use-eeprom/1239377.md?page=1)
