Sommige dingen kan ik niet duidelijker zeggen dan ik al gedaan had, sorry.
Toch ga ik nog een poging wagen.
Schijnbaar versta jij iets anders bij het woord voorwaarde, dan ik.
Voor mij is een voorwaarde datgene dat beschreven is direct na "als" of "wanneer" (ik geef zo een voorbeeld).
Bij programmeren heb je dan voorwaardelijke code, en dat is code die onder de eerder genoemde voorwaarde zal worden uitgevoerd.
Bij C (++) staat de voorwaardelijke code tussen accolades {}, en de voorwaarde misschien tussen haakjes ().
if (x > y) // Onder voorwaarde dat x groter is dan y
{ serial.print "X is groter"; // Word de voorwaardelijke code tussen de accolades uitgevoerd
serial.print "Y is kleiner";
}
Zoals Erik_Baas al aangaf: rdata word altijd terug gegeven.
Dat is 1 regel.
In de volgende regel zeg ik (dus niet erik) dan:
Daarom moet je rdata vluchtig maken (door m alleen in de functie te definiëren en niet globaal), en/of door 'm te wissen.
Jij hebt dit in je code staan, en dat doet dus precies wat ik hierboven al aanhaalde:
byte rdata = 0xFF;
In deze regel maak je een lokale byte genaamd rdata, en die vul je meteen, dus tijdens het maken er van, met 0xFF.
rdata geldt dus alleen binnen de functie, en vervalt direct bij het verlaten er van.
Dat is wat er in die regel staat en ik kan er niets anders van maken.
Het is ook wat je wil doen en wat de beste wijze is.
Zou je nu rdata globaal gemaakt hebben, en niet lokaal, dan maak je 'm dus niet telkens opnieuw aan voor de functie, en kan de inhoud bewaard gebleven zijn.
Dat wil je niet want dan krijg je dus oude en daarmee foute / onbetrouwbare waarden terug.
Met andere woorden: dit doet wat jij wil en ik leg uit waarom dat (de code en wat jij wil) goed is.
Wel 1 kanttekening.
Een lege waarde uit een EEPROM is altijd 0xFF.
En natuurlijk kan je die waarde er ook zelf in zetten.
Dat is dus een waarde die je ook terug zou kunnen krijgen.
Dat geeft natuurlijk niet, zolang je dat maar weet.
alleen om te zien hoe ik 5x de waarde "2" kan opslaan op de EEPROM en die succesvol terug te halen.
Ik vraag me dan af of je de waarde 2 of het teken '2' wil opslaan en terughalen, maar dat zal aan mij liggen

In jouw eerder getoonde code zie ik niets staan over 5 keer, maar wel een opmerking over FFFFF.
FFFFF zijn 2,5 bytes maar wel als je het schrijft als 0xFFFFF.
Maar dat is dus waarom ik daar over begon.
Wel zie ik in jouw eerder getoonde code staan dat je 1 byte ophaalt:
Wire.requestFrom(deviceaddress,1);
De ",1" betekent dat je 1 byte wil ophalen, en meer past er ook niet in rdata.
Pas bij je meest recente post is te zien dat je dit 5 keer uitvoert en daarbij het adres van de geheugen cel in je EEPROM steeds ophoogt.
Maar nu komt de opmerking die ik net maakte weer naar boven (ik kijk er nu net tijdens het typen van deze regel pas naar):
Je schrijft geen 2 naar de cel in de EEPROM, maar het teken '2'.
Die heeft de waarde 50.
En dat is dus 1 van de resultaten die je genoemd hebt.
Het verschil zit 'm in de apostrof (') die om de 2 staat.
Daarmee geef je aan dat je een getal wil doorgeven dat volgens de ASCII tabel hoort bij het teken 2, en dat is dus 50.
Je kunt ook 'A' doorgeven, en dan krijg je de inhoud 65, niet te verwarren met 'a' want dat is 97.
Dit kun je op 2 manieren oplossen.
Je kunt de waarde 2 sturen in plaats van de waarde '2'.
De waardes 0 tot en met 31 zijn echter stuurtekens, en die kunnen een ongewenst resultaat opleveren.
Of je kunt naar je serial monitor de ASCII waarde schrijven.
Dan doe je in dat stukje:
Serial.write(readEEPROM(eeprom, address), HEX);
Het verschil hier is de write in plaats van de print.
[edit]
Overigens hoop ik dat je nu ziet dat het belangrijk is dat je de hele code plaatst in plaats van zo'n snippet (een stukje knipsel uit de gehele code).
Uit zo'n snippet is het bijna niet de doen om de context van het geheel mee te krijgen.
Dus wanneer het kan, graag de gehele code tonen bij je vragen.
[/edit]