Arduino - Menyimpan Data di EEPROM

 

Dalam proyek Arduino, kita sering kali membutuhkan penyimpanan data yang bertahan setelah mati listrik atau reset. Di sinilah EEPROM sangat berguna. EEPROM adalah memori non-volatile internal Arduino yang bisa menyimpan data secara permanen. Pada tutorial ini, kamu akan belajar cara menggunakan EEPROM untuk menyimpan dan membaca data seperti angka, status, atau konfigurasi.

Apa Itu EEPROM?

EEPROM (Electrically Erasable Programmable Read-Only Memory) adalah memori kecil di dalam chip Arduino yang bisa dibaca dan ditulis oleh program. Kapasitasnya tergantung jenis Arduino:
  • Arduino Uno: 1024 byte
  • Arduino Mega: 4096 byte
  • Arduino Nano: 1024 byte

EEPROM akan menyimpan data bahkan setelah Arduino dimatikan.

Arduino menyediakan library bawaan bernama EEPROM.h yang memudahkan kita dalam menulis dan membaca data dari EEPROM.

Beberapa fungsi utamanya adalah:

  • EEPROM.read(address) – Membaca satu byte dari alamat tertentu.
  • EEPROM.write(address, value) – Menulis satu byte ke alamat tertentu.
  • EEPROM.update(address, value) – Mirip dengan write(), tapi hanya menulis jika nilai berbeda.
  • EEPROM.get(address, variable) – Membaca tipe data kompleks (int, float, struct).
  • EEPROM.put(address, variable) – Menulis tipe data kompleks ke EEPROM.

Alat dan Bahan

  • 1x Arduino Uno
  • 1x Push Button
  • 1x Resistor 1K Ohm (pull-down)

Contoh 1: Menyimpan dan Membaca Data dari EEPROM

#include "EEPROM.h"

int nilai = 0;

void setup() {
  Serial.begin(9600);

  EEPROM.write(0, 123); // Menyimpan angka 123 ke alamat 0
  nilai = EEPROM.read(0); // Membaca dari alamat 0

  Serial.print("Nilai dari EEPROM: ");
  Serial.println(nilai);
}

void loop() {
  // Tidak ada aksi
}

Tampilan Serial Monitor :

 

Penjelasan:

  • EEPROM.write(alamat, nilai) untuk menulis data ke EEPROM
  • EEPROM.read(alamat) untuk membaca data
  • Alamat EEPROM adalah indeks byte (0–1023 untuk Uno)

Contoh 2: Menyimpan Counter Tombol ke EEPROM

#include #include <EEPROM.h>

const int tombolPin = 2;
int counter = 0;
bool tombolTerakhir = LOW;

void setup() {
  pinMode(tombolPin, INPUT);
  Serial.begin(9600);

  counter = EEPROM.read(0);
  Serial.print("Counter terakhir: ");
  Serial.println(counter);
}

void loop() {
  bool dibaca = digitalRead(tombolPin);

  if (dibaca == HIGH && tombolTerakhir == LOW) {
    counter++;
    EEPROM.write(0, counter);
    Serial.print("Tombol ditekan. Counter: ");
    Serial.println(counter);
    delay(200); // debounce sederhana
  }

  tombolTerakhir = dibaca;
}

 Tampilan Serial Monitor :

 

Contoh 3: Menyimpan Tipe Data Lebih Besar (int, float, struct) di EEPROM Arduino

#include 

// Alamat awal penyimpanan di EEPROM
const int addressInt = 0;
const int addressFloat = sizeof(int); // Setelah int
const int addressStruct = addressFloat + sizeof(float);

// Definisi struct
struct SensorData {
  int id;
  float temperature;
  long timestamp;
};

SensorData sensorData;

void setup() {
  Serial.begin(9600);
  delay(1000); // Delay agar Serial Monitor siap

  // Contoh data
  int nilaiInt = 42;
  float nilaiFloat = 3.14159;

  // Isi struct
  sensorData.id = 101;
  sensorData.temperature = 25.5;
  sensorData.timestamp = 1717027200; // Unix timestamp contoh

  // --- MENYIMPAN DATA KE EEPROM ---
  EEPROM.put(addressInt, nilaiInt);
  EEPROM.put(addressFloat, nilaiFloat);
  EEPROM.put(addressStruct, sensorData);

  Serial.println("Data telah disimpan ke EEPROM");

  // --- MEMBACA KEMBALI DARI EEPROM ---
  int bacaInt;
  float bacaFloat;
  SensorData bacaStruct;

  EEPROM.get(addressInt, bacaInt);
  EEPROM.get(addressFloat, bacaFloat);
  EEPROM.get(addressStruct, bacaStruct);

  // --- MENAMPILKAN HASIL ---
  Serial.print("Nilai int: ");
  Serial.println(bacaInt);

  Serial.print("Nilai float: ");
  Serial.println(bacaFloat);

  Serial.println("Data dari struct:");
  Serial.print("  ID        : ");
  Serial.println(bacaStruct.id);
  Serial.print("  Suhu      : ");
  Serial.println(bacaStruct.temperature);
  Serial.print("  Timestamp : ");
  Serial.println(bacaStruct.timestamp);
}

void loop() {
  // Tidak ada aktivitas di loop
}

Tampilan Serial Monitor :


 
Semoga membantu.
Selanjutnya
« Post Selanjutnya
Sebelumnya
Post Sebelumnya »

EmoticonEmoticon

Note: Only a member of this blog may post a comment.