Bird
Raised Fist0
Arduinoprogramming~10 mins

EEPROM for storing settings in Arduino - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - EEPROM for storing settings
Start Program
↓
Initialize EEPROM
↓
Read Settings from EEPROM
↓
Use Settings in Program
↓
Modify Settings?
No→Continue Running
Yes↓
Write New Settings to EEPROM
↓
End or Loop Back
The program starts, reads settings from EEPROM, uses them, optionally updates and writes back new settings, then continues running.
Execution Sample
Arduino
#include <EEPROM.h>

int brightness = 0;

void setup() {
  brightness = EEPROM.read(0);
}

void loop() {
  // Use brightness
}
This code reads a brightness setting from EEPROM address 0 during setup and uses it in the loop.
Execution Table
StepActionEEPROM AddressValue Read/WrittenVariable StateNotes
1Start Program---Program begins execution
2Initialize EEPROM---EEPROM library ready
3Read brightness from EEPROM050brightness = 50Read stored brightness value 50
4Use brightness in program--brightness = 50Brightness used for LED or display
5Modify brightness?---User changes brightness to 100
6Write new brightness to EEPROM0100brightness = 100New brightness saved to EEPROM
7Continue running--brightness = 100Program runs with updated brightness
8End or loop---Program loops or ends
💡 Program runs continuously; EEPROM read/write happens only when settings change.
Variable Tracker
VariableStartAfter Step 3After Step 6Final
brightness0 (default)50 (read from EEPROM)100 (updated and written)100
Key Moments - 3 Insights
Why do we read from EEPROM in setup() and not in loop()?
Reading in setup() happens once at start, saving time and EEPROM wear. The execution_table row 3 shows reading brightness only once.
What happens if we write to EEPROM every loop without checking?
EEPROM has limited write cycles. Writing every loop (not shown here) would wear it out quickly. The table shows writing only when brightness changes (row 6).
Why do we store settings at a specific EEPROM address?
Each setting needs a unique address to avoid overwriting. Here brightness is stored at address 0 (rows 3 and 6).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of brightness after step 3?
A100
B0
C50
DUndefined
💡 Hint
Check the 'Variable State' column at step 3 in the execution_table.
At which step is the new brightness value written to EEPROM?
AStep 4
BStep 6
CStep 3
DStep 2
💡 Hint
Look for the action 'Write new brightness to EEPROM' in the execution_table.
If the brightness never changes, how would the execution_table change?
AStep 6 would be skipped
BStep 3 would be skipped
CStep 5 would be 'Yes'
DStep 7 would not happen
💡 Hint
Refer to the 'Modify brightness?' decision at step 5 and the write action at step 6.
Concept Snapshot
EEPROM stores data permanently on Arduino.
Use EEPROM.read(address) to get a byte.
Use EEPROM.write(address, value) to save a byte.
Read settings once in setup(), write only when changed.
Each setting uses a unique EEPROM address.
Avoid frequent writes to protect EEPROM life.
Full Transcript
This visual execution shows how Arduino programs use EEPROM to store settings like brightness. The program starts and initializes EEPROM. It reads the brightness value from EEPROM address 0 once during setup. This value is stored in the variable brightness and used in the program loop. If the user changes brightness, the program writes the new value back to EEPROM at the same address. This prevents losing settings after power off. Writing only happens when settings change to avoid wearing out EEPROM memory. Each step shows the action, EEPROM address accessed, value read or written, and the current variable state. This helps beginners see exactly when and how EEPROM is used to save and load settings.

Practice

(1/5)
1. What is the main purpose of using EEPROM in an Arduino program?
easy
A. To increase the speed of the program
B. To store data permanently even when the power is off
C. To connect to the internet
D. To control the brightness of an LED

Solution

  1. Step 1: Understand EEPROM functionality

    EEPROM memory keeps data saved even if the Arduino loses power.
  2. Step 2: Compare options with EEPROM purpose

    Only To store data permanently even when the power is off describes permanent data storage, which matches EEPROM use.
  3. Final Answer:

    To store data permanently even when the power is off -> Option B
  4. Quick Check:

    EEPROM stores permanent data = A [OK]
Hint: EEPROM saves data without power loss [OK]
Common Mistakes:
  • Confusing EEPROM with RAM (temporary memory)
  • Thinking EEPROM speeds up the program
  • Mixing EEPROM with internet or LED control
2. Which of the following is the correct syntax to write the value 42 to EEPROM address 10?
easy
A. EEPROM.save(42, 10);
B. EEPROM.read(10, 42);
C. EEPROM.write(10, 42);
D. EEPROM.store(10, 42);

Solution

  1. Step 1: Recall EEPROM write syntax

    The correct function to save data is EEPROM.write(address, value);.
  2. Step 2: Match syntax with options

    Only EEPROM.write(10, 42); uses EEPROM.write with correct parameter order.
  3. Final Answer:

    EEPROM.write(10, 42); -> Option C
  4. Quick Check:

    Write uses EEPROM.write(address, value) = D [OK]
Hint: Use EEPROM.write(address, value) to save data [OK]
Common Mistakes:
  • Using EEPROM.read() to write data
  • Using non-existent functions like EEPROM.store()
  • Swapping address and value parameters
3. What will be the output of this Arduino code snippet?
EEPROM.write(5, 100);
int val = EEPROM.read(5);
Serial.println(val);
medium
A. Error
B. 0
C. 5
D. 100

Solution

  1. Step 1: Understand EEPROM write and read

    The code writes 100 to address 5, then reads from address 5.
  2. Step 2: Predict Serial output

    Reading address 5 returns 100, so Serial.println prints 100.
  3. Final Answer:

    100 -> Option D
  4. Quick Check:

    Write 100, read 100 = A [OK]
Hint: Read returns last written value at address [OK]
Common Mistakes:
  • Expecting read to return address instead of value
  • Confusing EEPROM.read() with EEPROM.write()
  • Assuming default value 0 without write
4. Identify the error in this code that tries to save a setting to EEPROM:
int setting = 25;
EEPROM.read(0, setting);
medium
A. Using EEPROM.read() instead of EEPROM.write() to save data
B. Wrong address used, should be 1 instead of 0
C. Missing semicolon after variable declaration
D. EEPROM.read() requires three parameters

Solution

  1. Step 1: Check function purpose

    EEPROM.read() reads data; EEPROM.write() saves data.
  2. Step 2: Identify misuse in code

    The code uses EEPROM.read() with two parameters, which is incorrect for saving.
  3. Final Answer:

    Using EEPROM.read() instead of EEPROM.write() to save data -> Option A
  4. Quick Check:

    Write needs EEPROM.write(), not EEPROM.read() = C [OK]
Hint: Use EEPROM.write() to save, EEPROM.read() to get data [OK]
Common Mistakes:
  • Confusing read and write functions
  • Passing wrong number of parameters
  • Assuming EEPROM.read() can save data
5. You want to save a user volume setting (0-255) in EEPROM address 20 and read it back on startup. Which code snippet correctly does this?
hard
A. EEPROM.write(20, volume); int vol = EEPROM.read(20);
B. EEPROM.read(20, volume); int vol = EEPROM.write(20);
C. EEPROM.save(20, volume); int vol = EEPROM.load(20);
D. EEPROM.write(volume, 20); int vol = EEPROM.read(volume);

Solution

  1. Step 1: Save volume to EEPROM address 20

    Use EEPROM.write(20, volume); to store the value.
  2. Step 2: Read volume back from address 20

    Use EEPROM.read(20); to get the saved value.
  3. Final Answer:

    EEPROM.write(20, volume); int vol = EEPROM.read(20); -> Option A
  4. Quick Check:

    Write then read from same address = B [OK]
Hint: Write then read from same EEPROM address [OK]
Common Mistakes:
  • Swapping address and value parameters
  • Using non-existent EEPROM.save() or EEPROM.load()
  • Reading before writing data
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard