Gestion du Traffic Adaptatif- Code du mbed coordinateur
Dependencies: XBeeLib mbed mbed-rtos EthernetInterface
Diff: main.cpp
- Revision:
- 26:e9fc7e552c88
- Parent:
- 25:fdb28df21d44
- Child:
- 27:0085fca436e1
--- a/main.cpp Sun Dec 02 19:56:29 2018 +0000 +++ b/main.cpp Mon Dec 03 20:28:23 2018 +0000 @@ -7,46 +7,41 @@ using namespace DigiLog; #endif +/* +TO DO: + - temps pour que les voitures traversent le chantier + - améliorer la partie sur les compteurs de voitures +*/ +//Adressage #define REMOTE_NODE_ADDR64_MSB ((uint32_t)0x0013A200) - -//#error "Replace next define with the LSB of the remote module's 64-bit address (SL parameter)" #define REMOTE_NODE_ADDR64_LSB1 ((uint32_t)0x40C0E3A1) // adresse du recepteur 1 #define REMOTE_NODE_ADDR64_LSB2 ((uint32_t)0x4086DA0E) // adresse du recepteur 2 - #define REMOTE_NODE_ADDR64_1 UINT64(REMOTE_NODE_ADDR64_MSB, REMOTE_NODE_ADDR64_LSB1) #define REMOTE_NODE_ADDR64_2 UINT64(REMOTE_NODE_ADDR64_MSB, REMOTE_NODE_ADDR64_LSB2) using namespace XBeeLib; -//feux gauche - //rouge -DigitalOut feu_rouge(p12); - //orange -DigitalOut feu_orange(p14); - //vert -DigitalOut feu_vert(p16); - -DigitalOut led1(LED2); - -char data1[]="r"; // demande a un recepteur de passer au rouge -char data2[]="v"; // demande a un recepteur de passer au vert -char data3[]="e"; // erreur - //Nombre de voitures au feu int voituresFeu1 = 0; int voituresFeu2 = 0; DigitalIn boutonPlus(p24); DigitalIn boutonMoins(p23); Thread t_nbVoiture; +Thread t_gestion; +DigitalOut led1(LED2); -Thread t_gestion; +//Gestion +int temps = 5; //durée (en s) pour qu'une voiture traverse le chantier Timer timer; +//Communication Serial *log_serial; XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600); const RemoteXBeeZB remoteDevice1 = RemoteXBeeZB(REMOTE_NODE_ADDR64_1); const RemoteXBeeZB remoteDevice2 = RemoteXBeeZB(REMOTE_NODE_ADDR64_2); +char set_rouge[]="r"; // demande a un recepteur de passer au rouge +char set_vert[]="v"; // demande a un recepteur de passer au vert static void send_explicit_data_to_remote_node(XBeeZB& xbee, const RemoteXBeeZB& RemoteDevice,const char * data) @@ -62,7 +57,7 @@ /** Callback function, invoked at packet reception */ static void receive_cb(const RemoteXBeeZB& remote, bool broadcast, const uint8_t *const data, uint16_t len) { - const uint64_t remote_addr64 = remote.get_addr64(); + const uint64_t remote_addr64 = remote.get_addr64(); //adresse de l'expéditeur if (data[0]==0x6D){ // baisse le compteur de voiture au feu 1 @@ -92,12 +87,12 @@ // demande au r2 de passer au vert if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1)){ log_serial->printf("r2 passe au vert"); - send_explicit_data_to_remote_node(xbee, remoteDevice2,data2); + send_explicit_data_to_remote_node(xbee, remoteDevice2,set_vert); } // demande au r1 de passer au vert else if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)){ log_serial->printf("r1 passe au vert"); - send_explicit_data_to_remote_node(xbee, remoteDevice1,data2); + send_explicit_data_to_remote_node(xbee, remoteDevice1,set_vert); } } log_serial->printf("\r\n"); @@ -141,14 +136,14 @@ if(stay1==0){ stay2=0; stay1=1; - send_explicit_data_to_remote_node(xbee, remoteDevice1,data1); + send_explicit_data_to_remote_node(xbee, remoteDevice1,set_rouge); } } else if ((voituresFeu2==0) && (voituresFeu1!=0)){ if(stay2==0){ stay1=0; stay2=1; - send_explicit_data_to_remote_node(xbee, remoteDevice2,data1); + send_explicit_data_to_remote_node(xbee, remoteDevice2,set_rouge); } } else{ @@ -156,11 +151,11 @@ stay2=0; Thread::wait(4000); if(i==0){ - send_explicit_data_to_remote_node(xbee, remoteDevice2,data1); + send_explicit_data_to_remote_node(xbee, remoteDevice2,set_rouge); i=1; } else if(i==1){ - send_explicit_data_to_remote_node(xbee, remoteDevice1,data1); + send_explicit_data_to_remote_node(xbee, remoteDevice1,set_rouge); i=0; } }