Indicador cambio de marcha en volante G29.

Hola a todos,

He decido lanzarme al mundo de la programación en Arduino con un pequeño proyecto.
Consiste en conectar un display de 7 segmentos a mi volante de PS4 modelo Logitec G29 a través de un Arduino ATMega (por el momento).

Buscando en internet, conseguí un código que me funciona bastante bien a excepción de un pequeño detalle: me gustaría poder configurar mi codigo de Arduino para poder limitar el numero de marchas según el coche que elija. Es decir: si elijo un coche de los 80 con solo 5 velocidades y si por error sigo presionando la leva para subir, el display no vaya mas allá de las 5 marchas.

Me gustaría poner un switch rotativo (de unas 3 o 4 posiciones) para llevar a cabo la selección.
De momento lo hago solo conectado un cable al puerto 11 para dar un valor HIGH y así evitar que se muestre un número mayor de 6. Resultado: no funciona! :(. Debido a mi breve conocimiento del código, no consigo que funcione.

He descubierto que si modifico el parámetro "gear<8" a, por ejemplo, "gear<7", el conjunto estaría funcionando casi de la manera que quiero, ya que solo me devuelve valores cómo máximo hasta 6.

En resumen, creo que el objetivo está en hacer que "gear" cambie de valor segun el pin 11(HIGH/LOW) y limite el número máximo a mostrar en el display.

He adjuntado el código que uso, y he marcado mediante comentarios el bloque (al principio del loop) de los comandos correspondientes al selector.

He intentado algunas otros pruebas, pero todas han sido fiascos... Seguiré probando con otras que se me van ocurriendo, pero si mientras tanto, algún experto en la materia puede darme su opinión, le estaré muy agradecido.

Saludos.

#define BUTTON_DOWN 9
#define BUTTON_UP 10
#define SELECTOR 11

int ledPinA =  2;    // LED connected to digital pin 3
int ledPinB =  3;    // LED connected to digital pin 4
int ledPinC =  4;    // LED connected to digital pin 5
int ledPinD =  5;    // LED connected to digital pin 6
int ledPinE =  6;    // LED connected to digital pin 7
int ledPinF =  7;    // LED connected to digital pin 8
int ledPinG =  8;    // LED connected to digital pin 9

int val_down = 0;
int old_val_down = 0;

int val_up = 0;
int old_val_up = 0;
int state = 0;
int gear = 1;

void setup() 

  {             
  pinMode(BUTTON_DOWN, INPUT_PULLUP);
  pinMode(BUTTON_UP, INPUT_PULLUP);
  pinMode(SELECTOR, INPUT_PULLUP);
  
  

  pinMode(ledPinA, OUTPUT);
  pinMode(ledPinB, OUTPUT);
  pinMode(ledPinC, OUTPUT);
  pinMode(ledPinD, OUTPUT);
  pinMode(ledPinE, OUTPUT);
  pinMode(ledPinF, OUTPUT);
  pinMode(ledPinG, OUTPUT);  

  
  
}

void led0()// r 
           
{
  digitalWrite(ledPinA, LOW);
  digitalWrite(ledPinB, LOW);
  digitalWrite(ledPinC, LOW);
  digitalWrite(ledPinD, LOW);
  digitalWrite(ledPinE, HIGH);  
  digitalWrite(ledPinF, LOW);  
  digitalWrite(ledPinG, HIGH); 
           
}

void led1()// n 
{
  digitalWrite(ledPinA, LOW);
  digitalWrite(ledPinB, LOW);
  digitalWrite(ledPinC, HIGH);
  digitalWrite(ledPinD, LOW);
  digitalWrite(ledPinE, HIGH);  
  digitalWrite(ledPinF, LOW);  
  digitalWrite(ledPinG, HIGH);
          
}

void led2()//1
{
  digitalWrite(ledPinA, LOW);
  digitalWrite(ledPinB, HIGH);
  digitalWrite(ledPinC, HIGH);
  digitalWrite(ledPinD, LOW);
  digitalWrite(ledPinE, LOW);  
  digitalWrite(ledPinF, LOW);  
  digitalWrite(ledPinG, LOW); 
 
}

void led3()//2
{
  digitalWrite(ledPinA, HIGH);
  digitalWrite(ledPinB, HIGH);
  digitalWrite(ledPinC, LOW);
  digitalWrite(ledPinD, HIGH);
  digitalWrite(ledPinE, HIGH);  
  digitalWrite(ledPinF, LOW);  
  digitalWrite(ledPinG, HIGH); 
     
}

void led4()//3
{
  digitalWrite(ledPinA, HIGH);
  digitalWrite(ledPinB, HIGH);
  digitalWrite(ledPinC, HIGH);
  digitalWrite(ledPinD, HIGH);
  digitalWrite(ledPinE, LOW);  
  digitalWrite(ledPinF, LOW);  
  digitalWrite(ledPinG, HIGH); 
  
 } 

void led5()//4
{
 digitalWrite(ledPinA, LOW);
  digitalWrite(ledPinB, HIGH);
  digitalWrite(ledPinC, HIGH);
  digitalWrite(ledPinD, LOW);
  digitalWrite(ledPinE, LOW);  
  digitalWrite(ledPinF, HIGH);  
  digitalWrite(ledPinG, HIGH); 
 
 } 

void led6()//5
{
  digitalWrite(ledPinA, HIGH);
  digitalWrite(ledPinB, LOW);
  digitalWrite(ledPinC, HIGH);
  digitalWrite(ledPinD, HIGH);
  digitalWrite(ledPinE, LOW);  
  digitalWrite(ledPinF, HIGH);  
  digitalWrite(ledPinG, HIGH); 
   
 } 

void led7()//6
{
  digitalWrite(ledPinA, HIGH);
  digitalWrite(ledPinB, LOW);
  digitalWrite(ledPinC, HIGH);
  digitalWrite(ledPinD, HIGH);
  digitalWrite(ledPinE, HIGH);  
  digitalWrite(ledPinF, HIGH);  
  digitalWrite(ledPinG, HIGH); 
} 

void led8()//7
{
digitalWrite(ledPinA, HIGH);
  digitalWrite(ledPinB, HIGH);
  digitalWrite(ledPinC, HIGH);
  digitalWrite(ledPinD, LOW);
  digitalWrite(ledPinE, LOW);  
  digitalWrite(ledPinF, LOW);  
  digitalWrite(ledPinG, LOW);  

} 

void led9()
{
  digitalWrite(ledPinA, LOW);
  digitalWrite(ledPinB, LOW);
  digitalWrite(ledPinC, LOW);
  digitalWrite(ledPinD, LOW);
  digitalWrite(ledPinE, HIGH);  
  digitalWrite(ledPinF, LOW);  
  digitalWrite(ledPinG, LOW); 
 
} 

void setLed(int number)
{
  switch (number) {
      case 0:  
      led0();
      break;
      
   case 1:  
      led1();
      break;
    case 2:  
      led2();
      break;
    case 3:  
      led3();
      break;
    case 4:  
      led4();
      break;
    case 5:  
      led5();
      break;
    case 6:  
      led6();
      break;
    case 7:  
      led7();
      break;
    case 8:  
      led8();
      break;
    case 9:  
      led9();
      break;
  }
}
              

void oldloop()                     
{
                    // wait for a second
  led0();
  delay(1000);                  // wait for a second
  led1();
  delay(1000);                  // wait for a second
  led2();
  delay(1000);                  // wait for a second
  led3();
  delay(1000);                  // wait for a second
  led4();
  delay(1000);                  // wait for a second
  led5();
  delay(1000);                  // wait for a second
  led6();
  delay(1000);                  // wait for a second
  led7();
  delay(1000);                  // wait for a second
  led8();
  delay(1000);                  // wait for a second
  led9();
  delay(1000);                  // wait for a second
}

void loop()
{ 

// etapa para hacer funcionar el selector de cambios

   int max_gear_mode = digitalRead(SELECTOR);
   if (max_gear_mode == HIGH)
   {
    gear = 7;
    delay(100);
   }


// fin de etapa

  
    val_up = digitalRead(BUTTON_UP);
    if ((val_up == HIGH) && (old_val_up == LOW) && gear<8 ) 
    {
      gear += 1;
     
      delay(250);
    }
    
    old_val_up = val_up;
 
    val_down = digitalRead(BUTTON_DOWN);
    
    if ((val_down == HIGH) && (old_val_down == LOW)&&gear>1 )
    { 
      gear -= 1;
   
      delay(250);
    } 
    
  else   if ((val_down == HIGH) && (old_val_down == LOW)&&(gear<1))

{ 
      gear += 1;
    
      delay(250);
    }
    
   
   else   if ((val_down == HIGH) && (old_val_down == LOW))
   { 
      gear += -1;
    
      delay(250);
    }
       
    old_val_down = val_down;
   

  
   
   
    setLed(gear);
}