Menu Rotary: variables ou tableau?

Même si le sushi (ouais je continue avec cette vanne, étant en manque d'idées) premier est résolu, je crois qu'à force de bricoler des variables, je commence à avoir des conflits.

J'ai un message d'erreur
invalid initialization of reference of type 'int&' from expression of type 'byte {aka unsigned char}'

//définition des broches

//broches du rotary encoder
int PinCLK = 4;
int PinDT = 5;
int PinSW = 0;
//broches des leds
int PinLedG = 13;  //led verte
int PinLedB = 12;  //led bleue
int PinLedR = 11;  //led rouge
//broche buzzer
int PinBeep = 10;  //buzzer

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//création de variables

//variable du programme de chrono
int VNbTours = 0; // contient le nombre de tours //0=infini puis de 1 à 999

//variables propres à la fonction RoMenu
static long encoderpos;   
byte PinCLKLast = LOW;
byte n = LOW;

//variable du buzzer
byte VBuzz = 1;  //0= muet 1=son activé

//variables du LCD
byte VLCDCon = 120; //par défaut le contraste est à 120/255
byte VLCDLum = 220; //par défaut la luminosité est à 220

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void setup() { 
  pinMode (PinCLK,INPUT);
  pinMode (PinDT,INPUT);
  pinMode (PinSW,INPUT);
  Serial.begin (9600);

  // test du buzzer
  Serial.println("Buzzer on");
  VBuzz=1;
  FBuzzer();
  delay(1000);
  Serial.println("Buzzer off");
  VBuzz=0;
  FBuzzer();
  delay(1000);
  
  //test de la fonction RoMenu
    Serial.println (RoMenu("Contraste", 50, 0, 100, 5, "Minimum", "Maximum", VLCDCon)); 
    delay(1000);
    Serial.println (RoMenu("Beep son", 1,0, 1, 1, "Sans", "Avec", Vbuzz));
    delay(1000);
    Serial.println (RoMenu("Nombre de tours",1,0,999,1,"Infini","999 Maxi", VNbTours ));
    delay(1000);
} 



void loop() {
}


//FONCTION ROMENU COMMENCE ICI///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int RoMenu(String Titre, int encoderpos, int Vmin, int Vmax, int Vinc, String TxtMin, String TxtMax, int &encorderpos) { 
  //paramètres; (Titre, Valeur initiale, Valeur Minimale, Valeur Maximale, Valeur d'incrementation, Mot de remplacement pour la valeur min, Mot de remplacement pour la valeur max, Nom de la variable)
  
  Serial.println(Titre); //affiche le titre
  
  //afficher la valeur indiquée sous la bonne forme   
     if (encoderpos<=Vmin) {Serial.println(TxtMin);}
     else if (encoderpos>=Vmax) {Serial.println(TxtMax);}
     else {Serial.println(encoderpos);}
  encoderpos=encoderpos-Vinc; //rétablit la vraie valeur au démarrage
  
  
  
   while ((digitalRead(PinSW))) {      // tant qu'on n'appuie pas sur le bouton
 
 
   n = digitalRead(PinCLK); //lit la valeur
   
   if ((PinCLKLast == LOW) && (n == HIGH)) {  
 
     
     if (digitalRead(PinDT) == LOW) {   //si sens antihoraire
       encoderpos=encoderpos-Vinc;      //décrémenter
       delay(100);
     } 
     else {                             //sens horaire
       encoderpos=encoderpos+Vinc;      //incrémenter
       delay(100);
     }
     
     encoderpos = constrain (encoderpos,Vmin,Vmax);   //rétablit la valeur mini ou maxi de la variable si elle a dépassé les limites données par l'utilisateur
     
     //comparer la valeur à cells fournies et adapter l'affichage
     if (encoderpos<=Vmin) {Serial.println(TxtMin);}
     else if (encoderpos>=Vmax) {Serial.println(TxtMax);}
     else {Serial.println(encoderpos);}
     //delay(100);
   } 
   PinCLKLast = n;
 }
 Serial.println("FIN");
 
 //return encoderpos;
}



//FONCTION BUZZER//////////////////////////////////////////////////////
void FBuzzer() {
//fait sonner ou pas le buzzer
for (int i = 0; i<2; i++) {  //for (x = 0; x <= 255; x ++)
  analogWrite (PinBuzz, (255*VBuzz); //sonne si VBuzz=1, silence si =0
  delay(200);
  analogWrite (PinBuzz, 0);
  delay(200); }

//FONCTION LedFlash///////////////////////////////////////////////////
void FLedFlash(int Led) {  //int Led récupère la couleur de la led à allumer
  //pour appeler cette fonction   FLedFlash(G) allume la led verte// indiquer R, G, ou B

  //tout éteindre
  digitalWrite(PinLedR,LOW);  //led R off
  digitalWrite(PinLedG,LOW);  //led G off
  digitalWrite(PinLedB,LOW);  //led B off
  //allume la led définie par int Led
  switch (Led) {
  case R:
    digitalWrite(PinLedR,HIGH);// rouge
    break;
  case G:
    digitalWrite(PinLedG,HIGH);// verte
    break;
  case B:
    digitalWrite(PinLedB,HIGH);// bleue
}
}

A mon avis, il n'aime pas que je passe d'un byte à un int comme ça sans prévenir...