Boitier diagnostic auto youngtimer

Je pense avoir compris ce qui clochait.
J'ai modifié le code (notamment la partie void loop()) :

// Déclaration des variables
const byte
pinMUX1_A = 2,          // MUX - Broche A
pinMUX1_B = 3,          // MUX - Broche B
pinMUX1_C = 4,          // MUX - Broche C
pinMUX1_D = 5,          // MUX - Broche D
pinMUX1_INH = 6,        // MUX - Broche pilotant état INH via transistor
pinMUX1_Analog = A0,    // MUX - Broche analogique
pinSensorVIN = A1;      // VIN - Broche analogique

byte
countChannel = 0;       // Compteur du numéro de broche

const float
coeffDivBridgeVIN = 4.3;  // Coefficient diviseur du pont de résistance pour tension VIN => Coef = 1 / (R2 / (R1 + R2))

void setup() {
  // Initialisation port console
  Serial.begin(9600);

  // Activation du pull-up sur la broche A0
  //pinMode(pinMUX1_Analog, INPUT_PULLUP);

  // Mode des broches 4051
  pinMode(pinMUX1_A, OUTPUT);
  pinMode(pinMUX1_B, OUTPUT);
  pinMode(pinMUX1_C, OUTPUT);
  pinMode(pinMUX1_D, OUTPUT);
  pinMode(pinMUX1_INH, OUTPUT);

  // Mise en état LOW des broches d'adresse
  digitalWrite(pinMUX1_A, LOW);
  digitalWrite(pinMUX1_B, LOW);
  digitalWrite(pinMUX1_C, LOW);
  digitalWrite(pinMUX1_D, LOW);
  digitalWrite(pinMUX1_INH, LOW);
}

// ----- FONCTIONS ----- //
int fctReadAnalogMux(byte channel) {
  digitalWrite(pinMUX1_A, bitRead(channel, 0));
  digitalWrite(pinMUX1_B, bitRead(channel, 1));
  digitalWrite(pinMUX1_C, bitRead(channel, 2));
  digitalWrite(pinMUX1_D, bitRead(channel, 3));
  //digitalWrite(pinMUX1_INH, bitRead(channel, 4));
  delay (20);
  return analogRead(pinMUX1_Analog);
}

unsigned int fctReadAVRVoltage(void) { /** Mesure la référence interne à 1.1 volts */
  /* Elimine toutes charges résiduelles */
  #if defined(__AVR_ATmega328P__)
  ADMUX = 0x4F;
  #elif defined(__AVR_ATmega2560__)
  ADCSRB &= ~(1 << MUX5);
  ADMUX = 0x5F;
  #elif defined(__AVR_ATmega32U4__)
  ADCSRB &= ~(1 << MUX5);
  ADMUX = 0x5F;
  #endif
  delayMicroseconds(5);
  
  /* Sélectionne la référence interne à 1.1 volts comme point de mesure, avec comme limite haute VCC */
  #if defined(__AVR_ATmega328P__)
  ADMUX = 0x4E;
  #elif defined(__AVR_ATmega2560__)
  ADCSRB &= ~(1 << MUX5);
  ADMUX = 0x5E;
  #elif defined(__AVR_ATmega32U4__)
  ADCSRB &= ~(1 << MUX5);
  ADMUX = 0x5E;
  #endif
  delayMicroseconds(200);

  /* Active le convertisseur analogique -> numérique */
  ADCSRA |= (1 << ADEN);
  
  /* Lance une conversion analogique -> numérique */
  ADCSRA |= (1 << ADSC);
  
  /* Attend la fin de la conversion */
  while(ADCSRA & (1 << ADSC));
  
  /* Récupère le résultat de la conversion */
  return ADCL | (ADCH << 8);
}

float fctAVRVoltageVIN() {
  /* Mesure la tension en VIN et la référence interne à 1.1 volts */
  unsigned int raw_vin = analogRead(pinSensorVIN);
  unsigned int raw_ref = fctReadAVRVoltage();

  /* Calcul de la tension réel avec un produit en croix */
  float AVRVoltageVIN = ((raw_vin * 1.1) / raw_ref) * coeffDivBridgeVIN;
  return AVRVoltageVIN;
}


void loop() {
  for(countChannel=0; countChannel<=15; countChannel++) {
    Serial.print("Valeur du bouton sur A0 en valeur 0-1023 : ");
    Serial.print(fctReadAnalogMux(countChannel));
    Serial.print(" Conversion en tension : ");
    Serial.print((analogRead(pinMUX1_Analog) * fctAVRVoltageVIN()) / 1023);
    Serial.print(" avec une tension sur A0 de : ");
    Serial.println(fctAVRVoltageVIN());
    delay(100); 
  }
}

Et là pour chacun des boutons, j'obtiens à l'activation de chacun d'entre eux la même valeur (comprise entre 18 et 20 sur l'échelle de 0 à 1023). Ceci sans le PULLUP activé ni résistance sur les boutons, juste un cablage vers la masse pour chacun d'eux.
Avec le PULLUP activé, les valeurs sont comprises entre 40 et 41.

Je viens de faire l'essai en connectant le second MUX et le code suivant :

// Déclaration des variables
const byte
pinMUX1_A = 2,          // MUX - Broche A
pinMUX1_B = 3,          // MUX - Broche B
pinMUX1_C = 4,          // MUX - Broche C
pinMUX1_D = 5,          // MUX - Broche D
pinMUX1_INH = 6,        // MUX - Broche pilotant état INH via transistor
pinMUX1_Analog = A0,    // MUX - Broche analogique
pinSensorVIN = A1;      // VIN - Broche analogique

byte
countChannel = 0;       // Compteur du numéro de broche

const float
coeffDivBridgeVIN = 4.3;  // Coefficient diviseur du pont de résistance pour tension VIN => Coef = 1 / (R2 / (R1 + R2))

void setup() {
  // Initialisation port console
  Serial.begin(9600);

  // Activation du pull-up sur la broche A0
  //pinMode(pinMUX1_Analog, INPUT_PULLUP);

  // Mode des broches 4051
  pinMode(pinMUX1_A, OUTPUT);
  pinMode(pinMUX1_B, OUTPUT);
  pinMode(pinMUX1_C, OUTPUT);
  pinMode(pinMUX1_D, OUTPUT);
  pinMode(pinMUX1_INH, OUTPUT);

  // Mise en état LOW des broches d'adresse
  digitalWrite(pinMUX1_A, LOW);
  digitalWrite(pinMUX1_B, LOW);
  digitalWrite(pinMUX1_C, LOW);
  digitalWrite(pinMUX1_D, LOW);
  digitalWrite(pinMUX1_INH, LOW);
}

// ----- FONCTIONS ----- //
int fctReadAnalogMux(byte channel) {
  digitalWrite(pinMUX1_A, bitRead(channel, 0));
  digitalWrite(pinMUX1_B, bitRead(channel, 1));
  digitalWrite(pinMUX1_C, bitRead(channel, 2));
  digitalWrite(pinMUX1_D, bitRead(channel, 3));
  digitalWrite(pinMUX1_INH, bitRead(channel, 4));
  delay (20);
  return analogRead(pinMUX1_Analog);
}

unsigned int fctReadAVRVoltage(void) { /** Mesure la référence interne à 1.1 volts */
  /* Elimine toutes charges résiduelles */
  #if defined(__AVR_ATmega328P__)
  ADMUX = 0x4F;
  #elif defined(__AVR_ATmega2560__)
  ADCSRB &= ~(1 << MUX5);
  ADMUX = 0x5F;
  #elif defined(__AVR_ATmega32U4__)
  ADCSRB &= ~(1 << MUX5);
  ADMUX = 0x5F;
  #endif
  delayMicroseconds(5);
  
  /* Sélectionne la référence interne à 1.1 volts comme point de mesure, avec comme limite haute VCC */
  #if defined(__AVR_ATmega328P__)
  ADMUX = 0x4E;
  #elif defined(__AVR_ATmega2560__)
  ADCSRB &= ~(1 << MUX5);
  ADMUX = 0x5E;
  #elif defined(__AVR_ATmega32U4__)
  ADCSRB &= ~(1 << MUX5);
  ADMUX = 0x5E;
  #endif
  delayMicroseconds(200);

  /* Active le convertisseur analogique -> numérique */
  ADCSRA |= (1 << ADEN);
  
  /* Lance une conversion analogique -> numérique */
  ADCSRA |= (1 << ADSC);
  
  /* Attend la fin de la conversion */
  while(ADCSRA & (1 << ADSC));
  
  /* Récupère le résultat de la conversion */
  return ADCL | (ADCH << 8);
}

float fctAVRVoltageVIN() {
  /* Mesure la tension en VIN et la référence interne à 1.1 volts */
  unsigned int raw_vin = analogRead(pinSensorVIN);
  unsigned int raw_ref = fctReadAVRVoltage();

  /* Calcul de la tension réel avec un produit en croix */
  float AVRVoltageVIN = ((raw_vin * 1.1) / raw_ref) * coeffDivBridgeVIN;
  return AVRVoltageVIN;
}


void loop() {
  for(countChannel=0; countChannel<=31; countChannel++) {
    Serial.print("Valeur du bouton sur A0 en valeur 0-1023 : ");
    Serial.print(fctReadAnalogMux(countChannel));
    Serial.print(" Conversion en tension : ");
    Serial.print((analogRead(pinMUX1_Analog) * fctAVRVoltageVIN()) / 1023);
    Serial.print(" avec une tension sur A0 de : ");
    Serial.println(fctAVRVoltageVIN());
    delay(100); 
  }
}

Avec ou sans PULLUP, les résultats sont identiques.

Je n'ai pas donné les valeurs des tensions, avec un ou deux MUX, les résultats sont les mêmes.