encodeur rotatif et compte à rebours besoin d'aide svp

Presque EUREKA ....!

je parvient à faire varier mon compte à rebours grace à l'encodeur rotatif.
mais...
je n'arrive pas à le faire repartir.

please, help...

voici le sous programme qui permet de faire varier le compte à rebours :

void GelProg (){
   // - - - initialisation de l'écran en mode programme - - -
   lcd.clear();
   lcd.setCursor(3, 0);     // positionne le curseur à la première ligne
   lcd.print("Programmez"); // Affiche programmez
   lcd.setCursor(4, 1);     // positionne le curseur à la seconde ligne
   lcd.print("00:00:00");  // Affiche le format du Compte à rebours

   // - - - lecture de l'encodeur rotatif - - -
while ((digitalRead(PinSW))) {
      n = digitalRead(PinCLK);
   
   if ((PinCLKLast == LOW) && (n == HIGH)) {
     
     if (digitalRead(PinDT) == LOW) {
      //Sens antihoraire
       encoderPos--;
       minute = minute - 15;
       if ( encoderPos < 0 ) {
         encoderPos = nbPas;
         minute = 0;
         heure --;
       }
     } else {
       //Sens horaire
       encoderPos++;
       minute = minute + 15;
       if ( encoderPos > ( nbPas - 1 ) ) {
         encoderPos = 0;
       }
     }

     time = (seconde + (60 * minute) + (3600 * heure));
     Imprime (); // on lance le sous programme d'impression sur le LCD
     
        
     
   }

   PinCLKLast = n;
}  
}


  void Imprime (){

              lcd.clear();
              lcd.setCursor(0, 0);
              lcd.print("Appuyez pour Go");
              lcd.setCursor(4, 1);                                 
              lcd.print("00:00:00");  // Affiche le format du Compte à rebours

     // Limite des minutes et des heures
     if (minute > 59){
      minute = 0;
      heure ++;
     }
     if (minute < 0){
      minute = 0;
      heure --;
     }
     if (heure < 0){
      heure = 0;
     }
     
  
     // 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(10); // Délais de rafraichisement LCD
             
}

et le sous programme qui permet le décompte:

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) { // tant que 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 d'appuis sur le bouton rotatif
      
             if (!(digitalRead(PinSW))) {
                encoderPos = 0; // Reset la position si on appui sur l'encodeur
                GelProg (); //on lance le sous programe de gel du compte à rebours et de sa programmation

             }
   
       //  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
            
           }
           
               
        }   
        
        }

question : comment lier les deux pour faire repartir le compte à rebours en appuyant sur le bouton de l'encodeur ?

digitalRead(PinSW)

une idée ?