Radar_RTOS

Dependencies:   mbed

Dependents:   Radar_RTOS_Kart

Fork of Nucleo_radar_buz by Contest IOT GSE5

Committer:
Alex_Hochart
Date:
Wed Dec 02 16:09:22 2015 +0000
Revision:
2:97cbf2a5ec78
Parent:
1:8558d2451e3e
RTOS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mickado 0:d93aff6b153f 1 #include "mbed.h"
Mickado 0:d93aff6b153f 2 #include <string.h>
Alex_Hochart 2:97cbf2a5ec78 3 #include "UART_Radar.h"
Alex_Hochart 2:97cbf2a5ec78 4 #include "buzzer.h"
Mickado 0:d93aff6b153f 5
Mickado 0:d93aff6b153f 6 #define TRIG_1 PA_8
Mickado 0:d93aff6b153f 7 #define ECHO_1 PC_7
Alex_Hochart 2:97cbf2a5ec78 8
Alex_Hochart 2:97cbf2a5ec78 9
Alex_Hochart 2:97cbf2a5ec78 10 //DigitalOut buzz(PB_8);
Alex_Hochart 2:97cbf2a5ec78 11 DigitalOut trig(TRIG_1);
Alex_Hochart 2:97cbf2a5ec78 12
Alex_Hochart 2:97cbf2a5ec78 13 Ticker mesure_time;
Alex_Hochart 2:97cbf2a5ec78 14 Ticker send_time;
Alex_Hochart 2:97cbf2a5ec78 15 Timer distance_time;
Alex_Hochart 2:97cbf2a5ec78 16 InterruptIn echo(ECHO_1);
Alex_Hochart 2:97cbf2a5ec78 17
Alex_Hochart 2:97cbf2a5ec78 18 Buzzer buzzo;
Alex_Hochart 2:97cbf2a5ec78 19 Ticker bip;
Mickado 0:d93aff6b153f 20
Alex_Hochart 2:97cbf2a5ec78 21 char trame[50];
Alex_Hochart 2:97cbf2a5ec78 22 int essai, err;
Alex_Hochart 2:97cbf2a5ec78 23 int distance, distance_brut;
Alex_Hochart 2:97cbf2a5ec78 24 char message[4];
Alex_Hochart 2:97cbf2a5ec78 25 int i=0;
Alex_Hochart 2:97cbf2a5ec78 26
Alex_Hochart 2:97cbf2a5ec78 27
Alex_Hochart 2:97cbf2a5ec78 28 //Envoie un burst
Alex_Hochart 2:97cbf2a5ec78 29 void send_burst(){
Alex_Hochart 2:97cbf2a5ec78 30 distance_time.reset();
Alex_Hochart 2:97cbf2a5ec78 31 trig = 0;
Alex_Hochart 2:97cbf2a5ec78 32 wait_us(2);
Alex_Hochart 2:97cbf2a5ec78 33 trig = 1;
Alex_Hochart 2:97cbf2a5ec78 34 wait_us(10);
Alex_Hochart 2:97cbf2a5ec78 35 trig = 0;
Alex_Hochart 2:97cbf2a5ec78 36 }
Alex_Hochart 2:97cbf2a5ec78 37
Mickado 0:d93aff6b153f 38
Mickado 0:d93aff6b153f 39 int max (int a, int b) {
Mickado 0:d93aff6b153f 40 return (a<b)?b:a;
Mickado 0:d93aff6b153f 41 }
Mickado 0:d93aff6b153f 42
Mickado 0:d93aff6b153f 43 int min (int a, int b) {
Mickado 0:d93aff6b153f 44 return (a<b)?a:b;
Mickado 0:d93aff6b153f 45 }
Mickado 0:d93aff6b153f 46
Alex_Hochart 2:97cbf2a5ec78 47 //Lance le timer
Alex_Hochart 2:97cbf2a5ec78 48 void echo_rise(){
Alex_Hochart 2:97cbf2a5ec78 49 distance_time.start();
Mickado 0:d93aff6b153f 50 }
Mickado 0:d93aff6b153f 51
Alex_Hochart 2:97cbf2a5ec78 52 //Génere la trame et l'envoie à UART
Alex_Hochart 2:97cbf2a5ec78 53 void transmit_data(){
Alex_Hochart 2:97cbf2a5ec78 54 message[0]=48+(distance/100)%10;
Alex_Hochart 2:97cbf2a5ec78 55 message[1]=48+(distance/10)%10;
Alex_Hochart 2:97cbf2a5ec78 56 message[2]=48+distance%10;
Alex_Hochart 1:8558d2451e3e 57 message[3]=0;
Mickado 0:d93aff6b153f 58
Alex_Hochart 1:8558d2451e3e 59 essai=0;
Alex_Hochart 1:8558d2451e3e 60 printf("%s\n\r",message);
Alex_Hochart 1:8558d2451e3e 61 send(message);
Alex_Hochart 2:97cbf2a5ec78 62
Alex_Hochart 2:97cbf2a5ec78 63 err=receive(trame);
Alex_Hochart 1:8558d2451e3e 64
Alex_Hochart 2:97cbf2a5ec78 65 while((controle(trame)==0 || err==1) && essai<3){
Alex_Hochart 1:8558d2451e3e 66 send(message);
Alex_Hochart 2:97cbf2a5ec78 67 err=receive(trame);
Alex_Hochart 1:8558d2451e3e 68 essai++;
Alex_Hochart 1:8558d2451e3e 69 }
Alex_Hochart 2:97cbf2a5ec78 70 }
Alex_Hochart 1:8558d2451e3e 71
Alex_Hochart 2:97cbf2a5ec78 72 //Stop le timer et récupére la distance en cm.
Alex_Hochart 2:97cbf2a5ec78 73 void echo_fall(){
Alex_Hochart 2:97cbf2a5ec78 74 distance_time.stop();
Alex_Hochart 2:97cbf2a5ec78 75 distance_brut = distance_time.read_us() /29 / 2;
Alex_Hochart 2:97cbf2a5ec78 76 distance_brut = min(distance_brut,230);
Alex_Hochart 2:97cbf2a5ec78 77 distance = max(distance_brut,0);
Alex_Hochart 2:97cbf2a5ec78 78 //Mise à jour de l'intervale entre chaque bip
Alex_Hochart 2:97cbf2a5ec78 79 buzzo.changeMode(distance);
Alex_Hochart 2:97cbf2a5ec78 80 }
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 int main() {
Alex_Hochart 2:97cbf2a5ec78 86
Alex_Hochart 2:97cbf2a5ec78 87 echo.rise(&echo_rise); //Routine echo_rise sur interruption de echo en front montant.
Alex_Hochart 2:97cbf2a5ec78 88 echo.fall(&echo_fall); //Routine echo_fall sur interruption de echo en front descendant.
Alex_Hochart 2:97cbf2a5ec78 89 mesure_time.attach(&send_burst, 0.5); //Lance send_burst toutes les 500ms.
Alex_Hochart 2:97cbf2a5ec78 90 wait(0.1); //Décalage entre send et transmit.
Alex_Hochart 2:97cbf2a5ec78 91 send_time.attach(&transmit_data, 0.5); //Lance transmist_data toutes les 500ms.
Alex_Hochart 2:97cbf2a5ec78 92 wait(0.1); //Décalage entre transmit et buzz.
Alex_Hochart 2:97cbf2a5ec78 93 bip.attach_us(&buzzo, &Buzzer::run, 400);
Alex_Hochart 2:97cbf2a5ec78 94
Alex_Hochart 2:97cbf2a5ec78 95 while(1);
Alex_Hochart 2:97cbf2a5ec78 96
Mickado 0:d93aff6b153f 97 }