/* Moteur Stirling - Mesure de la pression et de l'angle de rotation de la roue d'inertie Hypothèse : la fréquence des mesures est supérieure à la fréquence de rotation, i.e. tous les changements d'état des fourches optiques sont détectés. */ #define capteurPression A0 // Capteur de pression sur la broche A0 #define fourche1 A1 // Fourche optique n°1 sur la broche A1 #define fourche2 A2 // Fourche optique n°2 sur la broche A2 (détection PMH) #define sepCol ";" // Séparateur de colonnes -> identique dans pgm python int compteur1 = 0; // Compteur fourche optique n°1 (permet de calculer le volume) int compteur2 = 0; // Compteur fourche optique n°2 (nombre de passages par le PMH) int etatFourche1; // Etat de la fourche optique n°1 int etatFourche2; // Etat de la fourche optique n°2 int memoire1 = LOW; // Mémoire de l'état de la fourche optique n°1 int memoire2 = LOW; // Mémoire de l'état de la fourche optique n°2 unsigned long t; // Instant de mesure int cpt2Max = 21; // Nbre de tours à enregistrer (nombre de lignes à lire par python) void setup() { Serial.begin(115200); //pinMode(capteurPression,INPUT); // Configure la broche A0 en lecture (INPUT) pinMode(fourche1,INPUT); // Configure la broche de la fourche n°1 en lecture pinMode(fourche2,INPUT); // Configure la brocje de la fourche n°2 en lecture while (!Serial) {;} // Ne rien faire tant que port série non disponible } void loop() { while (compteur2 < cpt2Max) { // Détection du passage de la fenêtre du PMH devant la fourche optique n°2 etatFourche2 = digitalRead(fourche2); // Lecture de l'état de la fourche n°2 // Si état fourche 2 différent de état enregistré ET état "haut" (faisceau détecté) if((etatFourche2 != memoire2) && (etatFourche2 == HIGH)) { compteur2++; // On incrémente le compteur2 (nbre de passages par le PMH) compteur1 = 0; // On remet le compteur1 à zero (angle dans [0, 2*pi]) } // Détection du passage d'une des 50 fenêtres devant la fourche optique n°1 etatFourche1 = digitalRead(fourche1); // Lecture de l'état de la fourche optique n°1 // Si état fourche 1 différent de état enregistré ET état "haut" (faisceau détecté) // La condition compteur2 > 0 permet de démarrer la transmission sur un PMH if((etatFourche1 != memoire1) && (etatFourche1 == HIGH) && (compteur2 > 0)) { compteur1++; // On incrémente le compteur1 t = micros(); // Instant de mesure en µs // Affichage des quadruplets de valeurs de compteur1, compteur2, pression, t Serial.print(compteur1); Serial.print(sepCol); Serial.print(compteur2); Serial.print(sepCol); Serial.print(analogRead(capteurPression)); Serial.print(sepCol); Serial.println(t); } // Mémorisation des états pour détecter les changements à la lecture suivante memoire1 = etatFourche1; memoire2 = etatFourche2; } Serial.println("Stop"); while (true) {;} }