Radar_RTOS
Dependencies: mbed
Fork of Nucleo_radar_buz by
Diff: buzzer.h
- Revision:
- 2:97cbf2a5ec78
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/buzzer.h Wed Dec 02 16:09:22 2015 +0000 @@ -0,0 +1,168 @@ +#ifndef BUZZER_H +#define BUZZER_H + +#include "mbed.h" + +DigitalOut buzz(PB_8); + +class Buzzer{ + public : + Buzzer(){ + TsilenceMs=100; + etat = BipInit; + t.reset(); + i=0; + } + int TsilenceMs; + + typedef enum {BipInit, BipUp, BipDown, Silent} defetat; + defetat etat; + Timer t; + int i; + + void changeMode(int value); + void run(); +}; + +/* +Buzzer::Buzzer(){ + TsilenceMs=100; + etat = BipInit; + t.reset(); + i=0; +} +*/ + +/* + * Initialisation des différents modes de fonctionnement : + * + * 0 < d < 25 --> 0 : 5 b/s + * 25 < d < 50 --> 1 : 4 b/s + * 50 < d < 100 --> 2 : 3 b/s + * 100 < d < 150 --> 3 : 2 b/s + * 150 < d < 200 --> 4 : 1 b/s + * 200 < d --> 5 : 0 b/s + + fonction bip : (400µs+400µs)*50 = 40ms + -> timer sur interruption en fonction du temps à attendre avant le prochain bip + 0 --> 5 b/s --> TsilenceMs 0,16s + 1 --> 4 b/s --> TsilenceMs 0,21s + 2 --> 3 b/s --> TsilenceMs 0,29s + 3 --> 2 b/s --> TsilenceMs 0,46s + 4 --> 1 b/s --> TsilenceMs 0,96s + 5 --> TsilenceMs 1s + + */ + + +//Modifie la valeur du temps de silence entre 2 bips en fonction de la distance +void Buzzer::changeMode(int value){ + if(value<=25){ //0 + TsilenceMs=160; + }else if(value>25 && value<=50){ //1 + TsilenceMs=210; + }else if(value>50 && value<=100){ //2 + TsilenceMs=290; + }else if(value>100 && value<=150){ //3 + TsilenceMs=460; + }else if(value>150 && value<=200){ //4 + TsilenceMs=960; + }else{ //5 + TsilenceMs=1000000000; + } +} + +/* +Si la valeur sort de son intervalle de fonctionnement, +on modifie le mode de fonctionnement courant. + +fonction bip : (400µs+400µs)*50 = 40ms + -> timer sur interruption en fonction du temps à attendre avant le prochain bip + 0 --> 5 b/s --> silence 0,16s + 1 --> 4 b/s --> silence 0,21s + 2 --> 3 b/s --> silence 0,29s + 3 --> 2 b/s --> silence 0,46s + 4 --> 1 b/s --> silence 0,96s + 5 --> silence 1s + +Etat : BipInit + Timer t Start + Bip=0 + i=0 + Etat = BipUp +Etat : BipUp + si (t>=400µs && i<50) + bipCarreUp + i++ + Etat = BipDown + t Restart + si (i>=50) Etat = Silence; + t Restart +Etat : BipDown + si (t>=400µs && i<50) + bipCarreUp + i++ + Etat = BipUp + t Restart + si (i>=50) Etat = Silence; + t Restart +Etat : Silence + si (t>=Tsilence) + Etat=BipInit + +*/ + +void Buzzer::run(){ // paramètre : t (Timer), i, etat + switch(etat){ + + case BipInit : + buzz=0; + i=0; + etat = BipUp; + t.start(); + break; + + case BipUp : + if(t.read_us()>=400 && i<50){ + buzz=1; + i++; + etat = BipDown; + t.reset(); + t.start(); + } + if(i>=50){ + etat = Silent; + t.reset(); + t.start(); + } + break; + + case BipDown : + if(t.read_us()>=400 && i<50){ + buzz=0; + i++; + etat = BipUp; + t.reset(); + t.start(); + } + if(i>=50){ + etat = Silent; + t.reset(); + t.start(); + } + break; + + case Silent : + if(t.read_ms()>=TsilenceMs){ + etat=BipInit; + } + break; + + default : + etat = BipInit; + break; + } +} + + +#endif \ No newline at end of file