Gestion du Traffic Adaptatif- Code du mbed coordinateur
Dependencies: XBeeLib mbed mbed-rtos EthernetInterface
Diff: main.cpp
- Revision:
- 24:bbde0b873a37
- Parent:
- 23:2a6ea31d8e23
- Child:
- 25:fdb28df21d44
--- a/main.cpp Thu Nov 22 21:52:51 2018 +0000 +++ b/main.cpp Thu Nov 29 15:31:43 2018 +0000 @@ -12,9 +12,11 @@ #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_LSB ((uint32_t)0x40C0E3A1) +#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 UINT64(REMOTE_NODE_ADDR64_MSB, REMOTE_NODE_ADDR64_LSB) +#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; @@ -30,6 +32,7 @@ //Nombre de voitures au feu int voituresFeu1 = 0; +int voituresFeu2 = 0; DigitalIn boutonPlus(p24); DigitalIn boutonMoins(p23); Thread t_nbVoiture; @@ -40,30 +43,79 @@ Serial *log_serial; XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600); -const RemoteXBeeZB remoteDevice = RemoteXBeeZB(REMOTE_NODE_ADDR64); +const RemoteXBeeZB remoteDevice1 = RemoteXBeeZB(REMOTE_NODE_ADDR64_1); +const RemoteXBeeZB remoteDevice2 = RemoteXBeeZB(REMOTE_NODE_ADDR64_2); + + +static void send_explicit_data_to_remote_node(XBeeZB& xbee, const RemoteXBeeZB& RemoteDevice,int message) +{ + const uint8_t dstEP = 0xE8; + const uint8_t srcEP = 0xE8; + const uint16_t clusterID = 0x0011; + const uint16_t profileID = 0xC105; + + 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"; + if (message ==0){ + const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data1, strlen(data1)); + } + else if (message ==1){ + const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data2, strlen(data2)); + } + else { + const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data3, strlen(data3)); + } +} /** 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(); - log_serial->printf("\r\nGot a %s RX packet [%08x:%08x|%04x], len %d\r\nData: ", broadcast ? "BROADCAST" : "UNICAST", UINT64_HI32(remote_addr64), UINT64_LO32(remote_addr64), remote.get_addr16(), len); - + //log_serial->printf("\r\nGot a %s RX packet [%08x:%08x|%04x], len %d\r\nData: ", broadcast ? "BROADCAST" : "UNICAST", UINT64_HI32(remote_addr64), UINT64_LO32(remote_addr64), remote.get_addr16(), len); + //log_serial->printf("\r\nAdresse 1: [%08x] ----- Adresse 2 : [%08x]\r\n", UINT64_LO32(remote_addr64), UINT64_LO32(REMOTE_NODE_ADDR64_LSB1)); /*for (int i = 0; i < len; i++) log_serial->printf("%02x ", data[i]);*/ - if (data[0]==0x6D && voituresFeu1!=0){ - voituresFeu1--; - printf("Nombre de voitures : %d",voituresFeu1); + if (data[0]==0x6D){ + // baisse le compteur de voiture au feu 1 + if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1) && (voituresFeu1!=0)){ + voituresFeu1--; + } + // baisse le compteur de voiture au feu 2 + else if ( (UINT64_LO32(remote_addr64)==UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)) && (voituresFeu2!=0)){ + voituresFeu2--; + } + log_serial->printf("Nombre de voitures feu 1 : %d",voituresFeu1); + log_serial->printf("Nombre de voitures feu 2 : %d",voituresFeu2); } else if (data[0]==0x70){ - voituresFeu1++; - printf("Nombre de voitures : %d",voituresFeu1); + // augmente le compteur de voiture au feu 1 + if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1)){ + voituresFeu1++; + } + // augmente le compteur de voiture au feu 2 + else if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)){ + voituresFeu2++; + } + log_serial->printf("Nombre de voitures feu 1 : %d",voituresFeu1); + log_serial->printf("Nombre de voitures feu 2 : %d",voituresFeu2); } else if (data[0]==0x72){ - feu_rouge = 0; - feu_orange = 0; - feu_vert = 1; + // 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,0); + } + // 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,0); + } } + /*else if (data[0]==0x73){ + send_explicit_data_to_remote_node(xbee, remoteDevice1,0); + }*/ log_serial->printf("\r\n"); } @@ -80,26 +132,6 @@ } }*/ -static void send_explicit_data_to_remote_node(XBeeZB& xbee, const RemoteXBeeZB& RemoteDevice,int message) -{ - const uint8_t dstEP = 0xE8; - const uint8_t srcEP = 0xE8; - const uint16_t clusterID = 0x0011; - const uint16_t profileID = 0xC105; - - char data1[]="r"; - char data2[]="v"; - char data3[]="e"; - if (message ==0){ - const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data1, strlen(data1)); - } - else if (message ==1){ - const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data2, strlen(data2)); - } - else { - const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data3, strlen(data3)); - } -} void connect_Xbee() { @@ -137,7 +169,7 @@ Thread::wait(2000); feu_orange = 0; feu_rouge = 1; - send_explicit_data_to_remote_node(xbee, remoteDevice,0); + send_explicit_data_to_remote_node(xbee, remoteDevice1,0); } } @@ -148,10 +180,10 @@ { Thread::wait(100); if(i==40){ - t_feuRouge.signal_set(0x1); + send_explicit_data_to_remote_node(xbee, remoteDevice2,1); } if(i==80){ - send_explicit_data_to_remote_node(xbee, remoteDevice,1); + send_explicit_data_to_remote_node(xbee, remoteDevice1,1); i=0; } i++;