Radar_RTOS
Dependencies: mbed
Fork of Nucleo_radar_buz by
main.cpp@2:97cbf2a5ec78, 2015-12-02 (annotated)
- 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?
User | Revision | Line number | New 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 | } |