Gestion du Traffic Adaptatif- Code du mbed coordinateur
Dependencies: XBeeLib mbed mbed-rtos EthernetInterface
main.cpp@22:c3b22291cb9d, 2018-11-18 (annotated)
- Committer:
- leomerel
- Date:
- Sun Nov 18 21:15:36 2018 +0000
- Revision:
- 22:c3b22291cb9d
- Parent:
- 21:5adfcfd83e95
- Child:
- 23:2a6ea31d8e23
V2.0; Le r?cepteur envoi un message au coordinateur d?s qu'il y a une voiture en plus ou en moins au feu. Le coordinateur traite ces donn?es et sait donc combien de voitures attendent au feu.
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)" |
pierreblouet | 17:0694b399bd0d | 15 | #define REMOTE_NODE_ADDR64_LSB ((uint32_t)0x40C0E3A1) |
pierreblouet | 17:0694b399bd0d | 16 | |
pierreblouet | 17:0694b399bd0d | 17 | #define REMOTE_NODE_ADDR64 UINT64(REMOTE_NODE_ADDR64_MSB, REMOTE_NODE_ADDR64_LSB) |
pierreblouet | 17:0694b399bd0d | 18 | |
pierreblouet | 17:0694b399bd0d | 19 | using namespace XBeeLib; |
pierreblouet | 17:0694b399bd0d | 20 | |
pierreblouet | 17:0694b399bd0d | 21 | //feux gauche |
pierreblouet | 17:0694b399bd0d | 22 | //rouge |
pierreblouet | 20:2a94c9200119 | 23 | DigitalOut feux_gauche_rouge(p12); |
pierreblouet | 17:0694b399bd0d | 24 | //orange |
pierreblouet | 20:2a94c9200119 | 25 | DigitalOut feux_gauche_orange(p14); |
pierreblouet | 17:0694b399bd0d | 26 | //vert |
pierreblouet | 20:2a94c9200119 | 27 | DigitalOut feux_gauche_vert(p16); |
leomerel | 12:9ec78b07c688 | 28 | |
leomerel | 22:c3b22291cb9d | 29 | DigitalOut led1(LED1); |
leomerel | 22:c3b22291cb9d | 30 | |
leomerel | 21:5adfcfd83e95 | 31 | //Nombre de voitures au feu |
leomerel | 22:c3b22291cb9d | 32 | int voituresFeu1 = 0; |
leomerel | 21:5adfcfd83e95 | 33 | DigitalIn boutonPlus(p24); |
leomerel | 21:5adfcfd83e95 | 34 | DigitalIn boutonMoins(p23); |
leomerel | 21:5adfcfd83e95 | 35 | Thread t_nbVoiture; |
leomerel | 21:5adfcfd83e95 | 36 | |
leomerel | 21:5adfcfd83e95 | 37 | Thread t_receive; |
leomerel | 21:5adfcfd83e95 | 38 | |
pierreblouet | 17:0694b399bd0d | 39 | //liste des message a envoyer rouge et vert seulement pour le coordinateur |
pierreblouet | 17:0694b399bd0d | 40 | ////////////////////////// |
pierreblouet | 17:0694b399bd0d | 41 | ///// |
pierreblouet | 18:972fb2937e41 | 42 | char rouge[] = "r"; |
pierreblouet | 18:972fb2937e41 | 43 | char vert[] = "v"; |
pierreblouet | 17:0694b399bd0d | 44 | ///// |
pierreblouet | 17:0694b399bd0d | 45 | uint8_t ok = 0x02; |
pierreblouet | 17:0694b399bd0d | 46 | ////////////////////////// |
pierreblouet | 17:0694b399bd0d | 47 | |
pierreblouet | 17:0694b399bd0d | 48 | |
pierreblouet | 17:0694b399bd0d | 49 | Serial *log_serial; |
pierreblouet | 17:0694b399bd0d | 50 | |
pierreblouet | 17:0694b399bd0d | 51 | /** Callback function, invoked at packet reception */ |
pierreblouet | 17:0694b399bd0d | 52 | static void receive_cb(const RemoteXBeeZB& remote, bool broadcast, const uint8_t *const data, uint16_t len) |
pierreblouet | 17:0694b399bd0d | 53 | { |
pierreblouet | 17:0694b399bd0d | 54 | const uint64_t remote_addr64 = remote.get_addr64(); |
pierreblouet | 17:0694b399bd0d | 55 | |
pierreblouet | 17:0694b399bd0d | 56 | 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); |
pierreblouet | 17:0694b399bd0d | 57 | |
pierreblouet | 20:2a94c9200119 | 58 | /*for (int i = 0; i < len; i++) |
pierreblouet | 20:2a94c9200119 | 59 | log_serial->printf("%02x ", data[i]);*/ |
leomerel | 22:c3b22291cb9d | 60 | |
leomerel | 22:c3b22291cb9d | 61 | if (data[0]==0x6D && voituresFeu1!=0){ |
leomerel | 22:c3b22291cb9d | 62 | voituresFeu1--; |
leomerel | 22:c3b22291cb9d | 63 | printf("Nombre de voitures : %d",voituresFeu1); |
leomerel | 22:c3b22291cb9d | 64 | } |
leomerel | 22:c3b22291cb9d | 65 | if (data[0]==0x70){ |
leomerel | 22:c3b22291cb9d | 66 | voituresFeu1++; |
leomerel | 22:c3b22291cb9d | 67 | printf("Nombre de voitures : %d",voituresFeu1); |
leomerel | 22:c3b22291cb9d | 68 | } |
pierreblouet | 17:0694b399bd0d | 69 | |
pierreblouet | 17:0694b399bd0d | 70 | log_serial->printf("\r\n"); |
emilmont | 1:491820ee784d | 71 | } |
leomerel | 12:9ec78b07c688 | 72 | |
leomerel | 22:c3b22291cb9d | 73 | /*void nbVoiture() { |
leomerel | 21:5adfcfd83e95 | 74 | while(1) { |
leomerel | 21:5adfcfd83e95 | 75 | if(boutonPlus){ |
leomerel | 21:5adfcfd83e95 | 76 | nombreDeVoiture++; |
leomerel | 21:5adfcfd83e95 | 77 | } |
leomerel | 21:5adfcfd83e95 | 78 | if(boutonMoins && nombreDeVoiture>0){ |
leomerel | 21:5adfcfd83e95 | 79 | nombreDeVoiture--; |
leomerel | 21:5adfcfd83e95 | 80 | } |
leomerel | 21:5adfcfd83e95 | 81 | printf("Nombre de voitures : %d \r\n", nombreDeVoiture); |
leomerel | 21:5adfcfd83e95 | 82 | } |
leomerel | 22:c3b22291cb9d | 83 | }*/ |
pierreblouet | 17:0694b399bd0d | 84 | |
leomerel | 22:c3b22291cb9d | 85 | static void send_explicit_data_to_remote_node(XBeeZB& xbee, const RemoteXBeeZB& RemoteDevice,int message){ |
pierreblouet | 18:972fb2937e41 | 86 | |
pierreblouet | 18:972fb2937e41 | 87 | //const uint8_t data_len = strlen(data); |
pierreblouet | 17:0694b399bd0d | 88 | const uint8_t dstEP = 0xE8; |
pierreblouet | 17:0694b399bd0d | 89 | const uint8_t srcEP = 0xE8; |
pierreblouet | 17:0694b399bd0d | 90 | const uint16_t clusterID = 0x0011; |
pierreblouet | 17:0694b399bd0d | 91 | const uint16_t profileID = 0xC105; |
pierreblouet | 17:0694b399bd0d | 92 | |
pierreblouet | 18:972fb2937e41 | 93 | char data1[]="r"; |
pierreblouet | 18:972fb2937e41 | 94 | char data2[]="v"; |
pierreblouet | 18:972fb2937e41 | 95 | char data3[]="e"; |
pierreblouet | 18:972fb2937e41 | 96 | if (message ==0){ |
pierreblouet | 18:972fb2937e41 | 97 | const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data1, strlen(data1)); |
leomerel | 22:c3b22291cb9d | 98 | /*if (txStatus == TxStatusSuccess) |
pierreblouet | 18:972fb2937e41 | 99 | log_serial->printf("send_explicit_data_to_remote_node OK\r\n"); |
pierreblouet | 18:972fb2937e41 | 100 | else |
leomerel | 22:c3b22291cb9d | 101 | log_serial->printf("send_explicit_data_to_remote_node failed with %d\r\n", (int) txStatus);*/ |
pierreblouet | 18:972fb2937e41 | 102 | } |
pierreblouet | 18:972fb2937e41 | 103 | else if (message ==1){ |
pierreblouet | 18:972fb2937e41 | 104 | const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data2, strlen(data2)); |
leomerel | 22:c3b22291cb9d | 105 | /*if (txStatus == TxStatusSuccess) |
pierreblouet | 18:972fb2937e41 | 106 | log_serial->printf("send_explicit_data_to_remote_node OK\r\n"); |
pierreblouet | 18:972fb2937e41 | 107 | else |
leomerel | 22:c3b22291cb9d | 108 | log_serial->printf("send_explicit_data_to_remote_node failed with %d\r\n", (int) txStatus);*/ |
pierreblouet | 18:972fb2937e41 | 109 | } |
pierreblouet | 18:972fb2937e41 | 110 | else { |
pierreblouet | 18:972fb2937e41 | 111 | const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data3, strlen(data3)); |
leomerel | 22:c3b22291cb9d | 112 | /*if (txStatus == TxStatusSuccess) |
pierreblouet | 18:972fb2937e41 | 113 | log_serial->printf("send_explicit_data_to_remote_node OK\r\n"); |
pierreblouet | 18:972fb2937e41 | 114 | else |
leomerel | 22:c3b22291cb9d | 115 | log_serial->printf("send_explicit_data_to_remote_node failed with %d\r\n", (int) txStatus);*/ |
pierreblouet | 18:972fb2937e41 | 116 | } |
leomerel | 22:c3b22291cb9d | 117 | } |
leomerel | 12:9ec78b07c688 | 118 | |
leomerel | 22:c3b22291cb9d | 119 | XBeeZB connect_Xbee() |
pierreblouet | 17:0694b399bd0d | 120 | { |
pierreblouet | 17:0694b399bd0d | 121 | log_serial = new Serial(DEBUG_TX, DEBUG_RX); |
pierreblouet | 17:0694b399bd0d | 122 | log_serial->baud(9600); |
pierreblouet | 17:0694b399bd0d | 123 | log_serial->printf("Sample application to demo how to receive unicast and broadcast data with the XBeeZB\r\n\r\n"); |
pierreblouet | 17:0694b399bd0d | 124 | log_serial->printf(XB_LIB_BANNER); |
pierreblouet | 17:0694b399bd0d | 125 | |
leomerel | 22:c3b22291cb9d | 126 | #if defined(ENABLE_LOGGING) |
pierreblouet | 17:0694b399bd0d | 127 | new DigiLoggerMbedSerial(log_serial, LogLevelInfo); |
leomerel | 22:c3b22291cb9d | 128 | #endif |
pierreblouet | 17:0694b399bd0d | 129 | |
pierreblouet | 17:0694b399bd0d | 130 | XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600); |
pierreblouet | 17:0694b399bd0d | 131 | |
pierreblouet | 17:0694b399bd0d | 132 | /* Register callbacks */ |
pierreblouet | 17:0694b399bd0d | 133 | xbee.register_receive_cb(&receive_cb); |
pierreblouet | 17:0694b399bd0d | 134 | |
pierreblouet | 17:0694b399bd0d | 135 | RadioStatus const radioStatus = xbee.init(); |
pierreblouet | 17:0694b399bd0d | 136 | MBED_ASSERT(radioStatus == Success); |
leomerel | 12:9ec78b07c688 | 137 | |
pierreblouet | 17:0694b399bd0d | 138 | /* Wait until the device has joined the network */ |
pierreblouet | 17:0694b399bd0d | 139 | log_serial->printf("Waiting for device to join the network: "); |
pierreblouet | 17:0694b399bd0d | 140 | while (!xbee.is_joined()) { |
pierreblouet | 17:0694b399bd0d | 141 | wait_ms(1000); |
pierreblouet | 17:0694b399bd0d | 142 | log_serial->printf("."); |
leomerel | 12:9ec78b07c688 | 143 | } |
pierreblouet | 17:0694b399bd0d | 144 | log_serial->printf("OK\r\n"); |
leomerel | 22:c3b22291cb9d | 145 | return xbee; |
leomerel | 22:c3b22291cb9d | 146 | } |
leomerel | 22:c3b22291cb9d | 147 | |
leomerel | 22:c3b22291cb9d | 148 | int main() |
leomerel | 22:c3b22291cb9d | 149 | { |
leomerel | 22:c3b22291cb9d | 150 | XBeeZB xbee = connect_Xbee(); |
leomerel | 21:5adfcfd83e95 | 151 | |
leomerel | 22:c3b22291cb9d | 152 | //t_nbVoiture.start(nbVoiture); |
leomerel | 22:c3b22291cb9d | 153 | //t_receive.start(receive_cb); |
leomerel | 22:c3b22291cb9d | 154 | int i=0; |
leomerel | 21:5adfcfd83e95 | 155 | |
pierreblouet | 17:0694b399bd0d | 156 | const RemoteXBeeZB remoteDevice = RemoteXBeeZB(REMOTE_NODE_ADDR64); |
pierreblouet | 17:0694b399bd0d | 157 | while (true) { |
leomerel | 22:c3b22291cb9d | 158 | i++; |
pierreblouet | 17:0694b399bd0d | 159 | uint32_t receive_value = xbee.process_rx_frames(); |
pierreblouet | 18:972fb2937e41 | 160 | |
pierreblouet | 17:0694b399bd0d | 161 | log_serial->printf("%d"); |
pierreblouet | 17:0694b399bd0d | 162 | wait_ms(100); |
pierreblouet | 17:0694b399bd0d | 163 | log_serial->printf("."); |
pierreblouet | 17:0694b399bd0d | 164 | |
leomerel | 12:9ec78b07c688 | 165 | |
pierreblouet | 17:0694b399bd0d | 166 | //partie gestion des feux a mettre sur le coordinateur |
pierreblouet | 17:0694b399bd0d | 167 | ///////////////////////////////////////////// |
leomerel | 22:c3b22291cb9d | 168 | if(i==10){ |
leomerel | 22:c3b22291cb9d | 169 | send_explicit_data_to_remote_node(xbee, remoteDevice,1); |
leomerel | 22:c3b22291cb9d | 170 | feux_gauche_rouge = 0; |
leomerel | 22:c3b22291cb9d | 171 | feux_gauche_vert = 1; |
leomerel | 22:c3b22291cb9d | 172 | } |
leomerel | 22:c3b22291cb9d | 173 | if(i==20){ |
leomerel | 22:c3b22291cb9d | 174 | send_explicit_data_to_remote_node(xbee, remoteDevice,0); |
leomerel | 22:c3b22291cb9d | 175 | feux_gauche_rouge = 1; |
leomerel | 22:c3b22291cb9d | 176 | feux_gauche_vert = 0; |
leomerel | 22:c3b22291cb9d | 177 | i=0; |
leomerel | 22:c3b22291cb9d | 178 | } |
pierreblouet | 17:0694b399bd0d | 179 | //////////////////////////////////////////// |
leomerel | 22:c3b22291cb9d | 180 | |
leomerel | 22:c3b22291cb9d | 181 | if(voituresFeu1 >= 10){led1=1;} |
leomerel | 22:c3b22291cb9d | 182 | else{led1=0;} |
leomerel | 12:9ec78b07c688 | 183 | } |
pierreblouet | 17:0694b399bd0d | 184 | |
pierreblouet | 17:0694b399bd0d | 185 | // delete(log_serial); |
pierreblouet | 17:0694b399bd0d | 186 | } |