#include <Wire.h>

#define MCP3428_ADDRESS 0x68 // Adresse I2C du MCP3428
#define VREF 3.3 // Tension de référence en volts

void setup() {
  Wire.begin();
  Serial.begin(9600);
  
  // Configuration du MCP3428
  Wire.beginTransmission(MCP3428_ADDRESS);
  Wire.write(0x10); // Configurer en mode continu, 16 bits de résolution
  byte result = Wire.endTransmission();
  
  if (result != 0) {
    Serial.println("Erreur lors de la configuration du MCP3428");
    while (1); // Arrêt du programme en cas d'erreur
  }
}

void loop() {
  // Lecture des données des 4 canaux
  for (int i = 0; i < 4; i++) {
    Wire.beginTransmission(MCP3428_ADDRESS);
    Wire.write(0x80 | (i << 5)); // Sélectionner le canal et lancer une conversion
    byte result = Wire.endTransmission();
    
    if (result != 0) {
      Serial.print("Erreur lors de la lecture du canal ");
      Serial.println(i + 1);
      continue; // Passer au canal suivant en cas d'erreur
    }

    delay(100); // Attendre la fin de la conversion (ajustez cette valeur en fonction de la vitesse de conversion configurée)

    Wire.requestFrom(MCP3428_ADDRESS, 3); // Lecture des 3 octets de données
    byte config = Wire.read();
    byte byte2 = Wire.read();
    byte byte1 = Wire.read();

    int value = ((byte2 & 0x0F) << 8) | byte1; // Calcul de la valeur analogique

    // Conversion en tension
    float voltage = (value * VREF) / 32767.0;

    Serial.print("Canal ");
    Serial.print(i + 1);
    Serial.print(": ");
    Serial.print(value);
    Serial.print(" (");
    Serial.print(voltage, 4);
    Serial.println(" V)");
  }

  delay(1000); // Attendre 1 seconde avant de lire à nouveau les données
}
