Arduino ile bir proje yaptığınızda (örneğin bir şifreli kilit sistemi, bir sıcaklık alarmı veya bir sayaç devresi), kullanıcı bir ayar yapar veya sistem bir veri üretir. Ancak elektrik kesildiğinde ya da reset butonuna basıldığında, tanımladığınız tüm değişkenler (int, float, char vb.) ilk durumlarına geri döner. Çünkü bu veriler geçici bellek olan RAM'de tutulur.
Peki, elektrik kesilse bile verilerin kaybolmamasını nasıl sağlarız? Çözüm: Arduino'nun içinde yer alan EEPROM bellek!
EEPROM (Electrically Erasable Programmable Read-Only Memory), mikrodenetleyicinin içinde bulunan ve elektriksel olarak silinip yeniden yazılabilen kalıcı bir hafıza türüdür. Bilgisayarlarımızdaki SSD veya hard disklerin çok küçük bir versiyonu gibi düşünülebilir.
Önemli Bilgi: Popüler Arduino modellerinin hafıza kapasiteleri şu şekildedir:
Arduino Uno / Nano / Pro Mini (ATmega328P): 1024 Byte (1 KB)
Arduino Mega 2560: 4096 Byte (4 KB)
1 KB gözünüze küçük gelebilir, ancak sadece sayısal ayarlar, kalibrasyon verileri veya kısa şifreler saklayacağımız için bu alan binlerce veri için fazlasıyla yeterlidir.
EEPROM belleklerin sonsuz bir ömrü yoktur. Arduino'nun EEPROM'u yaklaşık 100.000 yazma/silme döngüsüne sahiptir (Okuma işleminin ise bir sınırı yoktur, sonsuz kez okunabilir).
Eğer void loop() fonksiyonunun içine doğrudan her milisaniyede bir çalışan bir yazma kodu eklerseniz, birkaç dakika içinde o hafıza hücresini kullanılmaz hale getirebilirsiniz (buna hafızanın aşınması denir). Bu yüzden EEPROM'a sadece veri gerçekten değiştiğinde yazma yapılmalıdır.
Arduino'da EEPROM kullanmak için ekstra bir kütüphane indirmenize gerek yoktur, yerleşik olarak gelen #include <EEPROM.h> kütüphanesini çağırmamız yeterlidir.
İşte en çok kullanılan fonksiyonlar ve örnek bir senaryo projesi:
#include <EEPROM.h>
// EEPROM'da veriyi kaydedeceğimiz adres (0 ile 1023 arası)
int hafizaAdresi = 0;
int sayac = 0;
void setup() {
Serial.begin(9600);
Serial.println("Sistem baslatildi.");
// 1. ADIM: Hafızadaki eski veriyi oku
// Cihaz açıldığında, elektrik kesilmeden önceki en son değeri hafızadan çekiyoruz.
sayac = EEPROM.read(hafizaAdresi);
Serial.print("Elektrik kesilmeden önceki son sayac degeri: ");
Serial.println(sayac);
}
void loop() {
// Her 5 saniyede bir sayacı artırıp hafızaya kaydedelim
delay(5000);
sayac++;
Serial.print("Yeni Sayac Degeri: ");
Serial.println(sayac);
// 2. ADIM: Veriyi Hafızaya Kaydet (Güvenli Yöntem: update)
// EEPROM.write() yerine EEPROM.update() kullanıyoruz.
// update() fonksiyonu, eğer yeni değer eski değerle aynıysa yazma yapmaz.
// Böylece EEPROM'un ömrünü gereksiz yere harcamamış oluruz.
EEPROM.update(hafizaAdresi, sayac);
Serial.println("Veri EEPROM'a guvenli bir sekilde kaydedildi.");
}
float sensorKalibrasyonu = 145.82; int adres = 10; // Büyük veya ondalıklı veriyi yazma EEPROM.put(adres, sensorKalibrasyonu); // Büyük veya ondalıklı veriyi geri okuma EEPROM.get(adres, sensorKalibrasyonu);
Not: put() kullanırken bir sonraki veriyi yazacağınız adresi seçerken dikkatli olun. Örneğin bir float veri hafızada 4 byte yer kaplar. Veriyi 10. adrese yazdıysanız, bir sonraki veriyi en erken 14. adrese yazmalısınız.
Arduino projelerinizin endüstriyel standartlarda olmasını ve elektrik kesintilerinden etkilenmemesini istiyorsanız hafıza yönetimini mutlaka öğrenmelisiniz. EEPROM.update() ve EEPROM.put() fonksiyonları bu yoldaki en büyük yardımcılarınızdır.
Arduino'da kalıcı hafıza kullanımı ile ilgili sorularınızı veya takıldığınız yerleri yorumlar kısmında bizimle paylaşabilirsiniz!
Henüz yorum yapılmamış. İlk yorumu siz yapın!