/* Ce sketch permet de réaliser la charge d'un condensateur. On décharge dans un premier temps de le condensateur pour que la tension à ses bornes soit presque nulle On récupère les données depuis le port série pour les afficher dans un fichier csv. */ long previousMillis = 0; long interval = 5; // durée de millisecondes entre chaque mesure unsigned long topdepart = 0; //on initialise un variable topdepart à 0 ; float mesureA0; //variable tension qui sera lue void setup() { pinMode(8, OUTPUT); // alimentation du condensateur Serial.begin(9600); //vitesse de communication avec arduino mesureA0 = analogRead(A0); // on lit la tension sur la sortie analogique A0 (codée par un nombre entier compris entre 0 et 1023) if (mesureA0 > 3) { Serial.println("décharge préalable du condensateur... patienter"); // on indique qu'on décharge au préalable le condensateur. while (mesureA0 > 3) { digitalWrite(8, LOW); delay(500); mesureA0 = analogRead(A0); // on lit la tension sur la sortie analogique A0 (codée par un nombre entier compris entre 0 et 1023) toutes les 500 ms } } Serial.println(); Serial.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"); Serial.println(); Serial.println("condensateur déchargé"); // on indique que le condensateur est déchargé Serial.println("la charge va démarrer, l'arret sera automatique quand le condensateur sera chargé"); Serial.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"); delay(2000); Serial.println(); Serial.print("t (ms)"); Serial.print("\t"); Serial.println("uC (V)"); topdepart = millis() ; // le top départ et initialié sur la durée millis() du timer interne de l'arduino digitalWrite(8, HIGH); // on met en marche l'alimentation // on alimente le circuit pour charger le condensateur } void loop() { unsigned long currentMillis = millis(); // on crée une variable currentMillis qui correspond à millis() dans cette boucle mesureA0 = analogRead(A0); if (currentMillis - previousMillis >= interval) { // lorsque la durée courante - la durée précédente est supérieure à 10 ms (interval) previousMillis = currentMillis; // l'instant previousMillis devient CurrentMillis (réinitialisation du timer) if (mesureA0 < 1020) { // si cette tension est inférieur à 1020 sur 1023 (non complètement chargé float tension_uC = mesureA0 * 5.0 / 1023.0; // tension analogique calculée //Serial.print("\t"); // on sépare la donnée avec une tabulation (permettra de faire un csv par copier coller) Serial.print(millis() - topdepart); // on écrit la durée millis-topdepart (première valeur à 0) Serial.print("\t"); // on sépare la donnée avec une tabulation (permettra de faire un csv par copier coller) Serial.println(tension_uC); } } }