/*programe arduino qui :
affiche "mettre la sonde dans la solution 6.86"
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 9.18"
qui attend un entrée de l'utilisateur,
récupere une valeur en I2C adress 0x45 stocker dans une variable Y2

calcul la droite d'equation de la courbe avec X1 = 6.86 X2 = 9.18 et les variable Y1 et Y2*/

#include "MCP3428.h"

float a, b;                // Coefficients de la droite

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


/*
fonction arduino calibration qui :
 demande a l'utilisateur Mettre la sonde dans la solution 4.01 vient lire grace a la fonction lecture(0) une Ref et avec lecture(1) - Ref = Y0
 demande a l'utilisateur Mettre la sonde dans la solution 6.86 vient lire grace a la fonction lecture(0) une Ref et avec lecture(1) - Ref = Y1
 demande a l'utilisateur Mettre la sonde dans la solution 9.18 vient lire grace a la fonction lecture(0) une Ref et avec lecture(1) - Ref = Y2
 
 et calcul la droite de la courbe avec Y0,Y1,Y2 et X0=4.01, X1=6.86, X2=9.18
 
 */
void Calibration() {
  float X0 = 4.01;  // Solution 4.01
  float X1 = 6.86;  // Solution 6.86
  float X2 = 9.18;  // Solution 9.18

  float Y0, Y1, Y2;
  float Ref;

  // Étape 1: Mettre la sonde dans la solution 4.01
  Serial.println("Mettez la sonde dans la solution 4.01");
  Serial.println("Appuyez sur une touche pour continuer...");
  while (!Serial.available()) {
    // Attente de l'entrée utilisateur
  }
  Serial.read();  // Lecture de l'entrée utilisateur pour la vider

  // Lecture de la référence
  Ref = lecture(0);
  Y0 = lecture(1) - Ref;

  // Étape 2: Mettre la sonde dans la solution 6.86
  Serial.println("Mettez la sonde dans la solution 6.86");
  Serial.println("Appuyez sur une touche pour continuer...");
  while (!Serial.available()) {
    // Attente de l'entrée utilisateur
  }
  Serial.read();  // Lecture de l'entrée utilisateur pour la vider

  // Lecture de la référence
  Ref = lecture(0);
  Y1 = lecture(1) - Ref;

  // Étape 3: Mettre la sonde dans la solution 9.18
  Serial.println("Mettez la sonde dans la solution 9.18");
  Serial.println("Appuyez sur une touche pour continuer...");
  while (!Serial.available()) {
    // Attente de l'entrée utilisateur
  }
  Serial.read();  // Lecture de l'entrée utilisateur pour la vider

  // Lecture de la référence
  Ref = lecture(0);
  Y2 = lecture(1) - Ref;

  // Calcul des coefficients de la droite de la courbe
  float denominator = (X1 - X0) * (X2 - X0) * (X2 - X1);
  a = ((Y2 - Y0) * (X1 - X0) - (Y1 - Y0) * (X2 - X0)) / denominator;
  b = (Y1 - Y0 - a * (X1 - X0)) / (X1 - X0);
  
  Serial.print("a : ");
  Serial.print(a);
  Serial.print("b : ");
  Serial.println(b);
}


void loop(){
    
    
    float Ref = lecture(0);
    float VPh = lecture(1)-Ref;
    
    float PH =(VPh-b) /a;
    
  Serial.print("Vph : ");
  Serial.print(VPh, 6);
  Serial.print(" PH : ");
  Serial.println(PH);
    
    
    
}