Kart+xxxxx // Radar_RTOS

Dependencies:   Radar_RTOS mbed

Fork of Radar_RTOS by Contest IOT GSE5

Committer:
Alex_Hochart
Date:
Fri Jan 15 08:44:59 2016 +0000
Revision:
3:422918db0559
Parent:
2:97cbf2a5ec78
Kart+xxxx

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Alex_Hochart 2:97cbf2a5ec78 1 #ifndef BUZZER_H
Alex_Hochart 2:97cbf2a5ec78 2 #define BUZZER_H
Alex_Hochart 2:97cbf2a5ec78 3
Alex_Hochart 2:97cbf2a5ec78 4 #include "mbed.h"
Alex_Hochart 2:97cbf2a5ec78 5
Alex_Hochart 3:422918db0559 6 //Instanciation du GPIO.
Alex_Hochart 3:422918db0559 7 DigitalOut buzz(PB_8); //Sortie digital pour le buzzer.
Alex_Hochart 2:97cbf2a5ec78 8
Alex_Hochart 3:422918db0559 9
Alex_Hochart 3:422918db0559 10 //Class Buzzer regroupant les diférents paramétres utile à la génération du signal du buzzer.
Alex_Hochart 2:97cbf2a5ec78 11 class Buzzer{
Alex_Hochart 2:97cbf2a5ec78 12 public :
Alex_Hochart 3:422918db0559 13
Alex_Hochart 3:422918db0559 14 //Déclaration des atributs
Alex_Hochart 3:422918db0559 15 int TsilenceMs; //Variable temps de silence entre les bips.
Alex_Hochart 3:422918db0559 16 typedef enum {BipInit, BipUp, BipDown, Silent} defetat; //Définie les état possible du buzzer
Alex_Hochart 3:422918db0559 17 defetat etat; //Variable d'état du buzzer
Alex_Hochart 3:422918db0559 18 Timer t; //Timer
Alex_Hochart 3:422918db0559 19 int i; //Nombre de pulsation par bip
Alex_Hochart 3:422918db0559 20
Alex_Hochart 2:97cbf2a5ec78 21 Buzzer(){
Alex_Hochart 2:97cbf2a5ec78 22 TsilenceMs=100;
Alex_Hochart 2:97cbf2a5ec78 23 etat = BipInit;
Alex_Hochart 2:97cbf2a5ec78 24 t.reset();
Alex_Hochart 2:97cbf2a5ec78 25 i=0;
Alex_Hochart 2:97cbf2a5ec78 26 }
Alex_Hochart 3:422918db0559 27
Alex_Hochart 3:422918db0559 28 //Déclaration des methodes
Alex_Hochart 3:422918db0559 29 void changeMode(int value); //Changement du nombre de bips en fonction de la distance
Alex_Hochart 3:422918db0559 30 void run(); //Lancement du buzzer
Alex_Hochart 3:422918db0559 31 };
Alex_Hochart 2:97cbf2a5ec78 32
Alex_Hochart 2:97cbf2a5ec78 33 /*
Alex_Hochart 2:97cbf2a5ec78 34 Buzzer::Buzzer(){
Alex_Hochart 2:97cbf2a5ec78 35 TsilenceMs=100;
Alex_Hochart 2:97cbf2a5ec78 36 etat = BipInit;
Alex_Hochart 2:97cbf2a5ec78 37 t.reset();
Alex_Hochart 2:97cbf2a5ec78 38 i=0;
Alex_Hochart 2:97cbf2a5ec78 39 }
Alex_Hochart 2:97cbf2a5ec78 40 */
Alex_Hochart 2:97cbf2a5ec78 41
Alex_Hochart 2:97cbf2a5ec78 42 /*
Alex_Hochart 2:97cbf2a5ec78 43 * Initialisation des différents modes de fonctionnement :
Alex_Hochart 2:97cbf2a5ec78 44 *
Alex_Hochart 2:97cbf2a5ec78 45 * 0 < d < 25 --> 0 : 5 b/s
Alex_Hochart 2:97cbf2a5ec78 46 * 25 < d < 50 --> 1 : 4 b/s
Alex_Hochart 2:97cbf2a5ec78 47 * 50 < d < 100 --> 2 : 3 b/s
Alex_Hochart 2:97cbf2a5ec78 48 * 100 < d < 150 --> 3 : 2 b/s
Alex_Hochart 2:97cbf2a5ec78 49 * 150 < d < 200 --> 4 : 1 b/s
Alex_Hochart 2:97cbf2a5ec78 50 * 200 < d --> 5 : 0 b/s
Alex_Hochart 2:97cbf2a5ec78 51
Alex_Hochart 2:97cbf2a5ec78 52 fonction bip : (400µs+400µs)*50 = 40ms
Alex_Hochart 2:97cbf2a5ec78 53 -> timer sur interruption en fonction du temps à attendre avant le prochain bip
Alex_Hochart 2:97cbf2a5ec78 54 0 --> 5 b/s --> TsilenceMs 0,16s
Alex_Hochart 2:97cbf2a5ec78 55 1 --> 4 b/s --> TsilenceMs 0,21s
Alex_Hochart 2:97cbf2a5ec78 56 2 --> 3 b/s --> TsilenceMs 0,29s
Alex_Hochart 2:97cbf2a5ec78 57 3 --> 2 b/s --> TsilenceMs 0,46s
Alex_Hochart 2:97cbf2a5ec78 58 4 --> 1 b/s --> TsilenceMs 0,96s
Alex_Hochart 2:97cbf2a5ec78 59 5 --> TsilenceMs 1s
Alex_Hochart 2:97cbf2a5ec78 60
Alex_Hochart 2:97cbf2a5ec78 61 */
Alex_Hochart 2:97cbf2a5ec78 62
Alex_Hochart 2:97cbf2a5ec78 63
Alex_Hochart 3:422918db0559 64 //**********Modifie la valeur du temps de silence entre 2 bips en fonction de la distance.************//
Alex_Hochart 3:422918db0559 65 //
Alex_Hochart 3:422918db0559 66 //Variable value correspond à la distance mesurée en cm.
Alex_Hochart 3:422918db0559 67 //
Alex_Hochart 2:97cbf2a5ec78 68 void Buzzer::changeMode(int value){
Alex_Hochart 2:97cbf2a5ec78 69 if(value<=25){ //0
Alex_Hochart 2:97cbf2a5ec78 70 TsilenceMs=160;
Alex_Hochart 2:97cbf2a5ec78 71 }else if(value>25 && value<=50){ //1
Alex_Hochart 2:97cbf2a5ec78 72 TsilenceMs=210;
Alex_Hochart 2:97cbf2a5ec78 73 }else if(value>50 && value<=100){ //2
Alex_Hochart 2:97cbf2a5ec78 74 TsilenceMs=290;
Alex_Hochart 2:97cbf2a5ec78 75 }else if(value>100 && value<=150){ //3
Alex_Hochart 2:97cbf2a5ec78 76 TsilenceMs=460;
Alex_Hochart 2:97cbf2a5ec78 77 }else if(value>150 && value<=200){ //4
Alex_Hochart 2:97cbf2a5ec78 78 TsilenceMs=960;
Alex_Hochart 2:97cbf2a5ec78 79 }else{ //5
Alex_Hochart 2:97cbf2a5ec78 80 TsilenceMs=1000000000;
Alex_Hochart 2:97cbf2a5ec78 81 }
Alex_Hochart 2:97cbf2a5ec78 82 }
Alex_Hochart 2:97cbf2a5ec78 83
Alex_Hochart 2:97cbf2a5ec78 84 /*
Alex_Hochart 2:97cbf2a5ec78 85 Si la valeur sort de son intervalle de fonctionnement,
Alex_Hochart 2:97cbf2a5ec78 86 on modifie le mode de fonctionnement courant.
Alex_Hochart 2:97cbf2a5ec78 87
Alex_Hochart 2:97cbf2a5ec78 88 fonction bip : (400µs+400µs)*50 = 40ms
Alex_Hochart 2:97cbf2a5ec78 89 -> timer sur interruption en fonction du temps à attendre avant le prochain bip
Alex_Hochart 2:97cbf2a5ec78 90 0 --> 5 b/s --> silence 0,16s
Alex_Hochart 2:97cbf2a5ec78 91 1 --> 4 b/s --> silence 0,21s
Alex_Hochart 2:97cbf2a5ec78 92 2 --> 3 b/s --> silence 0,29s
Alex_Hochart 2:97cbf2a5ec78 93 3 --> 2 b/s --> silence 0,46s
Alex_Hochart 2:97cbf2a5ec78 94 4 --> 1 b/s --> silence 0,96s
Alex_Hochart 2:97cbf2a5ec78 95 5 --> silence 1s
Alex_Hochart 2:97cbf2a5ec78 96
Alex_Hochart 2:97cbf2a5ec78 97 Etat : BipInit
Alex_Hochart 2:97cbf2a5ec78 98 Timer t Start
Alex_Hochart 2:97cbf2a5ec78 99 Bip=0
Alex_Hochart 2:97cbf2a5ec78 100 i=0
Alex_Hochart 2:97cbf2a5ec78 101 Etat = BipUp
Alex_Hochart 2:97cbf2a5ec78 102 Etat : BipUp
Alex_Hochart 2:97cbf2a5ec78 103 si (t>=400µs && i<50)
Alex_Hochart 2:97cbf2a5ec78 104 bipCarreUp
Alex_Hochart 2:97cbf2a5ec78 105 i++
Alex_Hochart 2:97cbf2a5ec78 106 Etat = BipDown
Alex_Hochart 2:97cbf2a5ec78 107 t Restart
Alex_Hochart 2:97cbf2a5ec78 108 si (i>=50) Etat = Silence;
Alex_Hochart 2:97cbf2a5ec78 109 t Restart
Alex_Hochart 2:97cbf2a5ec78 110 Etat : BipDown
Alex_Hochart 2:97cbf2a5ec78 111 si (t>=400µs && i<50)
Alex_Hochart 2:97cbf2a5ec78 112 bipCarreUp
Alex_Hochart 2:97cbf2a5ec78 113 i++
Alex_Hochart 2:97cbf2a5ec78 114 Etat = BipUp
Alex_Hochart 2:97cbf2a5ec78 115 t Restart
Alex_Hochart 2:97cbf2a5ec78 116 si (i>=50) Etat = Silence;
Alex_Hochart 2:97cbf2a5ec78 117 t Restart
Alex_Hochart 2:97cbf2a5ec78 118 Etat : Silence
Alex_Hochart 2:97cbf2a5ec78 119 si (t>=Tsilence)
Alex_Hochart 2:97cbf2a5ec78 120 Etat=BipInit
Alex_Hochart 2:97cbf2a5ec78 121
Alex_Hochart 2:97cbf2a5ec78 122 */
Alex_Hochart 2:97cbf2a5ec78 123
Alex_Hochart 2:97cbf2a5ec78 124 void Buzzer::run(){ // paramètre : t (Timer), i, etat
Alex_Hochart 2:97cbf2a5ec78 125 switch(etat){
Alex_Hochart 2:97cbf2a5ec78 126
Alex_Hochart 2:97cbf2a5ec78 127 case BipInit :
Alex_Hochart 2:97cbf2a5ec78 128 buzz=0;
Alex_Hochart 2:97cbf2a5ec78 129 i=0;
Alex_Hochart 2:97cbf2a5ec78 130 etat = BipUp;
Alex_Hochart 2:97cbf2a5ec78 131 t.start();
Alex_Hochart 2:97cbf2a5ec78 132 break;
Alex_Hochart 2:97cbf2a5ec78 133
Alex_Hochart 2:97cbf2a5ec78 134 case BipUp :
Alex_Hochart 2:97cbf2a5ec78 135 if(t.read_us()>=400 && i<50){
Alex_Hochart 2:97cbf2a5ec78 136 buzz=1;
Alex_Hochart 2:97cbf2a5ec78 137 i++;
Alex_Hochart 2:97cbf2a5ec78 138 etat = BipDown;
Alex_Hochart 2:97cbf2a5ec78 139 t.reset();
Alex_Hochart 2:97cbf2a5ec78 140 t.start();
Alex_Hochart 2:97cbf2a5ec78 141 }
Alex_Hochart 2:97cbf2a5ec78 142 if(i>=50){
Alex_Hochart 2:97cbf2a5ec78 143 etat = Silent;
Alex_Hochart 2:97cbf2a5ec78 144 t.reset();
Alex_Hochart 2:97cbf2a5ec78 145 t.start();
Alex_Hochart 2:97cbf2a5ec78 146 }
Alex_Hochart 2:97cbf2a5ec78 147 break;
Alex_Hochart 2:97cbf2a5ec78 148
Alex_Hochart 2:97cbf2a5ec78 149 case BipDown :
Alex_Hochart 2:97cbf2a5ec78 150 if(t.read_us()>=400 && i<50){
Alex_Hochart 2:97cbf2a5ec78 151 buzz=0;
Alex_Hochart 2:97cbf2a5ec78 152 i++;
Alex_Hochart 2:97cbf2a5ec78 153 etat = BipUp;
Alex_Hochart 2:97cbf2a5ec78 154 t.reset();
Alex_Hochart 2:97cbf2a5ec78 155 t.start();
Alex_Hochart 2:97cbf2a5ec78 156 }
Alex_Hochart 2:97cbf2a5ec78 157 if(i>=50){
Alex_Hochart 2:97cbf2a5ec78 158 etat = Silent;
Alex_Hochart 2:97cbf2a5ec78 159 t.reset();
Alex_Hochart 2:97cbf2a5ec78 160 t.start();
Alex_Hochart 2:97cbf2a5ec78 161 }
Alex_Hochart 2:97cbf2a5ec78 162 break;
Alex_Hochart 2:97cbf2a5ec78 163
Alex_Hochart 2:97cbf2a5ec78 164 case Silent :
Alex_Hochart 2:97cbf2a5ec78 165 if(t.read_ms()>=TsilenceMs){
Alex_Hochart 2:97cbf2a5ec78 166 etat=BipInit;
Alex_Hochart 2:97cbf2a5ec78 167 }
Alex_Hochart 2:97cbf2a5ec78 168 break;
Alex_Hochart 2:97cbf2a5ec78 169
Alex_Hochart 2:97cbf2a5ec78 170 default :
Alex_Hochart 2:97cbf2a5ec78 171 etat = BipInit;
Alex_Hochart 2:97cbf2a5ec78 172 break;
Alex_Hochart 2:97cbf2a5ec78 173 }
Alex_Hochart 2:97cbf2a5ec78 174 }
Alex_Hochart 2:97cbf2a5ec78 175
Alex_Hochart 2:97cbf2a5ec78 176
Alex_Hochart 2:97cbf2a5ec78 177 #endif