Ayuda con programa de Arduino

Hola buenas, estoy haciendo un programa que haga esto:

Quiero hacer un programa que al pulsar un pulsador (normalmente abierto) haga una cuenta atras un contador con 7 segmentos de un solo dígito osea, 9, 8, 7… y asi hasta 0. Vale pues una vez llegado a cero quiero que me active una salida que en este caso lo conectarse a un la bobina de un relé.
Luego cuando se desactive este pulsador osea, que el circuito quedara abierto se tiene que desactivar la salida que va al relé.

Pero el problema es que este pulsador (el que activa la cuenta atrás) tiene que estar todo el rato pulsado y claro el arduino una vez hace todo la cuenta hacia atrás vuelve a empezar por que detecta que el pulsador aun esta pulsado. Osea hace todo el rato un bucle sin parar. Y lo que quiero hacer es que una vez llegue a cero el contador pare y active la salida que se va hacia el relé, pero cuando se despulse el pulsador que se vuelva a desactiva el relé.

Este es el programa que he usado.
(Code Tags por favor! Gracias! El Moderator)

int p = 2;
int p2 = 5; 
int val1 = 0; 
int val2 = 0; 
int ant = 0; 
int c = 0;
int L1 = 10;
int L2 = 11;
int L3 = 12;
int L4 = 13;
int LedAlarma = 4;
int LedPrueba = 53;

void setup ()
{
pinMode (p, INPUT);
pinMode (L1, OUTPUT);
pinMode (L2, OUTPUT);
pinMode (L3, OUTPUT);
pinMode (L4, OUTPUT);
pinMode (LedAlarma, OUTPUT);
pinMode (LedPrueba, OUTPUT);
}

void loop ()
{
 val1 = digitalRead (p);
 if ((val1 == HIGH) && (val1 != ant) && (c < 9))
 {
   delay (1000);
   c++;
 }
 ant = val1;
 if (c==0)
 {
   digitalWrite (L1, HIGH);
   digitalWrite (L2, LOW);
   digitalWrite (L3, LOW);
   digitalWrite (L4, HIGH);
 }
 if (c==1)
 {
   digitalWrite (L1, LOW);
   digitalWrite (L2, LOW);
   digitalWrite (L3, LOW);
   digitalWrite (L4, HIGH);
 }
 if (c==2)
 {
   digitalWrite (L1, HIGH);
   digitalWrite (L2, HIGH);
   digitalWrite (L3, HIGH);
   digitalWrite (L4, LOW);
 }
 if (c==3)
 {
   digitalWrite (L1, LOW);
   digitalWrite (L2, HIGH);
   digitalWrite (L3, HIGH);
   digitalWrite (L4, LOW);
 }
 if (c==4)
 {
   digitalWrite (L1, HIGH);
   digitalWrite (L2, LOW);
   digitalWrite (L3, HIGH);
   digitalWrite (L4, LOW);
 }
 if (c==5)
 {
   digitalWrite (L1, LOW);
   digitalWrite (L2, LOW);
   digitalWrite (L3, HIGH);
   digitalWrite (L4, LOW);
 }
 if (c==6)
 {
   digitalWrite (L1, HIGH);
   digitalWrite (L2, HIGH);
   digitalWrite (L3, LOW);
   digitalWrite (L4, LOW);
 }
 if (c==7)
 {
   digitalWrite (L1, LOW);
   digitalWrite (L2, HIGH);
   digitalWrite (L3, LOW);
   digitalWrite (L4, LOW);
 }
 if (c==8)
 {
   digitalWrite (L1, HIGH);
   digitalWrite (L2, LOW);
   digitalWrite (L3, LOW);
   digitalWrite (L4, LOW);
 }
 if (c==9)
 {
   digitalWrite (L1, LOW);
   digitalWrite (L2, LOW);
   digitalWrite (L3, LOW);
   digitalWrite (L4, LOW);
   delay (1000);
   digitalWrite (LedAlarma, HIGH);
   digitalWrite (LedProba, HIGH);
 }
 if (( val1 == LOW))
 {
   digitalWrite (LedAlarma, LOW);
   digitalWrite (LedAlarma, LOW);
 }
}

Agradecería mucho si alguien me puede ayudar por que realmente no se que puedo estar haciendo mal.

Gracias.

if ((val1 == HIGH) && (val1 != ant) && (c < 10)) // 10 vs 9
 {
   delay (1000);
   c++; // c = c+1.  
if (c==10){c=0;} // reset c 
 }

Perhaps:

if ((val1 == HIGH) && (val1 != ant) && (c < 10)) // 10 vs 9
 {
   delay (1000);
   c--; // c = c-1.  
if (c==0){c=9;} // reset c 
 }

Algunos cambios para hacer mas claras algunas cosas
En las definiciones de pines siempre usa const byte en lugar de int.
byte es una variable que ocupa 1 byte menos (valga la redundancia) que int (entero que ocupa 2);
const constante además le dice al compilador que use la FLASH y no RAM asi que no gastas nada.
Los botones o pulsadores es bueno llamarlos asi, botonPin1 a n para entender bien de que hablas cuando veas el programa 2 meses despues.
Se nota por LedPinprueba = 53 que usas un MEGA, es algo que debes decir cuando presentas tu problema.
Tu patron de bits para comandar el display lo concentré en una matriz que llamé patron que tiene 10 filas y 4 columnas 40 bytes pero de nuevo, lo guardo en FLASH y no gasto RAM.
Los patrones son los que tu has puesto en cada if. Si erre alguno ajusta el 1 o 0 correspondiente a fila y columna, estan comentados para que no tengas problemas.
Para mi gusto hay muchos delays.
No entiendo si quieres que todo funcione mientras el boton este presionado o si quieres presionarlo una vez y que haga la secuencia y luego alpresionarlo de nuevo deje de hacerla?

por ultimo esta secuencia

 digitalWrite (L1, patron[c][0]);
 digitalWrite (L2, patron[c][1]);
 digitalWrite (L3, patron[c][2]);
 digitalWrite (L4, patron[c][3]);

envia a L1, L2,L3 y L4 los patrones HIGH LOW que tu has indicado (que por cierto no entiendo de donde salen) para comandar el LED 7 Segmentos.
con cada decremento de c se ubica la fila y para cada caso tenemos la columna 0 a 3.
Asi se armó la matriz y asi la reproduce.

byte botonStatus = 0; 
byte botonAnt = 0; 
int c = 9;

const byte botonPin1 = 2;
const byte botonPin2 = 5; 
const byte L1 = 10;
const byte L2 = 11;
const byte L3 = 12;
const byte L4 = 13;
const byte LedAlarma = 4;
const byte LedPinprueba = 53;

const byte patron[10][4] = {{1,0,0,1}, // 0
   {0,0,0,1}, // 1
   {1,1,1,0}, // 2
 {0,1,1,0}, // 3
 {1,0,1,0}, // 4
 {0,0,1,0}, // 5
 {1,1,0,0}, // 6
 {0,1,0,0}, // 7
 {1,0,0,0}, // 8
 {0,0,0,0}}; // 9


void setup() {

 pinMode(botonPin1, INPUT);
 pinMode(L1, OUTPUT);
 pinMode(L2, OUTPUT);
 pinMode(L3, OUTPUT);
 pinMode(L4, OUTPUT);
 pinMode(LedAlarma, OUTPUT);
 pinMode(LedPinprueba, OUTPUT);
}

void loop()
{
 botonStatus = digitalRead (botonPin1);
 if ((botonStatus == HIGH) && (botonStatus != botonAnt) && (c < 10)) {
   delay (1000);
   c--;
 }

 botonAnt = botonStatus;

 digitalWrite (L1, patron[c][0]);
 digitalWrite (L2, patron[c][1]);
 digitalWrite (L3, patron[c][2]);
 digitalWrite (L4, patron[c][3]);
 delay(1000);

 if (c == 0) {
   digitalWrite (LedAlarma, HIGH);
   digitalWrite (LedPinprueba, HIGH);
   delay (1000);
           c = 9;
 } else {  // para cualquier otra posicion del contador c, las salidas a LOW
   digitalWrite (LedAlarma, LOW);
   digitalWrite (LedPinprueba, LOW);
 }
}

NOTA: Por favar lee las normas del foro que está en la cabecera de cada AREA o SUBFORO.
Tu título no puede contener la palabra AYUDA, porque no sugiere nada a alguien que tenga tu mismo problema. Busca algo que sea indicativo de tu problema y/o consulta. Gracias