/* THUREL TIM
Programme de test pour 8 thermistance
Liste des defines */
#define res_mesure 220 // valeur de la résistance de mesure de courant
#define v_alim 5000 // Tention d'alim en mV
#define beta 4050 // Beta de la thermistance
#define r_therm 470 // valeur de la thermistance a 25°C

float VR[8] = {0}; // Tableau des tention des thermistances
float R[8] = {0}; // Tableau des résistance des thermistances
float T[8] = {0}; // Tableau des température des thermistances
int analogPin[8] = {A0,A1,A2,A3,A4,A5,A6,A7}; // Pin analog des points de mesure
float Vi; //Tention de la résistance de mesure
float i; // courant du pont

void setup() {
  Serial.begin(9600); // Port série a 9600 bauts
}

void loop() {
  i = mesureI(A0); // mesure du courant
  Vi = mesureV(A0); // mesure de ka tention du la résistance de masure
  Serial.println(Vi); // envoie du courant dans le terminal serie
  afficheT(); // affiche les température
  delay(500);  // attend 500 ms
}
void afficheT(){ // Procedure qui affiche la température
  temp(); // mesure de la température
  for (int j = 0; j < 8; ++j) // Affiche les température 
  {
    Serial.print("T");
    Serial.print(j+1);
    Serial.print(" = ");
    Serial.print(T[j]);
    Serial.print(" C ");
  }
  Serial.println(""); // fait un retour à la ligne
}

void volt(){ // mesure la tention des thermistances
  for (int j = 1; j < 7; ++j) // fait la mesure de la résistance 1 à 6
  {
    VR[j] = mesureV(analogPin[j+1]) - mesureV(analogPin[j]) ;
  }
  VR[0] = mesureV(A1) - Vi; // fait la mesure de la résistance 0
  VR[7] = v_alim - mesureV(A7) ; // fait la mesure de la résistance 7
}

void res(){ // calcul la valeur de la resistance
  volt(); // mesure de la tention des thermistances
  for (int j = 0; j < 8; ++j) // fait une loi d'Ohm pour calculer les 8 valeur des résistance
  {
    R[j] = VR[j] / i;
  }
}

void temp(){  // calcul de la température
  res();
  for (int j = 0; j < 8; ++j) // utilise la formule de calcul pour calculer les 8 valeur de températures
  {
    T[j] = ((298.15*beta)/(beta+298.15*log(R[j]/r_therm)))- 273.15;
  }
}

float mesureI(int pin){ // retourne la valeur du courant en mA
  int mes = analogRead(pin);
  float v = map(mes, 0,1023, 0, v_alim);
  return (v/res_mesure);
}

float mesureV(int pin){ // retourne la valeur de la tention en mV
  int mes = analogRead(pin);
  return map(mes, 0,1023, 0, v_alim);
}
