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 bytevalueat the EEPROMaddress.EEPROM.read(address): Reads a single byte from the EEPROMaddress.EEPROM.put(address, data): Writes any data type starting ataddress. It handles multiple bytes.EEPROM.get(address, data): Reads data of any type starting ataddressintodata.
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.writefor multi-byte data: This only writes one byte, so useEEPROM.putfor 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.putandEEPROM.getfor 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.