PRJ1401_LIDAR / Mbed 2 deprecated Nucleo_Une_Mesure

Dependencies:   PwmIn mbed

Revision:
5:7e152e2fe429
Parent:
3:e750507bf900
--- a/main.cpp	Tue Mar 12 16:09:11 2019 +0000
+++ b/main.cpp	Wed Apr 24 08:40:07 2019 +0000
@@ -8,20 +8,15 @@
 PwmOut servo(PB_5);
 PwmIn LidarI(PB_3);
 
-float mes = 0;
-int arret = 0, n = 0, i = 0;
-float A = 1.0f;
- 
-float boucleM(){
+
+void Mesure(float *pmes){
     wait_ms(40); //Laisser le moteur arriver à sa position
     trig = 1;
     trig=0;        // Déclenchement
-    wait_ms(10);  //Attendre que le signal du LIDAR soit clair pour le microcontroleur et pas parasité par la baisse du déclenchement
-    mes = LidarI.pulsewidth() / 10;  //Lecture du signal et enregistrement dans la variable mes
+    wait_ms(10);  //Attendre que le signal du LIDAR soit clair pour le microcontroleur et pas parasité par le front descendant du déclenchement
+    *pmes = LidarI.pulsewidth() / 10;  //Lecture du signal et enregistrement dans la variable "mes"
     trig = 1;  //Stop de la prise de mesure
-    pc.printf("Mesure : %f",mes); //Affichage de la mesure prise
-    //arret = !mybutton.read(); ------------------------------>Ne sert à rien de toute facon
-    return (mes); //Renvoi de la mesure
+    pc.printf("Mesure : %f",pmes); //Affichage de la mesure prise 
 }
 
 /*Procédure de rotation 
@@ -30,43 +25,56 @@
  
  }
 */
+
+int aireSegment (float t[],float angle,int i){
+    return (t[i - 1] * t[i] * sin(angle) ) / 2;
+}
  
  
 int main() {
-    float aireTotale = 0, aireTriangle = 0, angle;
-    float tabM[180];
-      
-    pc.printf("\nLancement du programme...\n");
-    pc.printf("%d\n\n",n);
+    // Déclarations des variables
+    float mes = 0;          //Variable qui contient les mesures 
+    float *pmes = &mes;     //Pointeur qui permettra d'accéder à la variable mesure en dehors du sous programme principale "main"
+   // int arret = 0
+    float aireTotale = 0, angle=1.0f,A = 1.0f;   // "aireTotale" permet de récupérer la valeur recherchée, on y ajoute l'aire de chaque segments à chaque calcul de ceux-ci
+                                                 // "Angle" de chaque rotation du moteur entre chaque prises de mesure (en degrés d'angle !!!)
+                                                 // "A" un flottant qui permet de controler le servomoteur (en millisecondes !!!)
     
-    angle = 1; // Angle de chaque rotation du moteur entre chaque prises de mesure
+    int i = 0,nbMes = 180/angle;            // "i" sert d'index dans le tableau dans lequel on stock les mesures 
+                                            // "nbMes" correspond au nombre de mesure qui seront effectuées
+    
+    float tabM[nbMes];              // "tabM" Un tableau dans lequel sera enregistré les mesures effectuées
     
-    trig = 1;
-    servo.pulsewidth_us(A*1000);
-    tabM[i]=boucleM();
-    i++;
-    wait(1);
-    while(A<=2.0f){
-        //Fonction rotation moteur rotation;
-        servo.pulsewidth_us(A*1000);
-        A += (1.0f/180.0f);
-        tabM[i]=boucleM();
-      
+    pc.printf("\nLancement du programme...\n");
+ 
+    trig = 1;                    // "trig" à 1 --> LIDAR attend que "trig" passe à 0 pour prendre des mesures en somme il est en "standby"
+    servo.pulsewidth_us(A*1000); // On fixe le servomoteur à son angle minimum       
+    Mesure(pmes);                // Lancement de la fonction qui prend une mesure et qui inscrit dans "mes" lavaleur de la mesure effectuée
+    tabM[i]=mes;                 // La mesure est enregistrée dans le tableau des mesures
+    i++;                         // L'index du tableau augment donc d'un
+    wait(1);                     
+    while(A<=2.0f){                             // Tant que l'angle envoyé au servomoteur est inférieur ou égal à son angle maximum
+        //Fonction rotation moteur    
+        servo.pulsewidth_us(A*1000);            // Positionnement du Moteur à sa position minimum
+        A += (angle/180.0f); //Vérifier si le moteur tourne bien!!!   // Rotation du moteur d'un angle de la valeur contenu dans la variable angle
+        Mesure(pmes);                          // Effectue une mesure et la stocke dans la variable "mes"
+        tabM[i]=mes;                            // Stock la valeur contenu dans la varaible "mes" dans le tableau 
+        i++;                                    // incrémentation de l'index du tableau des mesures
         
-        //Calcul de l'aire de chaque segment et de l'aire totale
-        aireTriangle = (tabM[i - 1] * tabM[i] * sin(angle) ) / 2;
-        aireTotale += aireTriangle;
+        
+        //aireTriangle = (tabM[i - 1] * tabM[i] * sin(angle) ) / 2;
+        aireTotale += aireSegment(tabM,angle,i);    //Calcul de l'aire de chaque segment et de l'aire totale
+        
         
-        i++;
-    }
-    i=0;
-    servo.pulsewidth(0);
-    while(i<180){
-        pc.printf("M(%d):[%f]\n",i ,tabM[i]);  
-        i=i++;  
+    }                                           // Fin Tant que
+    servo.pulsewidth(0);                        // 
+    i=0;                                        // Reinitialisation de i pour pouvoir le reutiliser
+    while(i<nbMes){                               // Affichage des mesures
+        pc.printf("M(%d):[%f]\n",i ,tabM[i]);      //
+        i=i++;                                      //
     }
     
-    pc.printf("\n Aire total : %f \n", aireTotale);
+    pc.printf("\n Aire total : %f \n", aireTotale);     
     pc.printf("Arret du programme...");
     sleep();
 }