encodeur rotatif et compte à rebours besoin d'aide svp

Merci kamill

quelqu'un pourrait analyser mon code s'il vous plait, pour savoir ou se situ l'erreur concernant ce fameux encodeur rotatif qui me fait tourner bourique
puis qu’apparemment je l'ai bien branché.

// - - - pour le codeur rotatif - - -
int val; 
int PinCLK = 13;
int PinDT = 12;
static long encoderPos = -1;    // Au 1er démarrage, il passera à 0 
int PinCLKLast = LOW;
int nbPas = 20;                 // Résolution de l'encodeur
int n = LOW;

dans le setup j'ai ça :

// - - - entrée pour l'encodeur rotatif - - -
    // activation des pullups internes de l'Arduino, si on n'utilise pas de pullups externes.
 
    pinMode (PinCLK,INPUT_PULLUP);
    pinMode (PinDT,INPUT_PULLUP);

dans la loop je n'ai rien
mais je lance un sous programme qui s'appel ArretProg

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

verdicts ?