![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Gestion du Traffic Adaptatif- Code du mbed coordinateur
Dependencies: XBeeLib mbed mbed-rtos EthernetInterface
main.cpp@24:bbde0b873a37, 2018-11-29 (annotated)
- Committer:
- leomerel
- Date:
- Thu Nov 29 15:31:43 2018 +0000
- Revision:
- 24:bbde0b873a37
- Parent:
- 23:2a6ea31d8e23
- Child:
- 25:fdb28df21d44
V3.0; Le C gere les 2 R. Il n'y a pas de feu connecte sur le C, mais c'est le C qui envoie les commande "set rouge" ou "set vert" aux R. Avant d'envoyer "set vert" a un R, le C attend de recevoir un message du 2e R assurant que celui-ci est bien rouge
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
leomerel | 21:5adfcfd83e95 | 1 | //SQLUT |
pierreblouet | 16:b4d5eb2ee378 | 2 | |
pierreblouet | 17:0694b399bd0d | 3 | #include "mbed.h" |
pierreblouet | 17:0694b399bd0d | 4 | #include "XBeeLib.h" |
leomerel | 21:5adfcfd83e95 | 5 | #include "rtos.h" |
pierreblouet | 17:0694b399bd0d | 6 | #if defined(ENABLE_LOGGING) |
pierreblouet | 17:0694b399bd0d | 7 | #include "DigiLoggerMbedSerial.h" |
pierreblouet | 17:0694b399bd0d | 8 | using namespace DigiLog; |
pierreblouet | 17:0694b399bd0d | 9 | #endif |
leomerel | 12:9ec78b07c688 | 10 | |
leomerel | 12:9ec78b07c688 | 11 | |
pierreblouet | 17:0694b399bd0d | 12 | #define REMOTE_NODE_ADDR64_MSB ((uint32_t)0x0013A200) |
pierreblouet | 17:0694b399bd0d | 13 | |
pierreblouet | 17:0694b399bd0d | 14 | //#error "Replace next define with the LSB of the remote module's 64-bit address (SL parameter)" |
leomerel | 24:bbde0b873a37 | 15 | #define REMOTE_NODE_ADDR64_LSB1 ((uint32_t)0x40C0E3A1) // adresse du recepteur 1 |
leomerel | 24:bbde0b873a37 | 16 | #define REMOTE_NODE_ADDR64_LSB2 ((uint32_t)0x4086DA0E) // adresse du recepteur 2 |
pierreblouet | 17:0694b399bd0d | 17 | |
leomerel | 24:bbde0b873a37 | 18 | #define REMOTE_NODE_ADDR64_1 UINT64(REMOTE_NODE_ADDR64_MSB, REMOTE_NODE_ADDR64_LSB1) |
leomerel | 24:bbde0b873a37 | 19 | #define REMOTE_NODE_ADDR64_2 UINT64(REMOTE_NODE_ADDR64_MSB, REMOTE_NODE_ADDR64_LSB2) |
pierreblouet | 17:0694b399bd0d | 20 | |
pierreblouet | 17:0694b399bd0d | 21 | using namespace XBeeLib; |
pierreblouet | 17:0694b399bd0d | 22 | |
pierreblouet | 17:0694b399bd0d | 23 | //feux gauche |
pierreblouet | 17:0694b399bd0d | 24 | //rouge |
leomerel | 23:2a6ea31d8e23 | 25 | DigitalOut feu_rouge(p12); |
pierreblouet | 17:0694b399bd0d | 26 | //orange |
leomerel | 23:2a6ea31d8e23 | 27 | DigitalOut feu_orange(p14); |
pierreblouet | 17:0694b399bd0d | 28 | //vert |
leomerel | 23:2a6ea31d8e23 | 29 | DigitalOut feu_vert(p16); |
leomerel | 12:9ec78b07c688 | 30 | |
leomerel | 22:c3b22291cb9d | 31 | DigitalOut led1(LED1); |
leomerel | 22:c3b22291cb9d | 32 | |
leomerel | 21:5adfcfd83e95 | 33 | //Nombre de voitures au feu |
leomerel | 22:c3b22291cb9d | 34 | int voituresFeu1 = 0; |
leomerel | 24:bbde0b873a37 | 35 | int voituresFeu2 = 0; |
leomerel | 21:5adfcfd83e95 | 36 | DigitalIn boutonPlus(p24); |
leomerel | 21:5adfcfd83e95 | 37 | DigitalIn boutonMoins(p23); |
leomerel | 21:5adfcfd83e95 | 38 | Thread t_nbVoiture; |
leomerel | 21:5adfcfd83e95 | 39 | |
leomerel | 23:2a6ea31d8e23 | 40 | //Thread t_receive; |
leomerel | 23:2a6ea31d8e23 | 41 | Thread t_feuRouge; |
leomerel | 23:2a6ea31d8e23 | 42 | Thread t_gestion; |
pierreblouet | 17:0694b399bd0d | 43 | |
pierreblouet | 17:0694b399bd0d | 44 | Serial *log_serial; |
leomerel | 23:2a6ea31d8e23 | 45 | XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600); |
leomerel | 24:bbde0b873a37 | 46 | const RemoteXBeeZB remoteDevice1 = RemoteXBeeZB(REMOTE_NODE_ADDR64_1); |
leomerel | 24:bbde0b873a37 | 47 | const RemoteXBeeZB remoteDevice2 = RemoteXBeeZB(REMOTE_NODE_ADDR64_2); |
leomerel | 24:bbde0b873a37 | 48 | |
leomerel | 24:bbde0b873a37 | 49 | |
leomerel | 24:bbde0b873a37 | 50 | static void send_explicit_data_to_remote_node(XBeeZB& xbee, const RemoteXBeeZB& RemoteDevice,int message) |
leomerel | 24:bbde0b873a37 | 51 | { |
leomerel | 24:bbde0b873a37 | 52 | const uint8_t dstEP = 0xE8; |
leomerel | 24:bbde0b873a37 | 53 | const uint8_t srcEP = 0xE8; |
leomerel | 24:bbde0b873a37 | 54 | const uint16_t clusterID = 0x0011; |
leomerel | 24:bbde0b873a37 | 55 | const uint16_t profileID = 0xC105; |
leomerel | 24:bbde0b873a37 | 56 | |
leomerel | 24:bbde0b873a37 | 57 | char data1[]="r"; // demande a un recepteur de passer au rouge |
leomerel | 24:bbde0b873a37 | 58 | char data2[]="v"; // demande a un recepteur de passer au vert |
leomerel | 24:bbde0b873a37 | 59 | char data3[]="e"; |
leomerel | 24:bbde0b873a37 | 60 | if (message ==0){ |
leomerel | 24:bbde0b873a37 | 61 | const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data1, strlen(data1)); |
leomerel | 24:bbde0b873a37 | 62 | } |
leomerel | 24:bbde0b873a37 | 63 | else if (message ==1){ |
leomerel | 24:bbde0b873a37 | 64 | const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data2, strlen(data2)); |
leomerel | 24:bbde0b873a37 | 65 | } |
leomerel | 24:bbde0b873a37 | 66 | else { |
leomerel | 24:bbde0b873a37 | 67 | const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data3, strlen(data3)); |
leomerel | 24:bbde0b873a37 | 68 | } |
leomerel | 24:bbde0b873a37 | 69 | } |
pierreblouet | 17:0694b399bd0d | 70 | |
pierreblouet | 17:0694b399bd0d | 71 | /** Callback function, invoked at packet reception */ |
pierreblouet | 17:0694b399bd0d | 72 | static void receive_cb(const RemoteXBeeZB& remote, bool broadcast, const uint8_t *const data, uint16_t len) |
pierreblouet | 17:0694b399bd0d | 73 | { |
pierreblouet | 17:0694b399bd0d | 74 | const uint64_t remote_addr64 = remote.get_addr64(); |
leomerel | 24:bbde0b873a37 | 75 | //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); |
leomerel | 24:bbde0b873a37 | 76 | //log_serial->printf("\r\nAdresse 1: [%08x] ----- Adresse 2 : [%08x]\r\n", UINT64_LO32(remote_addr64), UINT64_LO32(REMOTE_NODE_ADDR64_LSB1)); |
pierreblouet | 20:2a94c9200119 | 77 | /*for (int i = 0; i < len; i++) |
pierreblouet | 20:2a94c9200119 | 78 | log_serial->printf("%02x ", data[i]);*/ |
leomerel | 22:c3b22291cb9d | 79 | |
leomerel | 24:bbde0b873a37 | 80 | if (data[0]==0x6D){ |
leomerel | 24:bbde0b873a37 | 81 | // baisse le compteur de voiture au feu 1 |
leomerel | 24:bbde0b873a37 | 82 | if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1) && (voituresFeu1!=0)){ |
leomerel | 24:bbde0b873a37 | 83 | voituresFeu1--; |
leomerel | 24:bbde0b873a37 | 84 | } |
leomerel | 24:bbde0b873a37 | 85 | // baisse le compteur de voiture au feu 2 |
leomerel | 24:bbde0b873a37 | 86 | else if ( (UINT64_LO32(remote_addr64)==UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)) && (voituresFeu2!=0)){ |
leomerel | 24:bbde0b873a37 | 87 | voituresFeu2--; |
leomerel | 24:bbde0b873a37 | 88 | } |
leomerel | 24:bbde0b873a37 | 89 | log_serial->printf("Nombre de voitures feu 1 : %d",voituresFeu1); |
leomerel | 24:bbde0b873a37 | 90 | log_serial->printf("Nombre de voitures feu 2 : %d",voituresFeu2); |
leomerel | 22:c3b22291cb9d | 91 | } |
leomerel | 23:2a6ea31d8e23 | 92 | else if (data[0]==0x70){ |
leomerel | 24:bbde0b873a37 | 93 | // augmente le compteur de voiture au feu 1 |
leomerel | 24:bbde0b873a37 | 94 | if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1)){ |
leomerel | 24:bbde0b873a37 | 95 | voituresFeu1++; |
leomerel | 24:bbde0b873a37 | 96 | } |
leomerel | 24:bbde0b873a37 | 97 | // augmente le compteur de voiture au feu 2 |
leomerel | 24:bbde0b873a37 | 98 | else if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)){ |
leomerel | 24:bbde0b873a37 | 99 | voituresFeu2++; |
leomerel | 24:bbde0b873a37 | 100 | } |
leomerel | 24:bbde0b873a37 | 101 | log_serial->printf("Nombre de voitures feu 1 : %d",voituresFeu1); |
leomerel | 24:bbde0b873a37 | 102 | log_serial->printf("Nombre de voitures feu 2 : %d",voituresFeu2); |
leomerel | 22:c3b22291cb9d | 103 | } |
leomerel | 23:2a6ea31d8e23 | 104 | else if (data[0]==0x72){ |
leomerel | 24:bbde0b873a37 | 105 | // demande au r2 de passer au vert |
leomerel | 24:bbde0b873a37 | 106 | if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1)){ |
leomerel | 24:bbde0b873a37 | 107 | log_serial->printf("r2 passe au vert"); |
leomerel | 24:bbde0b873a37 | 108 | send_explicit_data_to_remote_node(xbee, remoteDevice2,0); |
leomerel | 24:bbde0b873a37 | 109 | } |
leomerel | 24:bbde0b873a37 | 110 | // demande au r1 de passer au vert |
leomerel | 24:bbde0b873a37 | 111 | else if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)){ |
leomerel | 24:bbde0b873a37 | 112 | log_serial->printf("r1 passe au vert"); |
leomerel | 24:bbde0b873a37 | 113 | send_explicit_data_to_remote_node(xbee, remoteDevice1,0); |
leomerel | 24:bbde0b873a37 | 114 | } |
leomerel | 23:2a6ea31d8e23 | 115 | } |
leomerel | 24:bbde0b873a37 | 116 | /*else if (data[0]==0x73){ |
leomerel | 24:bbde0b873a37 | 117 | send_explicit_data_to_remote_node(xbee, remoteDevice1,0); |
leomerel | 24:bbde0b873a37 | 118 | }*/ |
pierreblouet | 17:0694b399bd0d | 119 | |
pierreblouet | 17:0694b399bd0d | 120 | log_serial->printf("\r\n"); |
emilmont | 1:491820ee784d | 121 | } |
leomerel | 12:9ec78b07c688 | 122 | |
leomerel | 22:c3b22291cb9d | 123 | /*void nbVoiture() { |
leomerel | 21:5adfcfd83e95 | 124 | while(1) { |
leomerel | 21:5adfcfd83e95 | 125 | if(boutonPlus){ |
leomerel | 21:5adfcfd83e95 | 126 | nombreDeVoiture++; |
leomerel | 21:5adfcfd83e95 | 127 | } |
leomerel | 21:5adfcfd83e95 | 128 | if(boutonMoins && nombreDeVoiture>0){ |
leomerel | 21:5adfcfd83e95 | 129 | nombreDeVoiture--; |
leomerel | 21:5adfcfd83e95 | 130 | } |
leomerel | 21:5adfcfd83e95 | 131 | printf("Nombre de voitures : %d \r\n", nombreDeVoiture); |
leomerel | 21:5adfcfd83e95 | 132 | } |
leomerel | 22:c3b22291cb9d | 133 | }*/ |
pierreblouet | 17:0694b399bd0d | 134 | |
leomerel | 12:9ec78b07c688 | 135 | |
leomerel | 23:2a6ea31d8e23 | 136 | void connect_Xbee() |
pierreblouet | 17:0694b399bd0d | 137 | { |
pierreblouet | 17:0694b399bd0d | 138 | log_serial = new Serial(DEBUG_TX, DEBUG_RX); |
pierreblouet | 17:0694b399bd0d | 139 | log_serial->baud(9600); |
pierreblouet | 17:0694b399bd0d | 140 | log_serial->printf("Sample application to demo how to receive unicast and broadcast data with the XBeeZB\r\n\r\n"); |
pierreblouet | 17:0694b399bd0d | 141 | log_serial->printf(XB_LIB_BANNER); |
pierreblouet | 17:0694b399bd0d | 142 | |
leomerel | 22:c3b22291cb9d | 143 | #if defined(ENABLE_LOGGING) |
pierreblouet | 17:0694b399bd0d | 144 | new DigiLoggerMbedSerial(log_serial, LogLevelInfo); |
leomerel | 22:c3b22291cb9d | 145 | #endif |
pierreblouet | 17:0694b399bd0d | 146 | |
pierreblouet | 17:0694b399bd0d | 147 | /* Register callbacks */ |
pierreblouet | 17:0694b399bd0d | 148 | xbee.register_receive_cb(&receive_cb); |
pierreblouet | 17:0694b399bd0d | 149 | |
pierreblouet | 17:0694b399bd0d | 150 | RadioStatus const radioStatus = xbee.init(); |
pierreblouet | 17:0694b399bd0d | 151 | MBED_ASSERT(radioStatus == Success); |
leomerel | 12:9ec78b07c688 | 152 | |
pierreblouet | 17:0694b399bd0d | 153 | /* Wait until the device has joined the network */ |
pierreblouet | 17:0694b399bd0d | 154 | log_serial->printf("Waiting for device to join the network: "); |
pierreblouet | 17:0694b399bd0d | 155 | while (!xbee.is_joined()) { |
pierreblouet | 17:0694b399bd0d | 156 | wait_ms(1000); |
pierreblouet | 17:0694b399bd0d | 157 | log_serial->printf("."); |
leomerel | 12:9ec78b07c688 | 158 | } |
pierreblouet | 17:0694b399bd0d | 159 | log_serial->printf("OK\r\n"); |
leomerel | 23:2a6ea31d8e23 | 160 | } |
leomerel | 23:2a6ea31d8e23 | 161 | |
leomerel | 23:2a6ea31d8e23 | 162 | void set_feuRouge() |
leomerel | 23:2a6ea31d8e23 | 163 | { |
leomerel | 23:2a6ea31d8e23 | 164 | while(1) |
leomerel | 23:2a6ea31d8e23 | 165 | { |
leomerel | 23:2a6ea31d8e23 | 166 | Thread::signal_wait(0x1); |
leomerel | 23:2a6ea31d8e23 | 167 | feu_vert = 0; |
leomerel | 23:2a6ea31d8e23 | 168 | feu_orange = 1; |
leomerel | 23:2a6ea31d8e23 | 169 | Thread::wait(2000); |
leomerel | 23:2a6ea31d8e23 | 170 | feu_orange = 0; |
leomerel | 23:2a6ea31d8e23 | 171 | feu_rouge = 1; |
leomerel | 24:bbde0b873a37 | 172 | send_explicit_data_to_remote_node(xbee, remoteDevice1,0); |
leomerel | 23:2a6ea31d8e23 | 173 | } |
leomerel | 23:2a6ea31d8e23 | 174 | } |
leomerel | 23:2a6ea31d8e23 | 175 | |
leomerel | 23:2a6ea31d8e23 | 176 | void gestion() |
leomerel | 23:2a6ea31d8e23 | 177 | { |
leomerel | 23:2a6ea31d8e23 | 178 | int i=0; |
leomerel | 23:2a6ea31d8e23 | 179 | while(1) |
leomerel | 23:2a6ea31d8e23 | 180 | { |
leomerel | 23:2a6ea31d8e23 | 181 | Thread::wait(100); |
leomerel | 23:2a6ea31d8e23 | 182 | if(i==40){ |
leomerel | 24:bbde0b873a37 | 183 | send_explicit_data_to_remote_node(xbee, remoteDevice2,1); |
leomerel | 23:2a6ea31d8e23 | 184 | } |
leomerel | 23:2a6ea31d8e23 | 185 | if(i==80){ |
leomerel | 24:bbde0b873a37 | 186 | send_explicit_data_to_remote_node(xbee, remoteDevice1,1); |
leomerel | 23:2a6ea31d8e23 | 187 | i=0; |
leomerel | 23:2a6ea31d8e23 | 188 | } |
leomerel | 23:2a6ea31d8e23 | 189 | i++; |
leomerel | 23:2a6ea31d8e23 | 190 | } |
leomerel | 22:c3b22291cb9d | 191 | } |
leomerel | 22:c3b22291cb9d | 192 | |
leomerel | 22:c3b22291cb9d | 193 | int main() |
leomerel | 22:c3b22291cb9d | 194 | { |
leomerel | 23:2a6ea31d8e23 | 195 | connect_Xbee(); |
leomerel | 21:5adfcfd83e95 | 196 | |
leomerel | 23:2a6ea31d8e23 | 197 | t_feuRouge.start(set_feuRouge); |
leomerel | 23:2a6ea31d8e23 | 198 | t_gestion.start(gestion); |
leomerel | 23:2a6ea31d8e23 | 199 | |
pierreblouet | 17:0694b399bd0d | 200 | while (true) { |
leomerel | 23:2a6ea31d8e23 | 201 | //nécessaire pour lire (constamment) la valeur recue |
pierreblouet | 17:0694b399bd0d | 202 | uint32_t receive_value = xbee.process_rx_frames(); |
pierreblouet | 18:972fb2937e41 | 203 | |
leomerel | 22:c3b22291cb9d | 204 | if(voituresFeu1 >= 10){led1=1;} |
leomerel | 22:c3b22291cb9d | 205 | else{led1=0;} |
leomerel | 12:9ec78b07c688 | 206 | } |
pierreblouet | 17:0694b399bd0d | 207 | } |