Boitier diagnostic auto youngtimer

Bonsoir à tous,

Désolé pour ce gros temps de latence : fêtes de fin d'année à préparer, surcharge au travail, bref que de bonnes raisons pour avoir mis du temps.
Je me doute que de votre côté, il en est de même et je ne m'attends pas à une réponse immédiate (l'électronique, c'est bien, la famille, c'est mieux).

Je profite de ce post pour vous souhaiter, à tous, de Joyeuses Fêtes de fin d'année.

Concernant le test avec un seul MUX, en voici le schéma en pièce jointe, ainsi que le code :

// 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() {
  Serial.print("Valeur du bouton sur A0 en valeur 0-1023 : ");
  Serial.print(analogRead(pinMUX1_Analog));
  Serial.print(" Conversion en tension : ");
  Serial.print((analogRead(pinMUX1_Analog) * fctAVRVoltageVIN()) / 1023);
  Serial.print(" avec une tension sur A0 de : ");
  Serial.println(fctAVRVoltageVIN());
  delay(500);
}

Le souci que j'ai : seul l'appui sur le bouton 1 renvoie bien une valeur modifiée sur A0 mais les autres boutons, aucune réaction :frowning: