Interrupciones externas

Estoy practicando con las interrupciones externas. He creado un programa que lo que hace es poner en marcha un LED al cabo de delay de 2000 ms. Lo que pretendo es detectar que se ha pulsado S0 y que no se active el LED. Para ello uso la interrupción externa 0. Pero no sé porque no funciona el programa.

A ver si alguien me arroja un poco de luz al respecto.

Gracias

byte etapa;
boolean S0, S1;

void setup() {
  pinMode(13,OUTPUT);
  pinMode(0,INPUT);
  pinMode(2,INPUT);
  attachInterrupt(0,parar,FALLING); 
  etapa = 0;

}

void loop() {
  S0 = digitalRead(2);
  S1 = digitalRead(0);
  
//TRANSICIONES

  if (etapa == 0 & S0 == 1 & S1 == 1)
  {
    etapa = 1;
  }
  
   if (etapa == 1 & S0 == 1)
  {
    delay(2000);
    etapa = 2;
    
  }
  
  //ACCIONES

  if (etapa == 0)
  {
    etapa = 0;
    digitalWrite(13,LOW);
  }
  
  if (etapa == 2)
  {
    digitalWrite(13,HIGH);
  }
}  
  void parar()
  {
    etapa = 0;
  }