Asdf

Dependencies:   mbed HC_SR04_Ultrasonic_Library

Committer:
brunostgr
Date:
Tue Dec 17 17:52:28 2019 +0000
Revision:
0:c4844dc380b9
Asrf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
brunostgr 0:c4844dc380b9 1 /*
brunostgr 0:c4844dc380b9 2 * Le 16 decembre 2019
brunostgr 0:c4844dc380b9 3 * Bruno St-Georges et Nicolas Brochu
brunostgr 0:c4844dc380b9 4 * Instrumentation en systemes ordines
brunostgr 0:c4844dc380b9 5 *
brunostgr 0:c4844dc380b9 6 * Laboratoire 8 - Capteur ultrasonique
brunostgr 0:c4844dc380b9 7 * Ce programme permet de mesurer une distance (mm) ou une vitesse (mm/s) a l'aide d'un capteur ultrasonique.
brunostgr 0:c4844dc380b9 8 * Un bouton-poussoir permet de changer le mode de fonctionnement (correction d'erreur) selon la table suivante:
brunostgr 0:c4844dc380b9 9 * - Mode 0: Correction par plafonnement
brunostgr 0:c4844dc380b9 10 * - Mode 1: Correction par omission des donnees erronees
brunostgr 0:c4844dc380b9 11 * - Mode 2: Correction par extrapolation
brunostgr 0:c4844dc380b9 12 * - Mode 3: Affichage de la vitesse
brunostgr 0:c4844dc380b9 13 *
brunostgr 0:c4844dc380b9 14 * LPC1768
brunostgr 0:c4844dc380b9 15 * Connexions externes:
brunostgr 0:c4844dc380b9 16 * Broche 21 - Bouton-poussoir
brunostgr 0:c4844dc380b9 17 *
brunostgr 0:c4844dc380b9 18 */
brunostgr 0:c4844dc380b9 19
brunostgr 0:c4844dc380b9 20 // Librairies
brunostgr 0:c4844dc380b9 21 #include "mbed.h"
brunostgr 0:c4844dc380b9 22 #include "ultrasonic.h"
brunostgr 0:c4844dc380b9 23
brunostgr 0:c4844dc380b9 24 // Bornes statiques du capteur
brunostgr 0:c4844dc380b9 25 #define I_MIN_RANGE 20 // en mm; Integer
brunostgr 0:c4844dc380b9 26 #define I_MAX_RANGE 4000 // en mm; Integer
brunostgr 0:c4844dc380b9 27
brunostgr 0:c4844dc380b9 28 // Variables
brunostgr 0:c4844dc380b9 29 uint8_t uiMODECORRECTION = 0;
brunostgr 0:c4844dc380b9 30 int iData[5] = {0, 0, 0, 0, 0};
brunostgr 0:c4844dc380b9 31 int iI = 0;
brunostgr 0:c4844dc380b9 32 int iDISTANCE1, iDISTANCE2, iVITESSE;
brunostgr 0:c4844dc380b9 33
brunostgr 0:c4844dc380b9 34 // Bouton-poussoir
brunostgr 0:c4844dc380b9 35 DigitalIn bouton(p21);
brunostgr 0:c4844dc380b9 36
brunostgr 0:c4844dc380b9 37 // Fonctions periodiques
brunostgr 0:c4844dc380b9 38 Timer t;
brunostgr 0:c4844dc380b9 39 Ticker flipper;
brunostgr 0:c4844dc380b9 40 void dist(int iDistance)
brunostgr 0:c4844dc380b9 41 {
brunostgr 0:c4844dc380b9 42 if(uiMODECORRECTION == 0){ // Plafonnement
brunostgr 0:c4844dc380b9 43 if(iDistance < I_MIN_RANGE){
brunostgr 0:c4844dc380b9 44 iDistance = I_MIN_RANGE; // Remplacement par valeur minimale
brunostgr 0:c4844dc380b9 45 }else if(iDistance > I_MAX_RANGE){
brunostgr 0:c4844dc380b9 46 iDistance = I_MAX_RANGE; // Remplacement par valeur maximale
brunostgr 0:c4844dc380b9 47 }
brunostgr 0:c4844dc380b9 48 printf("Distance %d mm\r\n", iDistance);
brunostgr 0:c4844dc380b9 49 }else if(uiMODECORRECTION == 1){ // Omission des valeurs erronees
brunostgr 0:c4844dc380b9 50 if(!(iDistance < I_MIN_RANGE || iDistance > I_MAX_RANGE)){ // Ignore les valeurs à l'extérieur de la plage
brunostgr 0:c4844dc380b9 51 printf("Distance %d mm\r\n", iDistance);
brunostgr 0:c4844dc380b9 52 }
brunostgr 0:c4844dc380b9 53 }else if(uiMODECORRECTION == 2){ // Extrapolation
brunostgr 0:c4844dc380b9 54 iData[4] = iData[3]; // FIFO pour calcul de variation moyenne
brunostgr 0:c4844dc380b9 55 iData[3] = iData[2];
brunostgr 0:c4844dc380b9 56 iData[2] = iData[1];
brunostgr 0:c4844dc380b9 57 iData[1] = iData[0];
brunostgr 0:c4844dc380b9 58 iData[0] = iDistance; // Assignation de la valeur presente
brunostgr 0:c4844dc380b9 59 int iVariationMoyenne = ((iData[1] - iData[2]) + (iData[2] - iData[3]) + (iData[3] - iData[4])) / 3;
brunostgr 0:c4844dc380b9 60 if(!(iDistance < I_MIN_RANGE || iDistance > I_MAX_RANGE)){ // Valeurs à l'intérieur de la plage
brunostgr 0:c4844dc380b9 61 printf("Distance %d mm\r\n", iDistance);
brunostgr 0:c4844dc380b9 62 } else {
brunostgr 0:c4844dc380b9 63 iData[0] = iData[1] + iVariationMoyenne; // Ajoute la variation moyenne a la derniere valeur valide
brunostgr 0:c4844dc380b9 64 printf("Distance %d mm\r\n", iData[0]);
brunostgr 0:c4844dc380b9 65 }
brunostgr 0:c4844dc380b9 66 }
brunostgr 0:c4844dc380b9 67 }
brunostgr 0:c4844dc380b9 68
brunostgr 0:c4844dc380b9 69 // Objet capteur ultrasonique
brunostgr 0:c4844dc380b9 70 ultrasonic sonar(p17, p18, .1, 1, &dist); // trig, echo, update speed, timeout, fonction a appeler
brunostgr 0:c4844dc380b9 71
brunostgr 0:c4844dc380b9 72 // Fonction de vitesse
brunostgr 0:c4844dc380b9 73 void check(void){
brunostgr 0:c4844dc380b9 74 if(uiMODECORRECTION == 3){
brunostgr 0:c4844dc380b9 75 if(iI == 0){
brunostgr 0:c4844dc380b9 76 iDISTANCE1 = sonar.getCurrentDistance();
brunostgr 0:c4844dc380b9 77 iI++;
brunostgr 0:c4844dc380b9 78 }
brunostgr 0:c4844dc380b9 79 else if(iI == 1){
brunostgr 0:c4844dc380b9 80 iDISTANCE2 = sonar.getCurrentDistance();
brunostgr 0:c4844dc380b9 81 iI++;
brunostgr 0:c4844dc380b9 82 }
brunostgr 0:c4844dc380b9 83 else{
brunostgr 0:c4844dc380b9 84 iI = 0;
brunostgr 0:c4844dc380b9 85 iVITESSE = abs(iDISTANCE2 - iDISTANCE1) * 10; // Vitesse en mm/s
brunostgr 0:c4844dc380b9 86 printf("\n\rVitesse: %i mm/s",iVITESSE);
brunostgr 0:c4844dc380b9 87 }
brunostgr 0:c4844dc380b9 88 }
brunostgr 0:c4844dc380b9 89 }
brunostgr 0:c4844dc380b9 90
brunostgr 0:c4844dc380b9 91 // Programme principal
brunostgr 0:c4844dc380b9 92 int main(){
brunostgr 0:c4844dc380b9 93 flipper.attach(&check, 0.2);
brunostgr 0:c4844dc380b9 94 sonar.startUpdates(); // Active le capteur
brunostgr 0:c4844dc380b9 95 while(1)
brunostgr 0:c4844dc380b9 96 {
brunostgr 0:c4844dc380b9 97 sonar.checkDistance(); // Mesure de la distance
brunostgr 0:c4844dc380b9 98 if(bouton == 0){ // Choix du mode de fonctionnement
brunostgr 0:c4844dc380b9 99 uiMODECORRECTION++;
brunostgr 0:c4844dc380b9 100 if(uiMODECORRECTION == 4){
brunostgr 0:c4844dc380b9 101 uiMODECORRECTION = 0;
brunostgr 0:c4844dc380b9 102 }
brunostgr 0:c4844dc380b9 103 printf("\n\rMode de correction: %u\n\r",uiMODECORRECTION);
brunostgr 0:c4844dc380b9 104 while(bouton == 0);
brunostgr 0:c4844dc380b9 105 wait_ms(25);
brunostgr 0:c4844dc380b9 106 }
brunostgr 0:c4844dc380b9 107 wait_ms(60); // Debounce
brunostgr 0:c4844dc380b9 108 }
brunostgr 0:c4844dc380b9 109 }