Arduino içerisinde kalıcı ve geçici hafıza bölümleri vardır. Yazdığımız kodlar kalıcı bölümlerde kaydedilirken programın çalışması esnasında oluşan değişkenler geçici hafızalarda kaydedilir. Arduinodan enerji kesildiği zaman geçici hafızada olan veriler silinir. Eğer program esnasında elde ettiğimiz değerleri kaydetmek istersek başka bir hafızaya ihtiyaç duyarız. Arduinoda elde ettiğimiz verileri saklayabildiğimiz EEPROM (Electronically Erasable Programmable Read Only Memory) bellekler mevcuttur. Bu belleklerin boyutları mikrodenetleyici modellerine göre değişkenlik gösterebilir. Örnek olarak atmega328 de 1kb, atmega168 de 512 mb, atmega2560 da 4kb eeprom hafıza yer alır.
EEPROM hafızaları kullanmak için 2 komut mevcuttur. EEPROM.write(adres,degisken) komutu ile istediğimiz adrese değişkenimizin değerini atarız. EEPROM.read(degisken) komutu ile daha önce kayıtlı bir değişkenin değerini okumuş oluruz. Şimdi bu konuyla alakalı bir örnek tasarlayalım. Birden sonsuza kadar sayma işlemi yapalım ve seri port ekranında gösterelim. Her sayma işleminden sonra değişkenimiz kaydedilsin. Böylece eğer kartımızdan enerji kesilirse veya reset atılırsa sayımız kaldığı yerden saymaya devam edecektir. Şimdi bu örneğin kodunu yazalım.


[code]
#include <EEPROM.h>
int adrs = 10;              // istenilen değerin kaydedileceği adres birimi
int i = 0;                      // sayma yapacağımız değişken
void setup() {
  Serial.begin(9600);
  i = EEPROM.read(adrs);           // EEPROM kaydedilmiş değer i değişkenine atanır
  i=i+1;
  }
void loop() {
  EEPROM.write(adrs,i);           // son i değeri EEPROM kaydedilir
  Serial.println(i);                      // i değişkeni seri port ekranında yazdırılır
  i=i+1;                                       // sayımız bir arttılr
  delay(300);                             // 300 ms bekleme
}
[/code]

Kodumuzu atıp çalıştırdıktan sonra arduinomuza reset atalım yada doğrudan enerjisini keselim. Sayma işlemine devam ettiğini göreceksiniz.




Seri port ekranından bir değer girerek bilgisayarımızdan arduinomuzu kontrol edebiliriz. Bunun nasıl olduğunu anlayabilmek için bir örnek tasarlayalım. Programda sıfırdan sonsuza kadar birer birer sayma işlemi yapalım. Sayma işlemini seri port ekranında göstereceğiz. Sonra seri port ekranında istenilen bir değer girildiğinde o andaki değeri eeprom hafızasına kaydedilmesini sağlayacağız. Daha sonra enerji kesilip arduino tekrar başlatıldığında eeproma kaydettiğimiz değerden saymaya devam etmesini sağlayacağız. Hatta kaydettiğimiz sayının hangisi olduğunu yine seri port ekranında gösterelim.
Şimdi bu özelliği kullanabilmek için seri port kesmesini bilmemiz gerekir. Seri porttan bir değer girdiğimizde ana programdan çıkıp kesme fonksiyonuna geçiş yaparız. Bu fonksiyonda yazdığımız komutlar bittikten sonra ana döngüye geri döneriz. Bunun için “void serailEvent()” komutunu kullanırız. Örneğimizin kodlarını yanlarına açıklama satırları ile aşağıya aktarıyorum.

#include <EEPROM.h>         // EEPROM kütüphanesi eklenir

int adrs = 10;                        // EEPROM da kullanacağımız adresin değeri
int i = 0;                                   // sayma yapacağımız değişken
char kyt = 'kaydet';            // seri porttan girmek istediğimiz değer
char data;                           // seri porttan girdiğimiz değerin tutulduğu değişken

void setup() {                   
  
Serial.begin(9600);        // seril port ile haberleşmenin başlatılması
  i = EEPROM.read(adrs);      // EEPROM da kaydettiğimiz değeri i değişkenine atıyoruz

}

void loop() {                               
Serial.println(i);                         // değişkenimizi seri port ekranında gösteriyoruz

  i=  i+1;                                    // i değişkeni bir artırıyoruz
  delay(300);                               // 300 ms bekletiyoruz

}

void serialEvent()   //Seri port üzeriden veri geldiğinde serialEvent fonksiyonuna geçiş yaparız

{

  while (Serial.available())       // veri alındığı sürece döngü devam eder

  {

   data = char(Serial.read());      // seri port ekranından giriş yaptığımız değer data değişkenine atanır
   if (data == kyt) {       // daha önceden değerini belirlediğimiz “kyt” değişkeni ile data karşılaştırılır
   EEPROM.write(adrs, i);     // eğer if değeri doğru ise gönder dediğimiz andaki i değeri kaydedilir
   Serial.print("kaydedilen i değeri   "); // kaydettiğimiz i değeri ekrana yazdırılır
   Serial.println(i);                                 // kaydettiğimiz i değeri ekrana yazdırılır
    }


  }

}