diff --git a/src/main.cpp b/src/main.cpp index 6dba57b..cbe20e4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,14 +18,14 @@ #define PCNT_TEST_CHANNEL PCNT_CHANNEL_0 #define PCNT_INPUT_SIG_IO GPIO_NUM_15 // Pulse Input GPIO #define PCNT_INPUT_CTRL_IO GPIO_NUM_2 // Control GPIO HIGH=count up, LOW=count down -#define PCNT_H_LIM_VAL 10000 //valeur max du compteur_minuteur +#define PCNT_H_LIM_VAL 10000 //valeur max du depart_compteur_minuteur #define PCNT_L_LIM_VAL -10 //valeur mini du compteur -bool sem_compteur; // sémaphore pour le compteur +bool sem_scribe; // sémaphore pour le compteur int16_t count = 0; // variable de compteur int vRotReel; // vitesse réelle mesurée du moteur -unsigned long compteur_minuteur = 0; // minuteur pour le déclenchement du compteur +unsigned long start_chrono_scribe= 0; // minuteur pour le déclenchement du compteur bool sema_compte_tour = false; // semaphore poour le compte tour -unsigned long compteur_compte_tour = 0; // minuteur pour le déclenchement du compte-tour +unsigned long depart_compte_tour = 0; // minuteur pour le déclenchement du compte-tour int refresh_compte_tour = 500; // durée entre deux mesures du compte-tour en ms int pptr = 2; //nombre de pulsations par tour d'hélice @@ -48,7 +48,7 @@ DateTime now{rtc.now()}; //////////////////////////////// /* DÉFINITIONS DE LA CARTE SD */ //////////////////////////////// -unsigned long freq_ecriture = 60000; // durée entre deux écritures sur la carte SD en micro secondes +unsigned long intervalle_d_ecriture = 60000; // durée entre deux écritures sur la carte SD en micro secondes char horodatage[12]; //création du tableau pour contenir l'horodatage char fichier[] = "/"; //tableau pour le nom de fichier @@ -174,12 +174,13 @@ void stop_compteur() { void compte_tour() { if (sema_compte_tour == false){ - compteur_compte_tour = millis(); + depart_compte_tour = millis(); sema_compte_tour = true; } - int offset = (millis() - compteur_compte_tour ); + int offset = (millis() - depart_compte_tour ); pcnt_get_counter_value(PCNT_UNIT_0, &count); if (offset >= refresh_compte_tour && sema_compte_tour == true && count >= 1){ + compteur_compte_tour = millis()- ; vRotReel = (60000*count/(pptr*offset)); //vitesse en tours par min (4 pulsations /tour, 2 montantes, 2 descendantes) Serial.println("count ="); Serial.println(count); @@ -188,7 +189,7 @@ void compte_tour() { Serial.println("vRrotReel="); Serial.println(vRotReel); gaz_moteur();// ajustement des gaz en fonction de la vitesse mesurée - sema_compte_tour = false; + } } @@ -324,11 +325,14 @@ void sd_init() { } void scribe_sd (){ - if ( sem_compteur == false ) { - compteur_minuteur = millis(); - sem_compteur = true; + if ( sem_scribe == false ) { + sem_scribe = true; + pcnt_counter_pause(PCNT_TEST_UNIT); + pcnt_counter_clear(PCNT_TEST_UNIT); + pcnt_counter_resume(PCNT_TEST_UNIT); + start_chrono_scribe = millis(); } - if ( sem_compteur == true && millis() - compteur_minuteur >= freq_ecriture ){ + if ( sem_scribe == true && millis() - start_chrono_scribe >= intervalle_d_ecriture ){ char timestamp[] = "YY-MM-DD-hh:mm:ss"; char *horodatage = now.toString(timestamp); char buffer[64]; @@ -338,7 +342,8 @@ void scribe_sd (){ appendFile(SD, fichier, buffer); appendFile(SD, fichier, "\n" ); Serial.println(vRotReel); - compteur_minuteur = 0; + start_chrono_scribe= 0; + } } @@ -475,7 +480,7 @@ void setup() { sd_init (); // initialisation de la carte SD sem_wifi = false; // initialisation du sémaphore /* compteur de pulsations */ - sem_compteur = false; // initialisation du sémaphore + sem_scribe = false; // initialisation du sémaphore //pinMode(pulsePin,INPUT_PULLUP); start_compteur(); start_moteur(); // moteur