Proyecto Monedero

Bueno. Como suponía, el resto de pines no tienen (y lo más importante, no tendrán) influencia en los valores. Se podría haber simplificado más aún, utilizando los pines de un puerto determinado y leyendo el puerto directamente, pero como no tenía seguro el extremo anterior, lo hice un poco más abierto. Más sencillo, incluso, si estuvieras dispuesto a cambiar la nomenclatura de tus leds para quitar los huecos.
Prueba a ver este código. Compila, aunque está sin probar; pero debería hacer algo.

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

// ESTADO DE LOS LED. SI NECESITAMOS MÁS DE 8 HAY QUE CAMBIAR TIPO A INT
byte estaoLeds=0;

struct {
      byte numeroLed;
      int pin;
} leds [] = {
      {3, 41}, {4, 43}, {5, 45}, {7, 47}, {8, 49}, {9, 51}, {10, 53}
};

const byte totalLeds = sizeof(leds)/sizeof(leds[0]);

void setup()
{
      lcd.begin(16, 2);           // Fijamos el numero de caracteres y filas
      lcd.clear();
      lcd.print("    PROBADOR ");  // Aqui va la primera linea con mensaje en espera
      lcd.setCursor(0, 1);    // Ponte en la linea de abajo 1, posicion 5
      lcd.print("   DE MONEDAS "); // Aqui va la segunda linea con mensaje en espera
      delay(2000);
      lcd.clear();

      for(int i=0; i<totalLeds; i++){
            pinMode(leds[i].pin, INPUT);   
      }
}

void loop()
{
      byte nuevoEstadoLeds=0;
      for(int i=0; i<totalLeds; i++){
            // Si el led está en HIGH, establecemos el bit correspondiente en nuevoEstado
            if (digitalRead(leds[i].pin)) {
                  bitSet(nuevoEstadoLeds, i);
            }
      }

      // Si ha cambiado algún bit, refrescamos la pantalla
      if (estaoLeds != nuevoEstadoLeds) {
            estaoLeds = nuevoEstadoLeds;
            refrescaPantalla();
      }
}

void refrescaPantalla(void)
{
      lcd.setCursor(0, 0);
      lcd.print(" SALIDAS ");
      for(int i=0; i<totalLeds; i++){
            if(bitRead(estaoLeds, i))
                  lcd.print( leds[i].numeroLed);
            else
                  lcd.print(" "); 
      }
      lcd.setCursor(0, 1);
      lcd.print("    VALOR ");
      lcd.print(estaoLeds);
      delay(1000);
}

Prueba y comenta.
Saludos.