Werte ändern in void setup()

Wenn Du eine Variable in einer Funktion definierst existiert sie nur in dieser Funktion.

void setup()
{
....
int val1=0;
...
}

val1 existiert nur im setup() nicht aber in loop() oder einer anderen Funktion.

int val1=0;
void setup()
{
...
}

Wenn Du die Variable außerhalb der Funktion deklarierst existiert sie in allen Funktionen. Man nennt sie auch globale Variable.

void setup()
{
....
int val1=0;
...
}
void loop()
{
....
int val1=0;
...
}

Schlimmer noch: Die Variable val1 in setup() ist eine andere Variable als val1 im loop().

Zur Schreibanzahl des EEPROM im ATmega wird garantiert:
minimale Anzahl der Schreib/Löschzyklen: 100000
Die Lesezyklen sind unbegrenzt.
Reliability Qualification results show that the projected data retention failure rate is much less than 1 PPM over 20 years at 85°C or 100 years at 25°C.

Zum Speichern im EEprom des ATmega:

Beispielsketch in IDE-File-Example-EEPROM

Grüße Uwe