encodeur rotatif et compte à rebours besoin d'aide svp

ce qui donne avec mon code : regardez dans le "void ArretProg"
et ça ne fonctionne pas.

void ArretProg(){
  
        digitalWrite(LEDS, HIGH); // on allume le carré
        lcd.clear(); // Efface LCD
        delay(10); // pour laisser temps d'effacer l'écran
        milliref = millis(); // mémorisation de la valeur de millis() courante
        
            
        while(time>0) { // si la tempo n'est pas fini

            
           
            if (millis() > (milliref + 1000)) { // si une seconde s'est écoulée
                seconde = seconde - 1; // Décrémente le comptage des secondes
                time = time - 1; // Décrémente Temps total secondes
                milliref = milliref + 1000;  // incrémente la valeur de référence milliseconde
            }
            if (minute > 0) {
                if (seconde < 0) {
                    minute--; // Décrémente une minute si le comptage des secondes arrivent à 0 et si les minutes sont sup?rieurs à 0
                    seconde = 59; // reset seconde à 60
                }
            }
            if (heure > 0) {
                if (minute <= 0) {
                    if (time == 3600 * heure - 1) {
                        heure--; // Décrémente une heure si le comptage des minutes arrivent à 0 et si les heures sont supérieurs à 0 et si le temps total est un multiple de 3600 seconde (1 heure)
                        minute = 59; // reset minutes à 60
                        seconde = 59;
                    }
                }    
            }

              
            
              lcd.clear();
              lcd.setCursor(0, 0);
              lcd.print("Extinction dans:");
              lcd.setCursor(4, 1);                                 
              lcd.print("00:00:00");  // Affiche le format du Compte à rebours
    
    // Imprime les heures sur la collone 4 si ils sont supérieur à 10, et sur la colonne 5 si inférieur à 10:
              if (heure >= 10) {
              lcd.setCursor(4, 1);
    }
              else{
              lcd.setCursor(5, 1);
    }
              lcd.print(heure);
    
    // Imprime les minutes sur la collone 7 si ils sont supérieur à 10, et sur la colonne 8 si inférieur à 10:
              if (minute >= 10){
              lcd.setCursor(7, 1);
    }
              else {
              lcd.setCursor(8, 1);
    }
              lcd.print(minute);
    
    // Imprime les seconde sur la collone 10 si ils sont supérieur à 10, et sur la colonne 11 si inférieur à 10:
              if (seconde >= 10){
              lcd.setCursor(10, 1);
    }
              else {
             lcd.setCursor(11, 1);
    }
             lcd.print(seconde); 

             
              
             delay(980); // Délais de rafraichisement LCD
             lcd.clear();
             
      // en cas de mouvement du bouton rotatif
      
            //initialisation de l'encodeur rotatif
             encoderPos = 0;
             n = digitalRead(PinCLK);

          if ((PinCLKLast == LOW) && (n == HIGH)) {
     
              if (digitalRead(PinDT) == LOW) {
              encoderPos--;
              minute = minute-30;
              if ( encoderPos < 0 ) {
              encoderPos = nbPas;
              }
              } else {     
               encoderPos++;
               minute = minute+30;
               if ( encoderPos > ( nbPas - 1 ) ) {
               encoderPos = 0;
               }
   }
   } 
   PinCLKLast = n;
 

                
       //  si on appuis sur BP arret pendant le décompte  
          
             if (digitalRead (BPARRET) == LOW){ 
                ARRET(); //on lance le sous programe d'arret
             }

        // lorsque le compte à rebours est fini
        
           if(time <= 0){
            
            lcd.clear(); // efface l'écran
            lcd.setCursor(2, 0);
            lcd.print("Carre eteint"); // Affiche carré éteint
            digitalWrite(LEDS, LOW); // on éteint le carré
            delay(3000);
            lcd.clear();
            lcd.setCursor(0, 0); //on met le curseur en haut à gauche
            lcd.print("Carre en attente"); //on affiche carré en attente sur la première ligne
            lcd.setCursor(2, 1); //on met le curseur sur la seconde ligne de l'afficheur
            lcd.print("d'activation"); //et on affiche d'activation
            
           }
           
               
        }   
        
        }
  
void ARRET(){
  heure = 0;
  minute = 0;
  seconde = 0;
  time = (seconde + (60 * minute) + (3600 * heure));

}