Test buzzer

Dependents:   Nucleo_radar

Committer:
Mickado
Date:
Wed Dec 02 15:56:28 2015 +0000
Revision:
0:45560d98de8a
Test Header Buzzer

Who changed what in which revision?

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