Escritura Lectura EEPROM

Hola, necesito hacer un programa que cuando presiono un pulsador comienza a guardar datos obtenidos de un LM35, si vuelvo a presionar el pulsador deja de guardar los datos. Los datos que se guardan se separan en highByte y lowByte, y se guardan uno seguido del otro. Cuando se presiona otro pulsador comienza a leer la memoria tantas veces como se hayan guardado datos. Luego se unifican el highByte y el lowByte, y del resultado se obtiene la temperatura final.

El código que desarrolle es el siguiente, y el problema que tengo es en la escritura y lectura.

#include <Wire.h>
#define eeprom 0x50
const int pulsador1 = 2;
const int pulsador2 = 3;
const int led = 11;
const int led2 = 12;
int flag1 = 0;
int flag2 = 0;
int direccion = 00;
int entrada;
int entrada2;
float temp;
float temp2;
byte E[2];
byte MAS;
byte MEN;
byte RMAS;
byte RMEN;
int W;
int cont;

void setup() {
     Wire.begin();
     Serial.begin(9600);
     pinMode(led, OUTPUT);
     pinMode(led2, OUTPUT);
     pinMode(pulsador1, INPUT);
     pinMode(pulsador2, INPUT);
     attachInterrupt(digitalPinToInterrupt(pulsador1), Write, RISING);
     attachInterrupt(digitalPinToInterrupt(pulsador2), Read, RISING);
     
}

void loop() {
     digitalWrite(led,HIGH);
     direccion = 00;

     //WRITE
     while(flag1==1){
           flag2=0;
      
           entrada = analogRead(A2);
           temp = (5.0 * entrada * 100.0)/1024;
                             
           MAS = highByte(entrada);
           MEN = lowByte(entrada);
     
           Serial.print("MAS= ");Serial.println(MAS,BIN);
           Serial.print("MEN= ");Serial.println(MEN,BIN);
     
           E[0]=MAS;
           E[1]=MEN;
     
           for(int x=1; x>=0; x--){
                   Wire.beginTransmission(eeprom);
                   Wire.write(0x00);
                   Wire.write(direccion);
                   Wire.write(E[x]);
                   Wire.endTransmission();
                   delay(100);
                   direccion++;
           }
                             
           direccion++;
           W++;
           digitalWrite(led, HIGH);
           delay(500);
           digitalWrite(led, LOW);
           delay(500);

           Serial.print("Temperatura Guardada=");
           Serial.println(temp);
           cont=0;
           delay(5000);
     }
     

     //READ
     if(flag2==1){
            flag2=0;
            direccion=00;
            digitalWrite(led2,HIGH);
            for(int i=W-1; i>=0; i--){
                     Wire.beginTransmission(eeprom);
                     Wire.write(0x00);
                     Wire.write(direccion);
                     Wire.endTransmission();
                     delay(10);
                     Wire.requestFrom(eeprom,1);
                     delay(30);
                     RMAS = Wire.read();
                     delay(500);

                     Wire.beginTransmission(eeprom);
                     Wire.write(0x00);
                     Wire.write(direccion+1);
                     Wire.endTransmission();
                     delay(10);
                     Wire.requestFrom(eeprom,1);
                     delay(30);
                     RMEN = Wire.read();
                     delay(500);
                     
                     Serial.print("RMAS= ");Serial.println(RMAS,BIN);
                     Serial.print("RMEN= ");Serial.println(RMEN,BIN);

                     entrada2=RMAS<<8|RMEN;
                     temp2 = (5.0 * entrada2 * 100.0)/1024;
                     Serial.print("Temperatura ");
                     Serial.print(i);
                     Serial.print("=");
                     Serial.println(temp2);
                     delay(500);
                     direccion = direccion+2;
                   }
                   digitalWrite(led2,LOW);
                   delay(1000);
     }
  
}

void Write(){
    cont++;
    if (cont==1){
          delay(5000);
          if(flag1==1){
             flag1=0;
          }
          else{
            flag1=1;
          }
          digitalWrite(led2, HIGH);
          delay(1000);
          digitalWrite(led2, LOW);
    }
}

void Read(){
          delay(5000);
          if(flag2==1){
             flag2=0;
          }
          else{
            flag2=1;
          }
          digitalWrite(led2, HIGH);
          delay(1000);
          digitalWrite(led2, LOW);
}

Primero para que usar dos interrupciones con pulsadores?
Y luego si usas interrupciones JAMAS uses delay dentro de cualquiera de ellas

          digitalWrite(led2, HIGH);
          delay(1000); // <==== PROHIBIDO dentro de una ISR!!!!!!!!
          digitalWrite(led2, LOW);