Kart+xxxxx // Radar_RTOS
Dependencies: Radar_RTOS mbed
Fork of Radar_RTOS by
Revision 3:422918db0559, committed 2016-01-15
- Comitter:
- Alex_Hochart
- Date:
- Fri Jan 15 08:44:59 2016 +0000
- Parent:
- 2:97cbf2a5ec78
- Commit message:
- Kart+xxxx
Changed in this revision
diff -r 97cbf2a5ec78 -r 422918db0559 Radar_RTOS.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Radar_RTOS.lib Fri Jan 15 08:44:59 2016 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/teams/Contest-IOT-GSE5/code/Radar_RTOS/#97cbf2a5ec78
diff -r 97cbf2a5ec78 -r 422918db0559 UART_Radar.cpp --- a/UART_Radar.cpp Wed Dec 02 16:09:22 2015 +0000 +++ b/UART_Radar.cpp Fri Jan 15 08:44:59 2016 +0000 @@ -2,7 +2,7 @@ #include "mbed.h" #include <string.h> Serial carte(PA_9, PA_10); //emission --- tx, rx -Serial pc(USBTX, USBRX); //reception --- tx, rx + void USART1_puts(char *text){ while(*text != '\0'){ @@ -20,7 +20,7 @@ int somme=5; int i=0; msg_formated[0]=2; - printf("\n\r"); + //pc.printf("\n\r"); while(msg[i]!=0){ somme= somme + msg[i]; msg_formated[i+1]=msg[i]; @@ -35,11 +35,11 @@ msg_formated[i+3]=0; //A supprimer - i=0; + /*i=0; while(msg_formated[i]!=0){ printf("[%d] ", msg_formated[i]); i++; - } + }*/ } @@ -56,7 +56,7 @@ Timer timeout; timeout.start(); while(1){ - if(timeout.read_ms() > 100) return 1; + if(timeout.read_ms() > 100) return 2; if(carte.readable()){ r = carte.getc(); @@ -80,7 +80,6 @@ frame[I-1]=0; return 0; }else{ //Message invalidé par la somme - frame[0]=0; return 1; } @@ -95,6 +94,6 @@ } int controle(char *frame){ - if (*frame!=6) return 0; + if (*frame == 6) return 0; else return 1; } \ No newline at end of file
diff -r 97cbf2a5ec78 -r 422918db0559 buzzer.h --- a/buzzer.h Wed Dec 02 16:09:22 2015 +0000 +++ b/buzzer.h Fri Jan 15 08:44:59 2016 +0000 @@ -3,26 +3,32 @@ #include "mbed.h" -DigitalOut buzz(PB_8); +//Instanciation du GPIO. +DigitalOut buzz(PB_8); //Sortie digital pour le buzzer. + +//Class Buzzer regroupant les diférents paramétres utile à la génération du signal du buzzer. class Buzzer{ public : + + //Déclaration des atributs + int TsilenceMs; //Variable temps de silence entre les bips. + typedef enum {BipInit, BipUp, BipDown, Silent} defetat; //Définie les état possible du buzzer + defetat etat; //Variable d'état du buzzer + Timer t; //Timer + int i; //Nombre de pulsation par bip + 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(); -}; + + //Déclaration des methodes + void changeMode(int value); //Changement du nombre de bips en fonction de la distance + void run(); //Lancement du buzzer +}; /* Buzzer::Buzzer(){ @@ -55,7 +61,10 @@ */ -//Modifie la valeur du temps de silence entre 2 bips en fonction de la distance +//**********Modifie la valeur du temps de silence entre 2 bips en fonction de la distance.************// +// +//Variable value correspond à la distance mesurée en cm. +// void Buzzer::changeMode(int value){ if(value<=25){ //0 TsilenceMs=160;
diff -r 97cbf2a5ec78 -r 422918db0559 main.cpp --- a/main.cpp Wed Dec 02 16:09:22 2015 +0000 +++ b/main.cpp Fri Jan 15 08:44:59 2016 +0000 @@ -6,26 +6,33 @@ #define TRIG_1 PA_8 #define ECHO_1 PC_7 - -//DigitalOut buzz(PB_8); -DigitalOut trig(TRIG_1); +Serial pc(USBTX, USBRX); //reception --- tx, rx -Ticker mesure_time; -Ticker send_time; -Timer distance_time; -InterruptIn echo(ECHO_1); +//Instanciation des GPIOs. +DigitalOut trig(TRIG_1); //Sortie digital pour le trigger. +InterruptIn echo(ECHO_1); //Entrée digital sur interuption pour l'écho. +InterruptIn position(USER_BUTTON); //Entrée digital sur interuption pour le levier de vitesse. -Buzzer buzzo; -Ticker bip; +//Instanciation du Timer. +Timer distance_time; //Timer pour la mesure de distance. +Ticker mesure_time; //Timer (fixe) avec interruption pour l'acquisition de la distance. +Ticker send_time; //Timer (fixe) avec interruption pour l'envoie de la distance. +Ticker bip; //Timer (fixe) avec interruption pour l'actualisation du buzzer. -char trame[50]; -int essai, err; -int distance, distance_brut; -char message[4]; -int i=0; +//Instanciation des variables. +Buzzer buzzo; +int distance; -//Envoie un burst +/********************Fonction qui génére le burst pour la mesure de distance.****************************/ +//But : Générer un burst et reset le timer de sitance. +// +//Donnée : Le timer distance_time est un timer global. +// trig est un sortie digital. +// _____________ +// TRIG => ________/ \__.... +// 2 µs 10 µs +// void send_burst(){ distance_time.reset(); trig = 0; @@ -34,64 +41,141 @@ wait_us(10); trig = 0; } +/*******************************************************************************************************/ + + +/*******************************Fonction de minimum et maximum.*****************************************/ +//But : Renvoie le min et le max entre deux entier. +// int max (int a, int b) { return (a<b)?b:a; } - int min (int a, int b) { return (a<b)?a:b; } +/********************************************************************************************************/ -//Lance le timer + +/******************Routine d'interruption sur front montant du signal echo.*****************************/ +//But : Lancer le timer. +// +//Donnée : Le timer distance_time est un timer global. +// _.... +// ECHO => ....____/ Start timer. +// ^ +// void echo_rise(){ distance_time.start(); } +/*********************************************************************************************************/ -//Génere la trame et l'envoie à UART + + +/***************************Routine d'envoie de la distance via l'uart.***********************************/ +//But : Transformer la distance en chaine de caractéres. +// Envoier via la fonction send() et attendre un acquitement. +// Error si on recoie 3 non-acquitement succésif ou atteinte du timeout. +// +//Donnée : L'entier distance est une variable global. +// La chaine message contient la distance sur 3 caractére + '\0'. +// L'envoie est répété 3 fois quand il y a erreur. Si 3 erreurs, arret des émission. +// Il y a erreur si : receive ne recoie pas d'acquitement dans un temps impartie. +// controle renvoie 0, qui corespond à une erreur de checksum. void transmit_data(){ + + int essai, err; + char message[4]; + char trame[2]; message[0]=48+(distance/100)%10; message[1]=48+(distance/10)%10; message[2]=48+distance%10; message[3]=0; essai=0; - printf("%s\n\r",message); send(message); - err=receive(trame); - - while((controle(trame)==0 || err==1) && essai<3){ + + pc.printf("%c%c%c\n\r",message[0],message[1],message[2]); + err=receive(trame); //Bug avec le nouvelle affichage + pc.printf("error%d\n\r",err); + + while((controle(trame)==1 || err!=0) && essai < 3){ + essai++; + if( essai >= 3) while(1); send(message); err=receive(trame); - essai++; + pc.printf("error%d\n\r",err); + } } - -//Stop le timer et récupére la distance en cm. -void echo_fall(){ - distance_time.stop(); - distance_brut = distance_time.read_us() /29 / 2; - distance_brut = min(distance_brut,230); - distance = max(distance_brut,0); - //Mise à jour de l'intervale entre chaque bip - buzzo.changeMode(distance); -} +/**********************************************************************************************************/ +/*********************Routine d'interruption sur front descendant du signal echo.**************************/ +//But : Stoper le timer, récupérer la distance en cm +// et modifier le silence entre deux bip du buzzer +// +//Donnée : Le timer distance_time est un timer global. +// L'entier distance est une variable global. +// Le buzzer buzzo est un objet global. +// _____________________________________ +// ECHO => ________/ Distant = Temps / 29/2 \__.... Stop timer. +// ^ +// +void echo_fall(){ + distance_time.stop(); //Stop le timer. + + distance = distance_time.read_us() /29 / 2; //Converti le temps (µs) en distance (cm). + distance = min(distance,230); //Definie la valeur max de la distance à 230. + distance = max(distance,0); //Definie la valeur min de la distance à 0. + + buzzo.changeMode(distance); //Mise à jour de l'intervale entre chaque bip +} +/**********************************************************************************************************/ + +/******************Routine d'interruption sur front montant du signal pos.*****************************/ +//But : Lancer les tâches. +// +// +void position_rise(){ + + echo.rise(NULL); //Routine NULL sur interruption de echo en front montant. + echo.fall(NULL); //Routine NULL sur interruption de echo en front descendant. + mesure_time.detach(); //Stop la routine send_burst. + send_time.detach(); //Stop la routine transmist_data. + bip.detach(); //Stop la routine l'actualisation du buzzer. + +} +/*********************************************************************************************************/ + +/******************Routine d'interruption sur front descendant du signal pos.*****************************/ +//But : Stop les tâches. +// +// +void position_fall(){ + + echo.rise(&echo_rise); //Routine echo_rise sur interruption de echo en front montant. + echo.fall(&echo_fall); //Routine echo_fall sur interruption de echo en front descendant. + mesure_time.attach(&send_burst, 0.5); //Lance send_burst toutes les 500ms. + wait(0.1); //Décalage entre send et transmit. + send_time.attach(&transmit_data, 0.5); //Lance transmist_data toutes les 500ms. + wait(0.1); //Décalage entre transmit et buzz. + bip.attach_us(&buzzo, &Buzzer::run, 400); //Lance l'actualisation du buzzer toutes les 400µs ( F = 2.5 kHz ). + +} +/*********************************************************************************************************/ + + + int main() { - - echo.rise(&echo_rise); //Routine echo_rise sur interruption de echo en front montant. - echo.fall(&echo_fall); //Routine echo_fall sur interruption de echo en front descendant. - mesure_time.attach(&send_burst, 0.5); //Lance send_burst toutes les 500ms. - wait(0.1); //Décalage entre send et transmit. - send_time.attach(&transmit_data, 0.5); //Lance transmist_data toutes les 500ms. - wait(0.1); //Décalage entre transmit et buzz. - bip.attach_us(&buzzo, &Buzzer::run, 400); - + + position.rise(&position_rise); //Routine position_rise sur interruption de position en front montant. + position.fall(&position_fall); //Routine position_fall sur interruption de position en front descendant. + while(1); } \ No newline at end of file