0
0
AutocadHow-ToBeginner · 3 min read

How to Save Settings to EEPROM on Arduino Easily

To save settings on Arduino, use the EEPROM.write(address, value) function to store bytes at specific memory addresses and EEPROM.read(address) to retrieve them. For multi-byte data, use EEPROM.put(address, data) and EEPROM.get(address, data) to save and read structured data safely.
📐

Syntax

The Arduino EEPROM library provides functions to save and read data from the EEPROM memory.

  • EEPROM.write(address, value): Saves a single byte value at the EEPROM address.
  • EEPROM.read(address): Reads a single byte from the EEPROM address.
  • EEPROM.put(address, data): Writes any data type starting at address. It handles multiple bytes.
  • EEPROM.get(address, data): Reads data of any type starting at address into data.

Use address carefully to avoid overwriting important data. EEPROM size depends on your Arduino model (usually 512 or 1024 bytes).

arduino
EEPROM.write(address, value);
byte val = EEPROM.read(address);
EEPROM.put(address, data);
EEPROM.get(address, data);
💻

Example

This example saves an integer setting to EEPROM and reads it back on startup. It shows how to use EEPROM.put and EEPROM.get for multi-byte data.

arduino
#include <EEPROM.h>

int settingAddress = 0; // EEPROM address to store the setting
int settingValue = 1234; // Example setting to save

void setup() {
  Serial.begin(9600);
  delay(1000); // Wait for serial

  // Save setting to EEPROM
  EEPROM.put(settingAddress, settingValue);
  Serial.print("Saved setting: ");
  Serial.println(settingValue);

  // Read setting back
  int readValue = 0;
  EEPROM.get(settingAddress, readValue);
  Serial.print("Read setting: ");
  Serial.println(readValue);
}

void loop() {
  // Nothing here
}
Output
Saved setting: 1234 Read setting: 1234
⚠️

Common Pitfalls

Common mistakes when using EEPROM on Arduino include:

  • Writing too often: EEPROM has limited write cycles (~100,000). Avoid writing in loop() without checks.
  • Using EEPROM.write for multi-byte data: This only writes one byte, so use EEPROM.put for larger data types.
  • Not initializing or checking stored data: EEPROM may contain random data on first use, so consider adding a marker or version number.
  • Overlapping addresses: Be careful to assign unique addresses for each setting to avoid data corruption.
arduino
/* Wrong way: writing int with EEPROM.write (only saves one byte) */
int value = 300;
EEPROM.write(0, value & 0xFF); // Only saves lower byte, data lost

/* Right way: use EEPROM.put for multi-byte data */
EEPROM.put(0, value);
📊

Quick Reference

Remember these tips when working with EEPROM on Arduino:

  • Use EEPROM.put and EEPROM.get for any data type.
  • Limit writes to extend EEPROM life.
  • Use fixed addresses and document them.
  • Initialize EEPROM data with a known marker if needed.

Key Takeaways

Use EEPROM.put and EEPROM.get to save and read multi-byte settings safely.
Avoid frequent writes to EEPROM to prevent wearing it out.
Always use fixed addresses and avoid overlapping data storage.
Initialize EEPROM data or use markers to detect valid stored settings.
EEPROM.write and EEPROM.read work only with single bytes, not complex data.