EEPROM Arduino
EEPROM(Electrically Erasable Programmable Read-Only Memory) adalah sebuah memory yang tidak terhapus walau pun tanpa di aliri listrik. EEPROM ini memiliki alamat dan jumlah memory. Analogi nya mirip seperti hardisk atau flash disk. Data yang kita simpan tidak akan terhapus walau tanpa di aliri listrik lagi. Berbeda dengan RAM, tanpa di aliri listrik, atau Arduino padam, maka memory kembali menjadi kosong.
EEPROM hanya memiliki kemampuan 100.000x tulis, jadi gunakan dia seperlu nya, terlalu sering menggunakan EEPROM internal akan merusak EEPROM, gunakan EEPROM AT24XX external untuk hasil yang lebih baik
Setiap data yang ingin kita simpan pada blok memory memiliki alamat, Biasanya Arduino pada satu alamat hanya mampu menyimpan memory sebanyak 8 bit, FF, atau kalo decimal nya hanya menyimpan data sebesar 255 dalam satu alamat. Jika kita ingin menyimpan data lebih banyak maka kita harus menambah alamat penyimpanan nya.
Arduino sendiri sudah memiliki library untuk penggunaan EEPROM internal ini, seperti gambar di bawah ini,
#include <EEPROM.h>
untuk penyimpanan memori lebih dari 8 bit, kita perlu menggunakan function tersendiri, selanjut nya akan kita bahas pada Sub judul lain nya.
Fungsi EEPROM Arduino
Fungsi EEPROM Arduino, EEPROM ini memiliki fungsi yang sangat banyak pada system control dan kendali. Sebagai contoh input password. Dengan EEPROM ini kita bisa merubah-rubah default password menjadi password baru. Kemudian password baru kita simpan di EEPROM.
Setiap baca dan tulis EEPROM kasih jeda waktu delay(5) agar savety dan tidak cepat rusak
Bisa juga kita gunakan untuk setting-setting harga pada CPU POM mini, atau yang lain nya. Inti nya adalah Memory EEPROM ini bisa di gunakan untuk menyimpan variable yang nilai nya bisa kita ubah tanpa merubah program pada CHIP Arduino.

Contoh Aplikasi EEPROM Arduino Tanpa Library
Biar Seru dan gak penasaran yuk kita coba buat program EEPROM Arduino. Contoh nya sangat unik, kita coba buat setting harga barang, kemudian kita save di EEPROM. Input Arduino nya adalah keypad 4×4. Bagaimana kah cara memprogram nya? ops sebelum program siapkan dulu bahan bahan di bawah ini,
- Arduino bisa Arduino UNO atau Arduino Mega
- LCD 16×2 dengan I2c LCD
- Keypad 4×4
Sebelum kita lanjut kan ada baik nya membaca Artikel di bawah ini,
Setelah semua bahan sudah ada, coba kita lihat program di bawah ini
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Keypad.h> #include <EEPROM.h> LiquidCrystal_I2C lcd(0x3f, 16, 2); // alamat i2c lcd dan type lcd 16x2 const byte buz = 6; const byte pump = 7; const byte ROWS = 4; //four rows const byte COLS = 4; //three columns char keys[ROWS][COLS] = { {1, 2, 3, 'A'}, {4, 5, 6, 'B'}, {7, 8, 9, 'C'}, {'*', '0', '#', 'D'} }; byte rowPins[ROWS] = {4, 3, 1, 0}; //koneksi row keypad dengan arduino byte colPins[COLS] = {A3, A2, A1, A0}; //koneksi kolom dengan arduino Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); #define BINTANG 42 // nilai BINTANG #define PAGAR 35 // nilai pagar #define TOMBOL_A 65 // nilai TOMBOL_A #define TOMBOL_B 66 // nilai TOMBOL_B #define TOMBOL_C 67 // nilai TOMBOL_C #define TOMBOL_D 68 // nilai TOMBOL_D #define READY 0 #define SET_HARGA 6 #define LIMIT 7 int state = 0; long dtKey = 0; int key; unsigned char line1[16]; unsigned char line2[16]; void baca_key(); void get_text(); void update_lcd(); void baca_eeprom(); void EEPROMWritelong(int address, long value); long EEPROMReadlong(long address); int addr_harga = 0; long HARGA = 0; void setup() { pinMode(buz, OUTPUT); pinMode(pump, OUTPUT); lcd.begin(); lcd.backlight(); lcd.print("MIKROAVR.COM"); delay(2000); lcd.clear(); baca_eeprom(); } void loop() { key = keypad.getKey(); if (key) { digitalWrite(buz, HIGH); baca_key(); lcd.clear(); delay(20); } if (!key) { digitalWrite(buz, LOW); } update_lcd(); } void baca_key() { if ( state == READY ) { if ( key == TOMBOL_A ) { state = SET_HARGA; } } else if ( state == SET_HARGA){ if ( key == 48 )key = 0; if ( key < 10) { dtKey = dtKey * 10 + key; } else if ( key == BINTANG ) { dtKey = 0; } else if ( key == PAGAR ){ if ( dtKey > 12){ state = LIMIT; } else{ EEPROMWritelong(addr_harga, dtKey); delay(5); HARGA = EEPROMReadlong(addr_harga); delay(5); dtKey = 0; state = READY; } } } else if ( state == LIMIT){ if ( key == BINTANG){ state = SET_HARGA; } } } void get_text(){ if ( state == READY ) { strcpy(line1, "MIKROAVR"); sprintf(line2, "HARGA: %lu", HARGA); } else if ( state == SET_HARGA) { strcpy(line1, "SET HARGA"); sprintf(line2, "RP: %lu", dtKey); } else if ( state == LIMIT ){ strcpy(line1,"NILAI MAX 12"); sprintf(line2,"* -> BACK"); } } void update_lcd() { get_text(); lcd.setCursor(0, 0); lcd.printstr(line1); lcd.setCursor(0, 1); lcd.printstr(line2); } void EEPROMWritelong(int address, long value) { //Decomposition from a long to 4 bytes by using bitshift. //One = Most significant -> Four = Least significant byte byte four = (value & 0xFF); byte three = ((value >> 8) & 0xFF); byte two = ((value >> 16) & 0xFF); byte one = ((value >> 24) & 0xFF); //Write the 4 bytes into the eeprom memory. EEPROM.write(address, four); EEPROM.write(address + 1, three); EEPROM.write(address + 2, two); EEPROM.write(address + 3, one); } long EEPROMReadlong(long address) { //Read the 4 bytes from the eeprom memory. long four = EEPROM.read(address); long three = EEPROM.read(address + 1); long two = EEPROM.read(address + 2); long one = EEPROM.read(address + 3); //Return the recomposed long by using bitshift. return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF); } void baca_eeprom(){ HARGA = EEPROMReadlong(addr_harga); delay(5); if (HARGA == 0xFFFFFFFF ){ HARGA = 0; } }
Penjelasan Program EEPROM
Nah coba masukkan program nya ke Arduino teman-teman, kemudian tekan tombol A untuk masuk ke menu setting Harga. Input nilai Harga, tekan pagar untuk me nol kan nya, jika sudah yakin dengan nilai Harga, tegak Pagar. Kemudian program akan kembali ke beranda. Setelah itu coba matikan Arduino nya, kemudian hidup lagi. Awal nya di LCD akan tampil harga 0 sebelum di setting, tapi setelah di setting maka harga akan tersimpan sesuai dengan nilai yang kita setting tadi. Apakah di matikan atau hidupkan lagi, nilai harga akan tetap sama sampai kita rubah lagi nilai nya..
Coba Perhatikan Program Berikut
void EEPROMWritelong(int address, long value) { //Decomposition from a long to 4 bytes by using bitshift. //One = Most significant -> Four = Least significant byte byte four = (value & 0xFF); byte three = ((value >> 8) & 0xFF); byte two = ((value >> 16) & 0xFF); byte one = ((value >> 24) & 0xFF); //Write the 4 bytes into the eeprom memory. EEPROM.write(address, four); EEPROM.write(address + 1, three); EEPROM.write(address + 2, two); EEPROM.write(address + 3, one); } long EEPROMReadlong(long address) { //Read the 4 bytes from the eeprom memory. long four = EEPROM.read(address); long three = EEPROM.read(address + 1); long two = EEPROM.read(address + 2); long one = EEPROM.read(address + 3); //Return the recomposed long by using bitshift. return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF); }
Pada Program di atas akan memakan memory sebanyak 4 lokasi, jadi ketika kita buat alamat penyimpanan di atas adalah 0, maka alamat memory yang kita gunakan sebenar nya adalah alamat 0, 1, 2 dan 3, jadi jika ingin menulis ke memory EEPROM dengan data lain, misalnya hasil penjualan, maka kasih alamat 6,int addr_lain = 6;Agar data di memory tidak overlapping, atau data lama di hapus dengan data baru.
Perhatikan alamat memory jika ingin menambah data di eeprom arduino
Semoga bermanfaat Thanks, Tinggal kan pesan jika ada pertanyaan
Refrensi:https://playground.arduino.cc/Code/EEPROMReadWriteLong