Radar_RTOS

Dependencies:   mbed

Dependents:   Radar_RTOS_Kart

Fork of Nucleo_radar_buz by Contest IOT GSE5

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include <string.h>
00003 #include "UART_Radar.h"
00004 #include "buzzer.h"
00005 
00006 #define TRIG_1  PA_8
00007 #define ECHO_1  PC_7
00008 
00009 
00010 //DigitalOut buzz(PB_8);
00011 DigitalOut trig(TRIG_1);
00012 
00013 Ticker mesure_time;
00014 Ticker send_time;
00015 Timer distance_time;
00016 InterruptIn echo(ECHO_1);
00017 
00018 Buzzer buzzo;
00019 Ticker bip;
00020 
00021 char trame[50];
00022 int essai, err;
00023 int distance, distance_brut;  
00024 char message[4];
00025 int i=0;
00026 
00027 
00028 //Envoie un burst
00029 void send_burst(){ 
00030     distance_time.reset(); 
00031     trig = 0;
00032     wait_us(2);
00033     trig = 1;
00034     wait_us(10);
00035     trig = 0;
00036 }
00037 
00038 
00039 int max (int a, int b) {
00040   return (a<b)?b:a;
00041 }
00042 
00043 int min (int a, int b) {
00044   return (a<b)?a:b;
00045 }
00046 
00047 //Lance le timer
00048 void echo_rise(){ 
00049     distance_time.start(); 
00050 }
00051 
00052 //Génere la trame et l'envoie à UART
00053 void transmit_data(){
00054     message[0]=48+(distance/100)%10;
00055     message[1]=48+(distance/10)%10;
00056     message[2]=48+distance%10;
00057     message[3]=0;
00058         
00059     essai=0;
00060     printf("%s\n\r",message);
00061     send(message);
00062     
00063     err=receive(trame);
00064   
00065     while((controle(trame)==0 || err==1) && essai<3){
00066         send(message);
00067         err=receive(trame);
00068         essai++;
00069     }
00070 }
00071 
00072 //Stop le timer et récupére la distance en cm.
00073 void echo_fall(){ 
00074     distance_time.stop(); 
00075     distance_brut = distance_time.read_us() /29 / 2;
00076     distance_brut = min(distance_brut,230);
00077     distance = max(distance_brut,0);
00078             //Mise à jour de l'intervale entre chaque bip
00079     buzzo.changeMode(distance);
00080 }
00081 
00082 
00083 
00084 
00085 int main() {
00086    
00087     echo.rise(&echo_rise);                      //Routine echo_rise sur interruption de echo en front montant.
00088     echo.fall(&echo_fall);                      //Routine echo_fall sur interruption de echo en front descendant.
00089     mesure_time.attach(&send_burst, 0.5);       //Lance send_burst toutes les 500ms.
00090     wait(0.1);                                  //Décalage entre send et transmit.
00091     send_time.attach(&transmit_data, 0.5);      //Lance transmist_data toutes les 500ms.
00092     wait(0.1);                                  //Décalage entre transmit et buzz.
00093     bip.attach_us(&buzzo, &Buzzer::run, 400);
00094     
00095     while(1);
00096 
00097 }