📖 Scenario: You are working on an Arduino project that needs to save a small number permanently, even when the power is off. This is useful for storing settings or counters that should not reset every time the board restarts.
🎯 Goal: Learn how to write a number to the Arduino's EEPROM memory and then read it back to use in your program.
📋 What You'll Learn
Create a variable to hold the number to save
Create a variable for the EEPROM address
Write the number to EEPROM at the given address
Read the number back from EEPROM
Print the read number to the Serial Monitor
💡 Why This Matters
🌍 Real World
Saving settings or counters that must stay even when the Arduino is turned off, like user preferences or device calibration data.
💼 Career
Understanding EEPROM read/write is important for embedded systems programming and IoT device development where persistent storage is needed.
Progress0 / 4 steps
1
Create the number and EEPROM address variables
Create an int variable called numberToSave and set it to 123. Also create an int variable called eepromAddress and set it to 0.
Arduino
Hint
Use int numberToSave = 123; and int eepromAddress = 0; to create the variables.
2
Include EEPROM library and start Serial communication
Add #include <EEPROM.h> at the top. In setup(), start Serial communication at 9600 baud.
Arduino
Hint
Remember to include the EEPROM library and start Serial in setup().
3
Write the number to EEPROM and read it back
In setup(), write numberToSave to EEPROM at eepromAddress using EEPROM.write(). Then read the value back into an int variable called readNumber using EEPROM.read().
Arduino
Hint
Use EEPROM.write(address, value) to save and EEPROM.read(address) to read.
4
Print the read number to Serial Monitor
Add a Serial.println() statement in setup() to print the readNumber variable.
Arduino
Hint
Use Serial.println(readNumber); to show the saved number.
Practice
(1/5)
1. What does EEPROM.write(address, value) do in Arduino?
easy
A. Stores a byte value at the specified EEPROM address
B. Reads a byte value from the specified EEPROM address
C. Deletes all data from EEPROM
D. Initializes the EEPROM memory
Solution
Step 1: Understand EEPROM.write function
The function EEPROM.write(address, value) saves a byte value at the given address in EEPROM memory.
Step 2: Differentiate from EEPROM.read
EEPROM.read(address) is used to read data, not write it.
Final Answer:
Stores a byte value at the specified EEPROM address -> Option A
Quick Check:
EEPROM.write saves data [OK]
Hint: Write saves data, read retrieves data from EEPROM [OK]
Common Mistakes:
Confusing write with read function
Thinking EEPROM.write clears memory
Assuming EEPROM.write initializes EEPROM
2. Which of the following is the correct syntax to read a byte from EEPROM at address 10?
easy
A. EEPROM.get(10);
B. EEPROM.write(10);
C. EEPROM.readByte(10);
D. EEPROM.read(10);
Solution
Step 1: Identify correct EEPROM read syntax
The correct function to read a byte from EEPROM is EEPROM.read(address).
Step 2: Check options for exact match
Only EEPROM.read(10); matches the correct syntax.
Final Answer:
EEPROM.read(10); -> Option D
Quick Check:
EEPROM.read(address) reads byte [OK]
Hint: Use EEPROM.read(address) to get stored byte [OK]
Common Mistakes:
Using EEPROM.write to read data
Using non-existent EEPROM.readByte function
Confusing EEPROM.get with EEPROM.read
3. What will be the output of this Arduino code snippet?
EEPROM.write(5, 42);
byte val = EEPROM.read(5);
Serial.println(val);
medium
A. 0
B. 42
C. 5
D. Undefined behavior
Solution
Step 1: Write value 42 at EEPROM address 5
The code stores the byte 42 at address 5 using EEPROM.write(5, 42);.
Step 2: Read the value back from address 5
EEPROM.read(5) reads the stored value, which is 42.
Final Answer:
42 -> Option B
Quick Check:
Write 42, read 42 [OK]
Hint: Write then read same address returns stored value [OK]
Common Mistakes:
Assuming EEPROM.read returns address instead of value
Forgetting to write before reading
Expecting default 0 without writing
4. Identify the error in this code snippet:
EEPROM.write(1024, 100);
byte val = EEPROM.read(1024);
Serial.println(val);
medium
A. Serial.println cannot print byte values
B. EEPROM.write requires two arguments
C. Address 1024 is out of EEPROM range
D. EEPROM.read cannot be assigned to byte
Solution
Step 1: Check EEPROM address range
Typical Arduino EEPROM size is 1024 bytes, so address 1024 is out of range (valid addresses are 0-1023).
Step 2: Validate other code parts
EEPROM.write has correct arguments, EEPROM.read returns byte, and Serial.println can print bytes.
Final Answer:
Address 1024 is out of EEPROM range -> Option C
Quick Check:
EEPROM address must be within 0-1023 [OK]
Hint: EEPROM addresses start at 0, max 1023 on typical boards [OK]
Common Mistakes:
Using address equal to EEPROM size
Assuming EEPROM size is larger than actual
Misunderstanding Serial.println capabilities
5. You want to store a user's high score (an integer between 0 and 1000) in EEPROM. Which approach correctly saves and reads this value?
hard
A. Use EEPROM.put(address, highScore); and EEPROM.get(address, highScore);
B. Use EEPROM.write(address, highScore); and EEPROM.read(address);
C. Use EEPROM.write(address, highScore % 256); only
D. Use EEPROM.read(address); to save and EEPROM.write(address, highScore); to read
Solution
Step 1: Understand data size and EEPROM functions
High score is an integer (2 bytes), so EEPROM.write (1 byte) is insufficient to store full value.
Step 2: Use EEPROM.put and EEPROM.get for multi-byte data
EEPROM.put(address, highScore); saves the entire integer, and EEPROM.get(address, highScore); reads it back correctly.
Final Answer:
Use EEPROM.put(address, highScore); and EEPROM.get(address, highScore); -> Option A
Quick Check:
Use put/get for multi-byte data [OK]
Hint: Use EEPROM.put/get for integers, write/read for bytes [OK]
Common Mistakes:
Using EEPROM.write for multi-byte integers
Not reading back with EEPROM.get
Mixing read and write roles
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.