// Déclaration des constantes et variables

const int PinUC = 0;
const int PinButton = 12;
const int PinAlimC = 2;

int ValPinUC = 0;
float UC = 0.0;
unsigned long t0; 
float dt;  

int ValButton = 0;
int OldValButton = 0;
int State = 0;
int OldState = 0;


// Déclaration de fonctions

void charge(){
  digitalWrite(PinAlimC, HIGH);
  Serial.println("Charge du condensateur");
  while (analogRead(PinUC) < 4.99) {   
    delay(200);
    }
  Serial.println("Condensateur charge");
}


// Initialisation des entrées et sorties

void setup() {
  Serial.begin(9600);
  pinMode(PinButton, INPUT);
  pinMode(PinAlimC, OUTPUT);   
  charge(); 
  Serial.println("Appuyez sur le bouton poussoir pour commencer les mesures.");
}


// Fonction principale en boucle

void loop() {
  ValButton = digitalRead(PinButton);
delay(10);

if ((ValButton == HIGH)&&(OldValButton == LOW)) 
  {
  State=1-State;
  }
OldValButton = ValButton;

if (State==1) 
  {
  if (OldState == 0)
  {
   Serial.println("Decharge du condensateur en cours.");
   Serial.println("");
   Serial.println ("Temps (S);Uc (V):");
   t0 = micros();
   digitalWrite(PinAlimC, 0);
   OldState=1;
  }
  ValPinUC = analogRead(PinUC);
  UC = (ValPinUC/1023.0)*5.0;
  dt =  (micros() - t0)* 1e-6;
  Serial.print(dt,2);
  Serial.print(";");
  Serial.println(UC,2);
  
  delay(100);
  }
  else
  {
    if (OldState == 1){
    Serial.println("Fin des mesures.");
    charge();
    OldState = 0;} 
  }   
}
