Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 5:7e152e2fe429
- Parent:
- 3:e750507bf900
diff -r 0c2f2a2f6002 -r 7e152e2fe429 main.cpp
--- 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();
}