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.
main.cpp@5:7e152e2fe429, 2019-04-24 (annotated)
- Committer:
- Nilox
- Date:
- Wed Apr 24 08:40:07 2019 +0000
- Revision:
- 5:7e152e2fe429
- Parent:
- 3:e750507bf900
lol
Who changed what in which revision?
| User | Revision | Line number | New 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 |