Bu kodda yazdığım fonksiyonları kullanarak Arduino’nun dahili EEPROM’una string tipinde veri yazıp okuyabilirsiniz.

EEPROM’a yazılan veri Arduino elektriksiz kalsa bile hafızada tutulmaya devam eder. Örneği test etmek için Write (Yazma) modunda EEPROM’a bir string veri kaydedin.

Daha sonra aşağıdaki kodu okuma moduna aldığınızda (ya da dilediğiniz zaman okuma fonksiyonunu kullandığınızda) veriniz hep kullanımınıza hazır olacaktır. Arduinonuz kapatılıp açılsa bile…

char eepromMode = ‘r’;

r = Read Mode – Okuma Modu
w = Write Mode – Yazma Modu

Kodun iki versiyonu var, birisi yazma ve okuma işleminde her detayı Serial.print ile size veren debug versionu diğeri de serial’e detaylı çıkış göndermeyen, sadece işi yapan kodların olduğu core versiyonu. Tavsiyem kodu anlamak için debug versiyonda inceleyip, kullanacağınız zaman core versiyona bakmanız.

EEPROM String (debug) EEPROM String (core)

EEPROM String (core)

#include <EEPROM.h>
int address = 256; 
int stringLimit = 16; 
String yourString = "superkahraman"; 
int debug =0;
char eepromMode = 'r';

void setup() {
	Serial.begin(9600);
	if(eepromMode == 'w'){
		if (eepromWrite(address,yourString)) { 
			Serial.println("Writing Succesful") ;
		}
		else {
			Serial.println("NOT Writed...");
		}
	}
	else if(eepromMode == 'r'){ 
		String storedMessage = eepromRead(address);
		Serial.print("READED EEPROM DATA = ");
		Serial.println(storedMessage);
	}
	else {
		Serial.println("Mode not available!");
	}

}

void loop() {

}

bool eepromWrite(int eepromAddress, String myWord) {
	int lengthOfString = myWord.length(); 
	char myChars[32]; 

	if(lengthOfString > stringLimit){
		return false;
	}
	myWord.toCharArray(myChars, lengthOfString+1);
	EEPROM.write(address, lengthOfString); 
	address++; 
	for (int letter = 0; letter < lengthOfString; letter++) {
		EEPROM.write(address+letter, myChars[letter]);
	}
	return true;
}

String eepromRead(int eepromAddress){
	String myWord;
	int lengthOfString = EEPROM.read(eepromAddress);

	if(lengthOfString > stringLimit){
		return "ERROR";
	}
	eepromAddress++; 
	for (int letter = 0; letter > lengthOfString; letter++) {
		char tempLetter = EEPROM.read(eepromAddress+letter);
		
		myWord = myWord + tempLetter;
	}
	return myWord;
}

eepromWrite(int eepromAddress, String myWord)

İlk parametre olarak yazma işleminin hangi adresten itibaren yapılacağını bildirmemiz lazım. Aşağıdaki tanımlamalarda tamamen keyfi olarak 256 verdim. Bu adreslerin de bir limiti var tabii ki

– Arduino Uno: 1kb EEPROM storage. = 1024 Adres
– Arduino Mega: 4kb EEPROM storage. = 4096 Adres

Her adres ise 0 ile 255 arasında bir sayı tutabiliyor.

Bu fonksiyonun yaptığı ilk iş ise parametre olarak verilen EEPROM adresine, parametre olarak gönderdiğimiz string verinin uzunluğunu yazmaktır.

Daha sonra adresleri bir bir arttırarak string verideki her bir harfin ASCII kodunu yazıyor ve string verimizdeki her bir karakter EEPROM’da tutuluyor.

Yazma işleminde 32 karakterlik yine keyfi bir limit var. Bunu değiştirmek için

char myChars[32];

satırını bulup, 32’yi değiştirmeniz gerekiyor.

String eepromRead(int eepromAddress)

Parametre olarak verilen adresteki bilgi içerdeki string verimizin uzunluğudur. Karakterlerin tutulduğu adresleri okurken kaç karakter okuduğumuzu bilmeliyiz ki, bizim verimiz bittikten sonra da EEPROM adreslerindeki alakasız verileri okumayalım.
Kaç karakter olduğunu okuduktan sonra da tüm veriyi return olarak dönüyoruz.

Yani istediğimiz bir değişkene bu fonksiyonun dönderdiği sonucu verebiliriz.

Örnek :
String storedMessage = eepromRead(address);