Radar_RTOS
Dependencies: mbed
Fork of Nucleo_radar_buz by
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 }
Generated on Thu Jul 21 2022 01:30:05 by 1.7.2