Led lampeggiante per 30 secondi

Così funziona, anche se non è proprio corretto, il pulsante può prendere dei 'colpi'.... e ricorda di mettere sempre una resistenza da 10k tra il pin pulsante e gnd (per mantenere il pin allo stato LOW).

#define LED 13                // LED collegato al pin digitale 13  
#define BUTTON 7              // pin di input dove è collegato il pulsante  
int val = 0;                  // si userà val per conservare lo stato del pin di input  
int stato = 0;                // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso  
byte i=0;

void setup() {  
  pinMode(LED, OUTPUT);       // imposta il pin digitale come output  
  pinMode(BUTTON, INPUT);     // imposta il pin digitale come input  
}  

void loop() {  
  val = digitalRead(BUTTON);  // legge il valore dell'input e lo conserva  

  // controlla se è accaduto qualcosa  
  if ((val == HIGH)){  
    stato = 1;  
    delay(15);                // attesa di 15 millisecondi  
  }   

  if (stato == 1) {  
    digitalWrite(LED, HIGH);  // accende il LED  
    delay(500);              // aspetta un secondo  
    digitalWrite(LED, LOW);   // spegne il LED  
    delay(500); // aspetta un secondo
    i+=1;  //incremento i
    if(i==30){stato=0;i=0;} // dopo 30 cicli on-off smette di lampeggiare || azzero i
  }               
}