/*programe arduino qui :
affiche "mettre la sonde dans la solution 1"
qui attend un entrée de l'utilisateur,
récupere une valeur en I2C adress 0x45 stocker dans une variable Y1
affiche "mettre la sonde dans la solution 2"
qui attend un entrée de l'utilisateur,
récupere une valeur en I2C adress 0x45 stocker dans une variable Y2
affiche "mettre la sonde dans la solution 3"
qui attend un entrée de l'utilisateur,
récupere une valeur en I2C adress 0x45 stocker dans une variable Y3

calcul la droite d'equation de la courbe avec X1 = 1025 X2 =1020  X3=1030 et les variable Y1 et Y2 et Y3*/

#include <Wire.h>

const int I2C_ADDR = 0x45;  // Adresse I2C du périphérique

float X1 = 1025;
float X2 = 1020;
float X3 = 1030;

float Y1, Y2, Y3;
float m, b;  // Coefficients de la droite d'équation Y = mX + b

void setup() {
  Serial.begin(9600);  // Initialisation de la communication série
  Wire.begin();        // Initialisation de la bibliothèque Wire (I2C)
}

void loop() {
  // Afficher le message et attendre une entrée de l'utilisateur
  Serial.println("Mettre la sonde dans la solution 1");
  while (!Serial.available()) {
    // Attendre tant qu'aucune entrée n'est reçue
  }
  Serial.read();  // Lire et ignorer l'entrée

  // Récupérer la valeur en I2C
  Wire.requestFrom(I2C_ADDR, sizeof(float));
  while (Wire.available() < sizeof(float)) {
    // Attendre tant que les données ne sont pas disponibles
  }
  Wire.readBytes((char*)&Y1, sizeof(float));

  // Afficher le message et attendre une entrée de l'utilisateur
  Serial.println("Mettre la sonde dans la solution 2");
  while (!Serial.available()) {
    // Attendre tant qu'aucune entrée n'est reçue
  }
  Serial.read();  // Lire et ignorer l'entrée

  // Récupérer la valeur en I2C
  Wire.requestFrom(I2C_ADDR, sizeof(float));
  while (Wire.available() < sizeof(float)) {
    // Attendre tant que les données ne sont pas disponibles
  }
  Wire.readBytes((char*)&Y2, sizeof(float));

  // Afficher le message et attendre une entrée de l'utilisateur
  Serial.println("Mettre la sonde dans la solution 3");
  while (!Serial.available()) {
    // Attendre tant qu'aucune entrée n'est reçue
  }
  Serial.read();  // Lire et ignorer l'entrée

  // Récupérer la valeur en I2C
  Wire.requestFrom(I2C_ADDR, sizeof(float));
  while (Wire.available() < sizeof(float)) {
    // Attendre tant que les données ne sont pas disponibles
  }
  Wire.readBytes((char*)&Y3, sizeof(float));

  // Calculer la droite d'équation Y = mX + b
  float denom = (X1 - X2) * (X1 - X3) * (X2 - X3);
  m = (Y1 * (X2 - X3) - Y2 * (X1 - X3) + Y3 * (X1 - X2)) / denom;
  b = (Y1 * (X2 * X2 - X3 * X3) - Y2 * (X1 * X1 - X3 * X3) + Y3 * (X1 * X1 - X2 * X2)) / denom;

  // Afficher les résultats
  Serial.print("Droite d'équation : Y = ");
  Serial.print(m);
  Serial.print("X + ");
  Serial.println(b);

  // Attendre un certain délai avant la prochaine itération
  delay(1000);
}

