Consulta contador decreciente 24seg dep

Buenas tengo un codigo que lo que hace es contar 24 o 14 segundos de manera decreciente. con 4 botones pulsadores, 2 para ingresar valores (24, 14seg) y los otros para inicio y detención. la falla que esta teniendo posiblemente sea el antirrebote, ya que no avanza dando un pulso al inicio, solo si se tiene presionado el botón.
este es el codigo:
`

//pines botones ....
const int pin14 = 4;
const int pin24 = 3;
const int pinplay = 2;
const int pinstop = 0;
const int s0 = 13;
const int s1 = 12;
const int s2 = 11;
const int s3 = 10;
const int s4 = 9;
const int s11 = 8;
const int s12 = 7;
const int s13 = 6;
const int s14 = 5;
//estado de los pines //////////////////////////////
int p14 = LOW;
int p24 = LOW;
int pplay = LOW;
int pstop = LOW;
 

void setup() {

pinMode(pin14, INPUT);
 pinMode(pin24, INPUT);
  pinMode(pinplay, INPUT);
   pinMode(pinstop, INPUT);
   pinMode(s0, OUTPUT);
   pinMode(s1, OUTPUT);
   pinMode(s2, OUTPUT);
   pinMode(s3, OUTPUT);
   pinMode(s4, OUTPUT);
 pinMode(s11, OUTPUT);
   pinMode(s12, OUTPUT);
   pinMode(s13, OUTPUT);
   pinMode(s14, OUTPUT);

}

void loop() {


  ////////////////////////INICIA LOOP/////////////////////////////
  
p14 = digitalRead(pin14);
p24 = digitalRead(pin24);
pplay = digitalRead(pinplay);

if (p24 == HIGH){
  
  while(true){
    int a;
    p141:
    int i=24;
    funcNum(24);
    pplay = digitalRead(pinplay);
    p14 = digitalRead(pin14);
    p24 = digitalRead(pin24);
    if (p24 == HIGH) goto p141 ;
    if (p14 == HIGH)goto p143 ;


    
    
if (pplay == HIGH) {
  
  for( i=24;i>-1; a){

        p14 = digitalRead(pin14);
        p24 = digitalRead(pin24); 
        
        funcNum(i);
     pstop = digitalRead(pinstop);   
  if (pstop == HIGH) {
    a=i;
    while(true){
    p14 = digitalRead(pin14); 
    p24 = digitalRead(pin24);
    pplay = digitalRead(pinplay);
      if (p24 == HIGH)goto p141;
      if (pplay == HIGH){goto p142;pstop == LOW;
      }
      if (p14 == HIGH)goto p143;
     
      }}

 p142:
   a=i--;
  if (p24 == HIGH) goto p141 ;
  if (p14 == HIGH)goto p143 ;

     delay(990);
     if (a == 0) {
      
      digitalWrite(s0, HIGH);
      delay(500);
       digitalWrite(s0, LOW);
}
}


  }//fin de if play
 }//fin while
}//fin if 24
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
p143:

if (p14 == HIGH) {

   while(true){
    int m;
    int n=14;
     p14 = digitalRead(pin14);
     p24 = digitalRead(pin24); 
     pplay = digitalRead(pinplay);
     funcNum(14);
    if (p24 == HIGH) goto p141 ;
    if (p14 == HIGH)goto p143 ;

     
if (pplay == HIGH) {
 
  for( n=14;n>-1; m){
  funcNum(n);
  

  
  p14 = digitalRead(pin14);
  p24 = digitalRead(pin24);
  pstop = digitalRead(pinstop);
     delay(10);
  if (pstop == HIGH) {
    m=n;
    while(true){
      p14 = digitalRead(pin14); 
      p24 = digitalRead(pin24);
      pplay = digitalRead(pinplay);
      if (p24 == HIGH)goto p141;
      if (pplay == HIGH){goto p144;pstop == LOW;
      }
      if (p14 == HIGH)goto p143;
     
      }
      
      }

 p144:
   m=n--;
  if (p14 == HIGH)goto p143 ;
    if (p24 == HIGH)goto p141 ;

    
     delay(990);
 if (m == 0) {
      
      digitalWrite(s0, HIGH);
      delay(500);
       digitalWrite(s0, LOW);
}


     
}

   }//if pplay
  }// fin while

}// finde if
///////////////////////////////////////////////////////////






}


void funcNum(int x){
  switch (x){
    case 0://when count value is zero show”0” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
   case 1:// when count value is 1 show”1” on disp
       digitalWrite(s1, HIGH);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 2:// when count value is 2 show”2” on disp
       digitalWrite(s1, LOW);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 3:// when count value is 3 show”3” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 4:// when count value is 4 show”4” on disp
       digitalWrite(s1, LOW);
      digitalWrite(s2, LOW);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 5:// when count value is 5 show”5” on disp
       digitalWrite(s1, HIGH);
      digitalWrite(s2, LOW);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 6:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 7:// when count value is 5 show”5” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 8:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, HIGH);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 9:// when count value is 5 show”5” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, HIGH);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 10:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 11:// when count value is 5 show”5” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 12:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 13:// when count value is 5 show”5” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 14:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, LOW);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, LOW);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 15:// when count value is 5 show”5” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, LOW);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, LOW);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 16:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, LOW);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 17:// when count value is 5 show”5” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, LOW);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 18:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, HIGH);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 19:// when count value is 5 show”5” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, HIGH);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 20:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, HIGH);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 21:// when count value is 5 show”5” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, HIGH);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 22:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, HIGH);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 23:// when count value is 5 show”5” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, HIGH);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 24:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, LOW);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, HIGH);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    
 
  
      
 break;
   
}
}

void funcNum1(int l){
  switch (l){
    case 0://when count value is zero show”0” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
   case 1:// when count value is 1 show”1” on disp
       digitalWrite(s1, HIGH);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 2:// when count value is 2 show”2” on disp
       digitalWrite(s1, LOW);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 3:// when count value is 3 show”3” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 4:// when count value is 4 show”4” on disp
       digitalWrite(s1, LOW);
      digitalWrite(s2, LOW);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 5:// when count value is 5 show”5” on disp
       digitalWrite(s1, HIGH);
      digitalWrite(s2, LOW);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 6:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 7:// when count value is 5 show”5” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, LOW);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 8:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, HIGH);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 9:// when count value is 5 show”5” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, HIGH);
      digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 10:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 11:// when count value is 5 show”5” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 12:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 13:// when count value is 5 show”5” on disp
      digitalWrite(s1, HIGH);
      digitalWrite(s2, HIGH);
      digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
    case 14:// when count value is 5 show”5” on disp
      digitalWrite(s1, LOW);
      digitalWrite(s2, LOW);
      digitalWrite(s3, HIGH);
      digitalWrite(s4, LOW);
      digitalWrite(s11, HIGH);
      digitalWrite(s12, LOW);
      digitalWrite(s13, LOW);
      digitalWrite(s14, LOW);
    break;
 break;
   
}
}

`

Lo más probable es que el problema resida en que tu programa reacciona solamente cuando los botones permanecen oprimidos (“== HIGH”), no cuando se pulsan y transicionan de LOW a HIGH. Puedes usar alguna librería para manejarlos.

Por otro lado, el programa contiene demasiadas instrucciones “goto”. El número ideal de estas instrucciones en cualquier programa es Cero. Nada. Ninguna.

Un programa así es muy difícil de entender y de depurar. Te recomiendo cambiarlo para prescindir de ellas.

Buenas. gracias por su aporte, entendí muy bien, si el programa no es mío lo estaba probando como alternativa pero viene con esos problemas.