Contents
Artikel ini merupakan kelanjutan dari tutorial yang lalu, yakni overview tentang EEPROM dan bagaimana cara mengaksesnya (membaca, menulis/menyimpan data). Untuk data bertipe byte, hal itu dapat dengan mudah dilakukan, namun untuk tipe data yang lain seperti interger, longint, float, char array atau string, tentunya kita akan sedikit mengalami kesulitan karena harus membuat semacam script tambahan untuk menjaga konsistensi data.
cara mengakses EEPROM tipe data byte
Nah, daripada pusing bikinnya, ada baiknya Anda menginstal aja library ‘EEPROMex.h’ (bisa di download di sini). Library ini akan mengelola semua hal yang berhubungan dengan EEPROM di Arduino. Dengan library ini Anda dapat dengan mudah mengelola data yang bertipe selain byte ke EEPROM. Berikut ini adalah contohnya
Mengelola data integer dan Longint ke EEPROM dengan library EEPROMEx
Di Arduino, tipe data integer adalah tipe data yang berisi bilangan bulat dengan lebar data 2 byte alias 16 bit. Dengan demikian sebuah variabel integer dapat bernilai antara -32,768 s.d 32,767. Berikut ini adalah contoh mengelola (membaca dan menyimpan) data integer ke EEPROM menggunakan library EEPROMEx
int input = 12345; int output = 0; EEPROM.writeInt(0,input); Â //simpan data integer ke alamat '0' output = EEPROM.readInt(0); ///baca data integer di alamat '0'
Sedangkan tipe longint (long integer) adalah tipe data bulat dengan lebar data 32 bit (4 byte). Dengan data selebar ini maka sebuah variabel longint mampu menyimpan nilai sebesar -2,147,483,648 s.d 2,147,483,647. Hmm, besar sekali, bukan? Berikut ini adalah contoh mengelola data longint di Arduino ke EEPROM menggunakan library EEPROMEx
long input = 123456789; long output = 0; EEPROM.writeLong(3,input);Â //simpan data long integer ke alamat '3' output = EEPROM.readLong(3); Â ////baca data long integer di alamat '3'
Mengelola data float ke EEPROM dengan library EEPROMEx
Float adalah tipe data yang menyimpan data pecahan dengan lebar data 32 bit (4 byte). Nilai yang dapat ditampung dalam tipe data ini adalah 3.4028235E+38 s.d -3.4028235E+38. Tipe data ini memiliki ketelitian 6-7 digit di belakang koma. Contoh mengelola data float ke EEPROM Arduino dengan EEPROMEx
float input = 123456.78; float output = 0.0; EEPROM.writeFloat(8,input); //simpan data float ke alamat 8HÂ output = EEPROM.readFloat(); Â //baca data float di alamat 8H
Mengelola data char array dan string ke EEPROM dengan library EEPROMEx
Char array adalah tipe data yang merupakan kumpulan dari tipe data char (karakter) yang lebar datanya 1 byte (8 bit). Jadi lebar data char array tergantung dari berapa banyak karakter yang tersimpan di dalamnya. Hmm, tambah pusing mengelolanya tanpa library EEPROMEx, bukan? :). Contoh source code:
char input[] = "Saptaji.com"; char output[] = " "; EEPROM.writeBlock<char>(15, input, 12); //simpan data char array (12 karakter) ke alamat 15 EEPROM.readBlock<char>(15, output, 12);Â //baca data char array di alamat 15
Untuk data bertipe ‘string’ akan saya contohkan dalam tutorial selanjutnya.
Update : contoh penggunaan variabel string arduino
Demikian sedikit contoh pemrograman EEPROM di Arduino dengan bantuan library EEPROMEx. Yang perlu kita perhatikan adalah kita ini sedang memprogram sebuah perangkat kontroller yang kecil dengan kemampuan terbatas. Jadi ada baiknya Anda tetap memperhatikan sisi-sisi pemrograman yang dapat meng-optimize ruang memory baik itu yang bersifat static maupun dynamic. Beri ruang pada program/sketch Anda supaya bisa ‘bernafas’ sehingga sistem keseluruhan bisa lebih stabil
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
Jos, membantu sekali dengan artikel EEPROM yang satunya juga.
Mas, library EEPROMex, yang ditulis address awalnya saja apa mas?
EEPROM.writeFloat(8, input);
apakah karena float itu 4 byte kalo kita mau store data float yang lain harus dimulai dari address 12, agar tidak tumpang dengan data yang sebelumnya
EEPROM.writeFloat(12, input);
iya, betul mas
mas, kalo cara paling sederhana menyimpan string ke eeprom arduino gimana ya? secara kan eeprom arduino punya batasan memory untuk eeprom itu sendiri.
cara untuk menyimpan dua data sensor analog ke dalam EEPROM, dan dibaca kedua-duanya bagaimana?… lalu untuk mamanggil data tersebut dengan push button dan menamppilkanya pada lcd, trimakasihh..
mohon dibalas yaa gann.t… (y)
bisa aja, bisa pake library di atas, atau pake library eeprom bawaan arduino juga bisa (pake eeprom.put() dan eeprom.get() )
maaf gan bleh mintaa contohin ehe maklum gan msi pemula, semisal ada data A =500,55 dan B=700,99 stelah data itu di tulis di eeprom lalu cara manggil data tersebut mengguakan pushbutton bagaimana yahh..
mohon pencerahanya gan hehee..
float A=500.55
EEPROM.put(A,10);
float f;
if (digitalRead(pushbutton)==0) EEPROM.get(10,f);
Serial.println (f);
Misi gan, mau tanya kalo misal menampilkan nilai float 6 angka dibelakang koma gimana yah.
kalo untuk sekedar menampilkan di serial monitor bisa pake Serial.println (var,6);
kalau untuk menyimpan ke variable float lain dengan nilai float 6 angka dibelakang koma bagaimana?
salam
luqman
pada intinya dengan library di atas, berapapun nilai float (termasuk sekian digit di belakang koma) akan disimpan di eeprom. Tp biar yakin, coba mas pastikan varabel float sudah berwujud angka float dg 6 angka di belakang koma. Coba tampilkan ke serial monitor
Mas, ini librarynya kenapa ya tidak bisa terbaca ya di IDE saya? WProgram.h : No such file or directory
coba baca ini dulu mas http://saptaji.com/2015/07/09/cara-menambahkan-library-di-arduino-dan-penggunaannya/
mas ajie, maap mau nanya. kenapa library nya error compile di arduino mega2560 yah? mohon pencerahannya..
errornya apa mas?
mungkin coba baca dulu artikel ini untuk cara menambahkan library di arduino
compilation terminated,
error compling for board arduino/genuino mega or mega 2560
itu mas errornya, sudah saya install library lewad zip n ekstrak, hasilnya sama aja mas..
error message-nya kurang lengkap mas, coba copas keselurahnnya.
Btw, jika ada kesulitan menginstal library di atas, bisa juga menggunakan library bawaan arduino (eeprom.h) dengan function ‘get’ dan ‘put’
Kalo misal udah nulis password di eeprom trus biar kesimpen meski power mati gimana ya programnya.?
setiap data yang disimpan di eeprom pasti akan tetap ada (non volatile) walaupun power off
mas ajie, librarynya error mas muncul “error compiling” dibagian bawah
errornya apa mas detailnya?
Permisi mas saya orang yang masih belajar arduino, mau tanya
Kalau saya mempunyai data dengan 3 parameter
Misalnya
3 parameter bertipe integer yakni suhu, kelembaban dan kelas yang masing – masing mempunyai lebih dari 50 data. Apakah bisa saya menggunakan EEPROM untuk menyimpan data tersebut dan kemudian mengolah data yang ada pada ketiga parameter tersebut untuk menjadi sebuah keluaran ?
ma’af kalau pertanyaannya banyak
TERIMAKASIH
pertanyaaanya kurang banyak mas 🙂
jawabannya bisa mas, pake arduino uno bisa menyimpan 1 Kb (kalo arduino mega 4 Kb), artinya ada 1024 baris dengan lebar data 8 bit. Nah yang perlu dihitung adalah tipe data tiap parameter misal tipe integer lebar datanya adl 16 bit, jadi untuk kapasitas 1 kb hanya dapat menyimpan data sebanyak 512 baris dengan lebar data 16 bit, dst yach
Kalo mengolah data bisa dilakukan dengan menggunakan script (ambil data dari eeprom kemudian dioperasikan dg formula tertentu)
hehehe ndak pp ni mas banyak nanya
jadi bukan datanya ya yang dihitung tapi tipe datanya ya mas
Kalau formulanya sudah ada mas, nah yang saya bingungkan adalah mencari penyimpanan data yang model penyimpanannya seperti database dan dapat diunakan secara ofline.
jadi begini, 50 data dari 3 parameter tersebut mau saya masukkan secara manual ke eeprom sebagai data master (dimodel tabel seperti pada database), kemudian dua sensor yang saya gunakan itu mendeteksi dari luar dan mengirimkan data ke arduino, lalu data tersebut dicocokkan dengan data master dan baru diolah.
Apakah efektif dengan menggunakan eeprom tersebut ?
mas pernah cobain sensor max30100 pulse meter?
belum mas 🙂
coba cari library nya di internet utk mempercepat development
udah beberapa saya cobain.. masih belom bisa mas…..
mas saya coba cek i2c dari sensor max30100 saya, ketika dia terkonek dengan SDA ke A4, SCL ke A5 , VCC ke 3.3 v , GND ke GND.. nah pas saya buka serial monitor dia kebaca alamat sensornya dan ketika saya cabut groundnya dia baru kebaca.. itu kenapa ya mas?
kl mnrt sy, ground hrs terpasang mas, dan dikoneksikan ke gnd power supply yg sama dg arduino.
Utk troubleshoot, saran saya gini:
1. coba baca i2c device yg lain dr arduino, kl bisa berarti ga ada masalah dr sisi arduino
2. konek ke i2c max30100, pastikan alamat i2c nya bnr, br coba baca lg datanya
Assalamuaikum mas ajie, saya mau bertanya, kalau untuk input dari keypad 4×4 ke eeprom saya masih bingung bagaimana codingnya, karena kalau ini kan kita memberikan input dari programnya. Mohon bantuannya
mas numpang tanyak, kalau kita ingin 5 nilai dibelakang koma menggunakan tipe data float bagaimana ya mas
ini yang dimaksud cara menampilkannya atau cara mengoperasikannya?
Mas, kalo misalkan untuk menyimpan nama ke eeprom kodenya gamna mas?
eh ini mas bambang yg kmr beli arduino nano di toko sy di bukalapak? ktm lg di sini 🙂
cara mudahnya EEPROM.put(10,nama);
Ok gan nanti saya coba, terima kasih mas ajie.
mas aji ada no wa ngak saya mau nanya banyak nih
saya lagi belajar kelola data yg tersimpan di eeprom soalnya datanya dikombinasikan dengan rtc dimmana data tersebut terus bertambah setiap harinya kemuadian di akumulasikan setiap mencapai satu minggu kemuadian satu bulan
sini aja mas
Sm mas sy juga mau nyimpan data berdasarkan rtc jg
mas, kenpa error ya mas, error “HAS NO MEMBER NAME”? mohon bantuannya mas
informasi errornya kurang banyak, jadi saya tidak bisa menganalisa dan menjawab pertanyaannya
Mas aji.. maaf mau nnya.. sblmny kn eeprom setiap arduino berbeda”.. apa akibat klo menggunakan eeprom melebihi kapasitasnya yg sudah ditentukan mas.. apa kah arduino bisa eror permanen kah.. soalnya sya menampilkan data trus melakukan penambahan.. llu tiba”.. dirun.. lcd membaca perintahnya hanya satu perintah program saja.. padahal masih ada 2 lgi.. tolong penjelasanya mas.. [email protected]
Ini enak aktif sya.. terima kasih banget mas.. aji.. sukses slalu..
kalo error permanen sih ngga, paling ngga bisa baca data aja
Makasih mas.. bner.. Alhamdulillah gk..
Satu lgi mas.. sy pernah diajarin tmen buat reset nilai yg ditampilkan di lcd.. lcd menampilkan respon pembacaan nilai sensor flow meter.. trus sya mau buat tombol reset untuk nilai pembacaan diLCD menjadi NOL.. apa mas pernah pake buat reset gk.. minta caranya mas.. sy dh semester 14.. dikit lgi mau DO.. sy dh punya programnya . Tpi sy rangakainya.. klo gk salah sy pake pin d10 trus di kamper ke ground .. tpi gg berhasil.. kynya ada yg kurang dri cara saya.. minta pengalamanya mas..
Sy pake (10, input_pullup)
Makasih mas
ini maksudnya reset pembacaan nilai yang ditampilkan di LCD (jadi bernilai 0) ya? bukan reset LCD nya kan?
Mas ijin tanya klo data dari rtc buat d simpan d eeprom gmn ya?
Mas, mau nyimpan data dari rtc ke eeprom apa bisa?
bisa aja mas, utk mudahnya simpan sebagai data byte aja, sehingga setidaknya butuh 1 alamat utk detik, 1 alamat utk menit, 1 alamat tanggal, 1 alamat bulan, 1 alamat untuk hari, 1 atau dua alamat utk tahun