PRJ1401_LIDAR / Mbed 2 deprecated Nucleo_Une_Mesure

Dependencies:   PwmIn mbed

Committer:
Nilox
Date:
Wed Apr 24 08:40:07 2019 +0000
Revision:
5:7e152e2fe429
Parent:
3:e750507bf900
lol

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nilox 0:f07bc5dab40d 1 #include "mbed.h"
Nilox 0:f07bc5dab40d 2 #include <PwmIn.h>
karteck 2:656a20620e62 3 #include <stdio.h>
Nilox 0:f07bc5dab40d 4
Nilox 0:f07bc5dab40d 5 DigitalIn mybutton(USER_BUTTON);
Nilox 0:f07bc5dab40d 6 DigitalOut trig(PA_10);
Nilox 0:f07bc5dab40d 7 Serial pc(USBTX,USBRX);
Nilox 3:e750507bf900 8 PwmOut servo(PB_5);
Nilox 0:f07bc5dab40d 9 PwmIn LidarI(PB_3);
Nilox 0:f07bc5dab40d 10
Nilox 5:7e152e2fe429 11
Nilox 5:7e152e2fe429 12 void Mesure(float *pmes){
Nilox 3:e750507bf900 13 wait_ms(40); //Laisser le moteur arriver à sa position
Nilox 3:e750507bf900 14 trig = 1;
Nilox 3:e750507bf900 15 trig=0; // Déclenchement
Nilox 5:7e152e2fe429 16 wait_ms(10); //Attendre que le signal du LIDAR soit clair pour le microcontroleur et pas parasité par le front descendant du déclenchement
Nilox 5:7e152e2fe429 17 *pmes = LidarI.pulsewidth() / 10; //Lecture du signal et enregistrement dans la variable "mes"
Nilox 3:e750507bf900 18 trig = 1; //Stop de la prise de mesure
Nilox 5:7e152e2fe429 19 pc.printf("Mesure : %f",pmes); //Affichage de la mesure prise
Nilox 0:f07bc5dab40d 20 }
karteck 2:656a20620e62 21
Nilox 3:e750507bf900 22 /*Procédure de rotation
karteck 2:656a20620e62 23 void rotation(float angle){
karteck 2:656a20620e62 24
karteck 2:656a20620e62 25
karteck 2:656a20620e62 26 }
Nilox 3:e750507bf900 27 */
Nilox 5:7e152e2fe429 28
Nilox 5:7e152e2fe429 29 int aireSegment (float t[],float angle,int i){
Nilox 5:7e152e2fe429 30 return (t[i - 1] * t[i] * sin(angle) ) / 2;
Nilox 5:7e152e2fe429 31 }
Nilox 0:f07bc5dab40d 32
Nilox 0:f07bc5dab40d 33
Nilox 0:f07bc5dab40d 34 int main() {
Nilox 5:7e152e2fe429 35 // Déclarations des variables
Nilox 5:7e152e2fe429 36 float mes = 0; //Variable qui contient les mesures
Nilox 5:7e152e2fe429 37 float *pmes = &mes; //Pointeur qui permettra d'accéder à la variable mesure en dehors du sous programme principale "main"
Nilox 5:7e152e2fe429 38 // int arret = 0
Nilox 5:7e152e2fe429 39 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
Nilox 5:7e152e2fe429 40 // "Angle" de chaque rotation du moteur entre chaque prises de mesure (en degrés d'angle !!!)
Nilox 5:7e152e2fe429 41 // "A" un flottant qui permet de controler le servomoteur (en millisecondes !!!)
Nilox 0:f07bc5dab40d 42
Nilox 5:7e152e2fe429 43 int i = 0,nbMes = 180/angle; // "i" sert d'index dans le tableau dans lequel on stock les mesures
Nilox 5:7e152e2fe429 44 // "nbMes" correspond au nombre de mesure qui seront effectuées
Nilox 5:7e152e2fe429 45
Nilox 5:7e152e2fe429 46 float tabM[nbMes]; // "tabM" Un tableau dans lequel sera enregistré les mesures effectuées
karteck 2:656a20620e62 47
Nilox 5:7e152e2fe429 48 pc.printf("\nLancement du programme...\n");
Nilox 5:7e152e2fe429 49
Nilox 5:7e152e2fe429 50 trig = 1; // "trig" à 1 --> LIDAR attend que "trig" passe à 0 pour prendre des mesures en somme il est en "standby"
Nilox 5:7e152e2fe429 51 servo.pulsewidth_us(A*1000); // On fixe le servomoteur à son angle minimum
Nilox 5:7e152e2fe429 52 Mesure(pmes); // Lancement de la fonction qui prend une mesure et qui inscrit dans "mes" lavaleur de la mesure effectuée
Nilox 5:7e152e2fe429 53 tabM[i]=mes; // La mesure est enregistrée dans le tableau des mesures
Nilox 5:7e152e2fe429 54 i++; // L'index du tableau augment donc d'un
Nilox 5:7e152e2fe429 55 wait(1);
Nilox 5:7e152e2fe429 56 while(A<=2.0f){ // Tant que l'angle envoyé au servomoteur est inférieur ou égal à son angle maximum
Nilox 5:7e152e2fe429 57 //Fonction rotation moteur
Nilox 5:7e152e2fe429 58 servo.pulsewidth_us(A*1000); // Positionnement du Moteur à sa position minimum
Nilox 5:7e152e2fe429 59 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
Nilox 5:7e152e2fe429 60 Mesure(pmes); // Effectue une mesure et la stocke dans la variable "mes"
Nilox 5:7e152e2fe429 61 tabM[i]=mes; // Stock la valeur contenu dans la varaible "mes" dans le tableau
Nilox 5:7e152e2fe429 62 i++; // incrémentation de l'index du tableau des mesures
karteck 2:656a20620e62 63
Nilox 5:7e152e2fe429 64
Nilox 5:7e152e2fe429 65 //aireTriangle = (tabM[i - 1] * tabM[i] * sin(angle) ) / 2;
Nilox 5:7e152e2fe429 66 aireTotale += aireSegment(tabM,angle,i); //Calcul de l'aire de chaque segment et de l'aire totale
Nilox 5:7e152e2fe429 67
Nilox 3:e750507bf900 68
Nilox 5:7e152e2fe429 69 } // Fin Tant que
Nilox 5:7e152e2fe429 70 servo.pulsewidth(0); //
Nilox 5:7e152e2fe429 71 i=0; // Reinitialisation de i pour pouvoir le reutiliser
Nilox 5:7e152e2fe429 72 while(i<nbMes){ // Affichage des mesures
Nilox 5:7e152e2fe429 73 pc.printf("M(%d):[%f]\n",i ,tabM[i]); //
Nilox 5:7e152e2fe429 74 i=i++; //
Nilox 0:f07bc5dab40d 75 }
karteck 2:656a20620e62 76
Nilox 5:7e152e2fe429 77 pc.printf("\n Aire total : %f \n", aireTotale);
Nilox 0:f07bc5dab40d 78 pc.printf("Arret du programme...");
Nilox 0:f07bc5dab40d 79 sleep();
Nilox 0:f07bc5dab40d 80 }
karteck 2:656a20620e62 81
karteck 2:656a20620e62 82
karteck 2:656a20620e62 83
karteck 2:656a20620e62 84
karteck 2:656a20620e62 85
karteck 2:656a20620e62 86
karteck 2:656a20620e62 87
karteck 2:656a20620e62 88 /* DEUXIEME VERSION A METTRE DANS MAIN
karteck 2:656a20620e62 89 passe dans la tableau et calcule l'aire une fois que les mesures sont prises
karteck 2:656a20620e62 90
karteck 2:656a20620e62 91
karteck 2:656a20620e62 92 i = 1;
karteck 2:656a20620e62 93 while (i < n){
karteck 2:656a20620e62 94
karteck 2:656a20620e62 95 aireTriangle = (tabM[i - 1] * tabM[i] * sin(angle) ) / 2;
karteck 2:656a20620e62 96 aireTotale += aireTriangle;
karteck 2:656a20620e62 97 i++;
karteck 2:656a20620e62 98 }
karteck 2:656a20620e62 99
karteck 2:656a20620e62 100
karteck 2:656a20620e62 101
karteck 2:656a20620e62 102 */
karteck 2:656a20620e62 103
karteck 2:656a20620e62 104
karteck 2:656a20620e62 105
karteck 2:656a20620e62 106
karteck 2:656a20620e62 107
karteck 2:656a20620e62 108
karteck 2:656a20620e62 109
karteck 2:656a20620e62 110
Nilox 0:f07bc5dab40d 111