corrections des bugs #002 #003 #005

This commit is contained in:
pgp 2021-01-21 14:31:53 +01:00
parent e7e375ec74
commit d8801898d6

View file

@ -20,6 +20,8 @@
bool sem_compteur; // sémaphore pour le compteur bool sem_compteur; // sémaphore pour le compteur
int16_t count = 0; // variable de compteur int16_t count = 0; // variable de compteur
int vRotReel; // vitesse réelle mesurée du moteur int vRotReel; // vitesse réelle mesurée du moteur
unsigned long compteur_minuteur = 0; // minuteur pour le déclenchement du compteur
int refresh_compte_tour = 500; // durée entre deux mesures du compte-tour en ms
///////////////////////////////// /////////////////////////////////
/*NUMÉRO DE SÉRIE DE L'APPAREIL*/ /*NUMÉRO DE SÉRIE DE L'APPAREIL*/
@ -30,6 +32,7 @@ int numero_capteur = 0001;
/* DÉFINITIONS DE LA RTC */ /* DÉFINITIONS DE LA RTC */
/////////////////////////// ///////////////////////////
RTC_DS3231 rtc; //déclaration de la rtc RTC_DS3231 rtc; //déclaration de la rtc
DateTime now{rtc.now()};
/////////////////////////// ///////////////////////////
/* DÉFINITIONS DE LA LED */ /* DÉFINITIONS DE LA LED */
@ -41,7 +44,7 @@ RTC_DS3231 rtc; //déclaration de la rtc
//////////////////////////////// ////////////////////////////////
unsigned long freq_ecriture = 60000; // durée entre deux écritures sur la carte SD en micro secondes unsigned long freq_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 horodatage[12]; //création du tableau pour contenir l'horodatage
char fileName[5]; //tableau pour le nom de fichier char fichier[] = "/"; //tableau pour le nom de fichier
////////////////////////////////// //////////////////////////////////
/* DÉFINITIONS DU DRIVER MOTEUR */ /* DÉFINITIONS DU DRIVER MOTEUR */
@ -60,7 +63,6 @@ ESP32PWM pwm; // Activation du pwm
int bouton_wifi = 2; // pin du bouton wifi int bouton_wifi = 2; // pin du bouton wifi
bool sem_wifi; //sémaphore du minuteur du bouton wifi bool sem_wifi; //sémaphore du minuteur du bouton wifi
unsigned long wifi_minuteur = 0; // minuteur pour l'appui long sur le bouton wifi unsigned long wifi_minuteur = 0; // minuteur pour l'appui long sur le bouton wifi
unsigned long compteur_minuteur = 0; // minuteur pour l'appui long sur le bouton wifi
bool etat_bouton_wifi; bool etat_bouton_wifi;
int tempo_bouton_wifi = 5000; //temps d'appui en millisecondes pour arrêter le capteur et passer en mode wifi int tempo_bouton_wifi = 5000; //temps d'appui en millisecondes pour arrêter le capteur et passer en mode wifi
@ -89,6 +91,38 @@ void errorCode(int codeNumber) {
} }
} }
/////////////////////////
/* FONCTIONS DU MOTEUR */
/////////////////////////
void start_moteur() {
ESP32PWM::allocateTimer(2);
delay(500);
moteur.setPeriodHertz(50);
moteur.attach(moteurPin, minUs, maxUs);
delay(15);
moteur.write(0); // envoi du 0 à l'ESC pour initialisation
delay(1500); // délai permettant au variateur de détecter le zero
moteur.write(pos); // vitesse initiale
}
void gaz_moteur() {
if (vRotVis > vRotReel) {
pos ++;
}
if (vRotReel > vRotVis) {
pos --;
}
moteur.write(pos);
}
void stop_moteur() {
moteur.write(0);
delay(1000);
moteur.detach();
}
/////////////////////////// ///////////////////////////
/* FONCTIONS DU COMPTEUR */ /* FONCTIONS DU COMPTEUR */
@ -131,47 +165,16 @@ void stop_compteur() {
} }
void compte_tour() { void compte_tour() {
if ( sem_compteur == false ) { int offset = (compteur_minuteur - millis());
compteur_minuteur = millis();
sem_compteur = true; if (offset >= refresh_compte_tour ){
} vRotReel = (pcnt_get_counter_value(PCNT_TEST_UNIT, &count)/offset * 60000); //vitesse en tours par min
if ( sem_compteur == true && compteur_minuteur - millis() >= freq_ecriture ){ gaz_moteur(); // ajustement des gaz en fonction de la vitesse mesurée
vRotReel = pcnt_get_counter_value(PCNT_TEST_UNIT, &count) * 60; //vitesse en tours par min Serial.println("vRotReel = ");
pcnt_counter_clear(PCNT_TEST_UNIT); Serial.println(vRotReel);
compteur_minuteur = millis();
sem_compteur = false;
} }
} }
/////////////////////////
/* FONCTIONS DU MOTEUR */
/////////////////////////
void start_moteur() {
ESP32PWM::allocateTimer(0);
moteur.setPeriodHertz(50);
moteur.attach(moteurPin, minUs, maxUs);
delay(15);
moteur.write(0); // envoi du 0 à l'ESC pour initialisation
delay(1500); // délai permettant au variateur de détecter le zero
moteur.write(pos); // vitesse initiale
}
void gaz_moteur() {
if (vRotVis > vRotReel) {
pos ++;
}
if (vRotReel > vRotVis) {
pos --;
}
moteur.write(pos);
}
void stop_moteur() {
moteur.write(0);
delay(1000);
moteur.detach();
}
///////////////////////// /////////////////////////
/// FONCTIONS SD CARD /// /// FONCTIONS SD CARD ///
@ -277,7 +280,6 @@ void testFileIO(fs::FS &fs, const char * path){
file.close(); file.close();
} }
void sd_init() { void sd_init() {
if(!SD.begin()){ if(!SD.begin()){
Serial.println("Card Mount Failed"); Serial.println("Card Mount Failed");
@ -291,35 +293,31 @@ void sd_init() {
errorCode(3); errorCode(3);
return; return;
} }
Serial.println("balise 01");
DateTime now = rtc.now(); //DateTime now{rtc.now()};//DateTime
fileName[0] = '/'; now = rtc.now();
fileName[1] = (now.month(),DEC); char date_format[] = "MM-DD-hh-mm";
fileName[2] = (now.day(),DEC); char *date = now.toString(date_format);
fileName[3] = (now.hour(),DEC); strcat(fichier,date);
fileName[4] = (now.minute(),DEC); char entete[] = "# fichier de data \n";
char entete[64] = "fichier de data"; writeFile(SD, fichier, entete);
writeFile(SD, fileName, entete);
} }
void scribe_sd (){ void scribe_sd (){
DateTime now = rtc.now(); if ( sem_compteur == false ) {
compteur_minuteur = millis();
sem_compteur = true;
}
if ( sem_compteur == true && compteur_minuteur - millis() >= freq_ecriture ){
char timestamp[] = "YY-MM-DD-hh:mm:ss";
char *horodatage = now.toString(timestamp);
char buffer[64]; char buffer[64];
snprintf(buffer, sizeof buffer, "%d", vRotReel); snprintf(buffer, sizeof buffer, "%d", vRotReel);
horodatage[0] = now.year(); appendFile(SD, fichier, horodatage);
horodatage[1] = '-'; appendFile(SD, fichier, " " );
horodatage[2] = now.month(); appendFile(SD, fichier, buffer);
horodatage[3] = '-'; appendFile(SD, fichier, "\n" );
horodatage[4] = now.day(); }
horodatage[5] = '-';
horodatage[6] = now.hour();
horodatage[7] = ':';
horodatage[8] = now.minute();
horodatage[9] = ':';
horodatage[10] = now.second();
horodatage[11] = ' ';
appendFile(SD, fileName, horodatage);
appendFile(SD, fileName, buffer);
} }
@ -335,14 +333,14 @@ void rtc_init() {
// ESP.restart(); // ESP.restart();
//while (1); //while (1);
} }
if (rtc.lostPower()) { /* if (rtc.lostPower()) {
Serial.println("Veuillez régler l'heure et vérifier la pile du module RTC!"); // ligne de debug à commenter en prod Serial.println("Veuillez régler l'heure et vérifier la pile du module RTC!"); // ligne de debug à commenter en prod
errorCode(2); errorCode(2);
} }*/
else else
{ {
DateTime now = rtc.now(); // //DateTime now = rtc.now(); //
Serial.println("mise à l'heure de l'esp, à partir de la rtc"); Serial.println("rtc OK");
} }
@ -447,23 +445,22 @@ void vigie_Wifi () {
void setup() { void setup() {
Serial.begin(9600); // serial just for feedback Serial.begin(9600); // serial just for feedback
delay(3000); delay(3000);
pinMode(LED,OUTPUT); // LED bouton wifi et erreurs
pinMode(bouton_wifi, INPUT); // bouton wifi
Serial.println("balise 0"); Serial.println("balise 0");
rtc_init(); // RTC rtc_init(); // RTC
sd_init (); // initialisation de la carte SD sd_init (); // initialisation de la carte SD
pinMode(bouton_wifi, INPUT); // bouton wifi
sem_wifi = false; // initialisation du sémaphore sem_wifi = false; // initialisation du sémaphore
pinMode(LED,OUTPUT); // LED bouton wifi et erreurs
start_moteur(); // moteur
/* compteur de pulsations */ /* compteur de pulsations */
sem_compteur = false; // initialisation du sémaphore sem_compteur = false; // initialisation du sémaphore
//pinMode(pulsePin,INPUT_PULLUP); //pinMode(pulsePin,INPUT_PULLUP);
start_compteur(); start_compteur();
start_moteur(); // moteur
} }
void loop (){ void loop (){
vigie_Wifi(); vigie_Wifi();
compte_tour(); compte_tour();
gaz_moteur();
scribe_sd(); scribe_sd();
} }