Gestion du Trafic Adaptatif - Code des mbed récepteurs
Dependencies: XBeeLib mbed mbed-rtos
Diff: main.cpp
- Revision:
- 25:7ce844f9a1ae
- Parent:
- 24:8c3f700dbfe7
- Child:
- 26:9f2c70bfb336
--- a/main.cpp Sun Dec 02 19:56:58 2018 +0000 +++ b/main.cpp Tue Dec 04 19:33:10 2018 +0000 @@ -24,15 +24,30 @@ //vert DigitalOut feu_vert(p26); -Thread t_nbVoiture; +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); +int nbVoiture = 0; +Thread t_affichage; + +Thread t_nbVoitureBouton; +Thread t_nbVoitureCapteur; Thread t_feuRouge; +Timer timer; DigitalIn boutonPlus(p24); DigitalIn boutonMoins(p23); +AnalogIn signal(p20); -char data0[]="m"; // m comme "moins" - une voiture de moins -char data1[]="p"; // p comme "plus" - une voiture de plus -char data2[]="r"; // r comme "rouge" - confirmation que le feu est rouge +char moins[]="m"; // m comme "moins" - une voiture de moins +char plus[]="p"; // p comme "plus" - une voiture de plus +char rouge[]="r"; // r comme "rouge" - confirmation que le feu est rouge + +int compteur =0; +int wait_front_montant = 0; +int wait_front_descendant = 0; +double frequence =0; Serial *log_serial; XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600); @@ -106,11 +121,11 @@ feu_orange = 0; feu_rouge = 1; } - send_explicit_data_to_remote_node(xbee, remoteDevice,data2); + send_explicit_data_to_remote_node(xbee, remoteDevice,rouge); } } -void nbVoiture() { +void nbVoitureBouton() { //TO DO : // - faire un compteur de voitures interne au recepteur et envoyer ce nombre // au coordinateur -> plus fiable en cas de perte de donnees dans un envoi @@ -118,22 +133,97 @@ // while(1) { if(boutonPlus){ - send_explicit_data_to_remote_node(xbee, remoteDevice,data1); + nbVoiture++; + send_explicit_data_to_remote_node(xbee, remoteDevice,plus); Thread::wait(500); } if(boutonMoins){ - send_explicit_data_to_remote_node(xbee, remoteDevice,data0); + nbVoiture--; + send_explicit_data_to_remote_node(xbee, remoteDevice,moins); Thread::wait(500); + } + } +} + +void nbVoitureCapteur() { + while(1){ + int value = signal.read_u16(); + // if(value<100){voiture++;printf("%d\r\n",value);wait(4);} + + if (signal.read_u16()<100&&compteur==0){ + timer.start(); + compteur++; + wait_front_montant = 1; + } + + + else if (signal.read_u16()>45000&&wait_front_montant==1){ + wait_front_montant=0; + wait_front_descendant = 1; + } + + else if (signal.read_u16()<100&&wait_front_descendant==1){ + wait_front_descendant = 0; + wait_front_montant=1; + timer.stop(); + double t = timer.read(); + frequence = frequence + 1/t; + // printf("temps %f \r\n",t); + // printf("frequence %f\r\n",frequence); + compteur++; + timer.reset(); + timer.start(); } + if(compteur==5){ + frequence = frequence/3; + double vitesse = frequence*2/19.49; + printf("vitesse : %f KM/H \r\n",vitesse); + if (vitesse>1){ + send_explicit_data_to_remote_node(xbee, remoteDevice,plus); + nbVoiture++; + printf("vitesse : %f KM/H \r\n",vitesse); + Thread::wait(1000); + } + compteur=0; + timer.reset(); + } + } +} + +void affichage(){ + while(1){ + int a = nbVoiture; + if(a>=8){ + led4=1; + a-=8; + } + else{led4=0;} + if(a>=4){ + led3=1; + a-=4; + } + else{led3=0;} + if(a>=2){ + led2=1; + a-=2; + } + else{led2=0;} + if(a>=1){ + led1=1; + a-=1; + } + else{led1=0;} } } int main() { connect_Xbee(); - t_nbVoiture.start(nbVoiture); + t_nbVoitureBouton.start(nbVoitureBouton); + t_nbVoitureCapteur.start(nbVoitureCapteur); t_feuRouge.start(set_feuRouge); + t_affichage.start(affichage); while (true) { uint32_t receive_value = xbee.process_rx_frames(); }