long i=0;   // variable pour la durée de la charge en us (10-6 s).  
int k=100;  // variable pour la durée de charge.  
long somi=0;// variable pour la moyenne des temps tau.
int n=0;    // nombre de mesures par tau moyen.

void setup() {
  pinMode(11,OUTPUT); // broche 11 pour la charge et la décharge. 
  Serial.begin(9600); // vitesse des données dans le port série.
}

void loop() {
  digitalWrite(11,LOW);   // décharge du capteur capacitif. 
  while(analogRead(A0)>1){ /*le capteur se décharge...*/ }   
  digitalWrite(11,HIGH);  // charge du capteur capacitif.  
  delayMicroseconds(i);   // durée de la charge du capteur. 
  if(analogRead(A0)<647){ // test uc<0,632*E ? 
    i=i+k;         // si oui alors on augmente la durée de charge de k us.
    }          
  else if(k==100){ // si non alors on diminue la durée de charge de      
    i=i-k;         // k=100 us pour approcher la durée de charge                    
    k=10;          // à k=10 us près.
  }
  else if(k==10){  // si uc>=0,632*E et si k=10 us alors on on diminue la      
    i=i-10;        // durée de charge de k=10 us pour approcher la durée          
    k=1;           // de charge à la microseconde près.
    if(i<0)i=0;    // tau ne peut pas être négatif, au minimum nul.
  }
  else{                 // la mesure de tau de n°n est stockée. 
    n++;                // on passe à la mesure suivante n°n+1.    
    somi=somi+i;        // on fait la somme des mesures de tau.                     
    Serial.print(i); Serial.print("/"); // affiche les valeurs mesurées.     
    i=0; k=100;  
    if(n==20){// affichage de la moyenne des temps caractéristiques. 
      Serial.println(); Serial.print("Moyenne des 20 valeurs : tmoy=");      
      Serial.print(somi/n); Serial.println(" us");                    
      /* ......      Ecrire ici les lignes      ......  
       * ......      de code pour afficher      ......
       * ......    le volume mesuré, calculé    ......
       * ......    à partir du modèle obtenu    ......  
       * ......    avec le tableur grapheur     ......*/  
      somi=0; n=0;             // réinitialisation des variables. 
      delay(2000);             // pause de 2s pour la lecture.                
    }
  } 
}
