se non sbaglio ti basta spostare vecchio_val= val dentro all'if
if ((val == HIGH) && (vecchio_val == LOW)) {
stato = 1 - stato;
delay(15); // attesa di 15 millisecondi
vecchio_val = val; // memorizza il valore precedente di val
}
e poi in fondo
if ( curr == 4 ) {
stato = 0;
vecchio_val=LOW;
}
in questo modo anche se premi non succede nulla fino alla fine del ciclo
al contrario se vuoi che una nuova pressione del pulsante resetti immediatamente tutto...
aggiungi un else
if ((val == HIGH) && (vecchio_val == LOW)) {
stato = 1 - stato;
delay(15); // attesa di 15 millisecondi
vecchio_val = val; // memorizza il valore precedente di val
}else if ((val == HIGH) && (vecchio_val == HIGH)) {
stato=0;
vecchio_val=LOW
curr=0;
}