Gestion du Trafic Adaptatif - Code des mbed récepteurs

Dependencies:   XBeeLib mbed mbed-rtos

Committer:
leomerel
Date:
Sun Nov 18 21:14:55 2018 +0000
Revision:
21:2ad11875542c
Parent:
20:4e4d869ada85
Child:
22:d9287c62dd45
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?

UserRevisionLine numberNew contents of line
leomerel 20:4e4d869ada85 1 //YOYOYO
pierreblouet 16:b4d5eb2ee378 2
pierreblouet 17:0694b399bd0d 3 #include "mbed.h"
pierreblouet 17:0694b399bd0d 4 #include "XBeeLib.h"
leomerel 21:2ad11875542c 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 18:a302b82c4357 15 #define REMOTE_NODE_ADDR64_LSB ((uint32_t)0x40E779AF)
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 18:a302b82c4357 23 DigitalOut feux_gauche_rouge(p30);
pierreblouet 17:0694b399bd0d 24 //orange
pierreblouet 18:a302b82c4357 25 DigitalOut feux_gauche_orange(p28);
pierreblouet 17:0694b399bd0d 26 //vert
pierreblouet 18:a302b82c4357 27 DigitalOut feux_gauche_vert(p26);
leomerel 12:9ec78b07c688 28
leomerel 21:2ad11875542c 29 Thread t_nbVoiture;
leomerel 21:2ad11875542c 30
leomerel 21:2ad11875542c 31 DigitalIn boutonPlus(p24);
leomerel 21:2ad11875542c 32 DigitalIn boutonMoins(p23);
pierreblouet 17:0694b399bd0d 33 //liste des message a envoyer rouge et vert seulement pour le coordinateur
pierreblouet 17:0694b399bd0d 34 //////////////////////////
pierreblouet 17:0694b399bd0d 35 /////
pierreblouet 18:a302b82c4357 36 char rouge[] = "r";
pierreblouet 18:a302b82c4357 37 char vert[] = "v";
pierreblouet 17:0694b399bd0d 38 /////
pierreblouet 17:0694b399bd0d 39 uint8_t ok = 0x02;
pierreblouet 17:0694b399bd0d 40 //////////////////////////
pierreblouet 17:0694b399bd0d 41
leomerel 21:2ad11875542c 42 Serial *log_serial;
leomerel 21:2ad11875542c 43 XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600);
leomerel 21:2ad11875542c 44 const RemoteXBeeZB remoteDevice = RemoteXBeeZB(REMOTE_NODE_ADDR64);
pierreblouet 17:0694b399bd0d 45
pierreblouet 17:0694b399bd0d 46
pierreblouet 17:0694b399bd0d 47 /** Callback function, invoked at packet reception */
pierreblouet 17:0694b399bd0d 48 static void receive_cb(const RemoteXBeeZB& remote, bool broadcast, const uint8_t *const data, uint16_t len)
pierreblouet 17:0694b399bd0d 49 {
pierreblouet 17:0694b399bd0d 50 const uint64_t remote_addr64 = remote.get_addr64();
pierreblouet 17:0694b399bd0d 51
pierreblouet 17:0694b399bd0d 52 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 53
leomerel 21:2ad11875542c 54 if (data[0]==0x76){
leomerel 21:2ad11875542c 55 feux_gauche_rouge = 1;
leomerel 21:2ad11875542c 56 feux_gauche_vert = 0;
leomerel 21:2ad11875542c 57 }
leomerel 21:2ad11875542c 58 if (data[0]==0x72){
leomerel 21:2ad11875542c 59 feux_gauche_rouge = 0;
leomerel 21:2ad11875542c 60 feux_gauche_vert = 1;
leomerel 21:2ad11875542c 61 }
pierreblouet 18:a302b82c4357 62
pierreblouet 17:0694b399bd0d 63 log_serial->printf("\r\n");
emilmont 1:491820ee784d 64 }
leomerel 12:9ec78b07c688 65
pierreblouet 17:0694b399bd0d 66
pierreblouet 18:a302b82c4357 67 static void send_explicit_data_to_remote_node(XBeeZB& xbee, const RemoteXBeeZB& RemoteDevice,int message){
pierreblouet 18:a302b82c4357 68
pierreblouet 18:a302b82c4357 69 //const uint8_t data_len = strlen(data);
pierreblouet 17:0694b399bd0d 70 const uint8_t dstEP = 0xE8;
pierreblouet 17:0694b399bd0d 71 const uint8_t srcEP = 0xE8;
pierreblouet 17:0694b399bd0d 72 const uint16_t clusterID = 0x0011;
pierreblouet 17:0694b399bd0d 73 const uint16_t profileID = 0xC105;
pierreblouet 17:0694b399bd0d 74
leomerel 21:2ad11875542c 75 char data1[]="m"; // m comme "moins" - une voiture de moins
leomerel 21:2ad11875542c 76 char data2[]="p"; // p comme "plus" - une voiture de plus
pierreblouet 18:a302b82c4357 77 char data3[]="e";
pierreblouet 18:a302b82c4357 78 if (message ==0){
pierreblouet 18:a302b82c4357 79 const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data1, strlen(data1));
leomerel 21:2ad11875542c 80 /*if (txStatus == TxStatusSuccess)
pierreblouet 18:a302b82c4357 81 log_serial->printf("send_explicit_data_to_remote_node OK\r\n");
pierreblouet 18:a302b82c4357 82 else
leomerel 21:2ad11875542c 83 log_serial->printf("send_explicit_data_to_remote_node failed with %d\r\n", (int) txStatus);*/
pierreblouet 18:a302b82c4357 84 }
pierreblouet 18:a302b82c4357 85 else if (message ==1){
pierreblouet 18:a302b82c4357 86 const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data2, strlen(data2));
leomerel 21:2ad11875542c 87 /*if (txStatus == TxStatusSuccess)
pierreblouet 18:a302b82c4357 88 log_serial->printf("send_explicit_data_to_remote_node OK\r\n");
pierreblouet 18:a302b82c4357 89 else
leomerel 21:2ad11875542c 90 log_serial->printf("send_explicit_data_to_remote_node failed with %d\r\n", (int) txStatus);*/
pierreblouet 18:a302b82c4357 91 }
pierreblouet 18:a302b82c4357 92 else {
pierreblouet 18:a302b82c4357 93 const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data3, strlen(data3));
leomerel 21:2ad11875542c 94 /*if (txStatus == TxStatusSuccess)
pierreblouet 18:a302b82c4357 95 log_serial->printf("send_explicit_data_to_remote_node OK\r\n");
pierreblouet 18:a302b82c4357 96 else
leomerel 21:2ad11875542c 97 log_serial->printf("send_explicit_data_to_remote_node failed with %d\r\n", (int) txStatus);*/
pierreblouet 18:a302b82c4357 98 }
pierreblouet 18:a302b82c4357 99
pierreblouet 18:a302b82c4357 100
emilmont 1:491820ee784d 101 }
leomerel 12:9ec78b07c688 102
leomerel 21:2ad11875542c 103 void connect_Xbee()
pierreblouet 17:0694b399bd0d 104 {
pierreblouet 17:0694b399bd0d 105 log_serial = new Serial(DEBUG_TX, DEBUG_RX);
pierreblouet 17:0694b399bd0d 106 log_serial->baud(9600);
pierreblouet 17:0694b399bd0d 107 log_serial->printf("Sample application to demo how to receive unicast and broadcast data with the XBeeZB\r\n\r\n");
pierreblouet 17:0694b399bd0d 108 log_serial->printf(XB_LIB_BANNER);
pierreblouet 17:0694b399bd0d 109
leomerel 21:2ad11875542c 110 #if defined(ENABLE_LOGGING)
pierreblouet 17:0694b399bd0d 111 new DigiLoggerMbedSerial(log_serial, LogLevelInfo);
leomerel 21:2ad11875542c 112 #endif
pierreblouet 17:0694b399bd0d 113
leomerel 21:2ad11875542c 114 //xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600);
pierreblouet 17:0694b399bd0d 115
pierreblouet 17:0694b399bd0d 116 /* Register callbacks */
pierreblouet 17:0694b399bd0d 117 xbee.register_receive_cb(&receive_cb);
pierreblouet 17:0694b399bd0d 118
pierreblouet 17:0694b399bd0d 119 RadioStatus const radioStatus = xbee.init();
pierreblouet 17:0694b399bd0d 120 MBED_ASSERT(radioStatus == Success);
leomerel 12:9ec78b07c688 121
pierreblouet 17:0694b399bd0d 122 /* Wait until the device has joined the network */
pierreblouet 17:0694b399bd0d 123 log_serial->printf("Waiting for device to join the network: ");
pierreblouet 17:0694b399bd0d 124 while (!xbee.is_joined()) {
pierreblouet 17:0694b399bd0d 125 wait_ms(1000);
pierreblouet 17:0694b399bd0d 126 log_serial->printf(".");
leomerel 12:9ec78b07c688 127 }
pierreblouet 17:0694b399bd0d 128 log_serial->printf("OK\r\n");
leomerel 21:2ad11875542c 129 //return xbee;
leomerel 21:2ad11875542c 130 }
leomerel 12:9ec78b07c688 131
leomerel 21:2ad11875542c 132 void nbVoiture() {
leomerel 21:2ad11875542c 133 //TO DO : faire un compteur de voitures interne au recepteur et envoyer ce nombre
leomerel 21:2ad11875542c 134 //au coordinateur -> plus fiable en cas de perte de donnees dans un envoi
leomerel 21:2ad11875542c 135 while(1) {
leomerel 21:2ad11875542c 136 if(boutonPlus){
leomerel 21:2ad11875542c 137 send_explicit_data_to_remote_node(xbee, remoteDevice,1);
leomerel 21:2ad11875542c 138 Thread::wait(500);
leomerel 21:2ad11875542c 139 }
leomerel 21:2ad11875542c 140 if(boutonMoins){
leomerel 21:2ad11875542c 141 send_explicit_data_to_remote_node(xbee, remoteDevice,0);
leomerel 21:2ad11875542c 142 Thread::wait(500);
leomerel 21:2ad11875542c 143 }
leomerel 21:2ad11875542c 144
leomerel 21:2ad11875542c 145 }
leomerel 21:2ad11875542c 146 }
leomerel 21:2ad11875542c 147
leomerel 21:2ad11875542c 148 int main()
leomerel 21:2ad11875542c 149 {
leomerel 21:2ad11875542c 150 connect_Xbee();
leomerel 21:2ad11875542c 151 t_nbVoiture.start(nbVoiture);
pierreblouet 17:0694b399bd0d 152 while (true) {
pierreblouet 17:0694b399bd0d 153 uint32_t receive_value = xbee.process_rx_frames();
leomerel 21:2ad11875542c 154 /*log_serial->printf("%d");
pierreblouet 17:0694b399bd0d 155 wait_ms(100);
leomerel 21:2ad11875542c 156 log_serial->printf(".");*/
pierreblouet 17:0694b399bd0d 157
leomerel 21:2ad11875542c 158 /*if(boutonPlus){
leomerel 21:2ad11875542c 159 send_explicit_data_to_remote_node(xbee, remoteDevice,1);
leomerel 21:2ad11875542c 160 }
leomerel 21:2ad11875542c 161 if(boutonMoins){
leomerel 21:2ad11875542c 162 send_explicit_data_to_remote_node(xbee, remoteDevice,0);
leomerel 21:2ad11875542c 163 }*/
leomerel 12:9ec78b07c688 164
pierreblouet 17:0694b399bd0d 165 //partie gestion des feux a mettre sur le coordinateur
pierreblouet 17:0694b399bd0d 166 /////////////////////////////////////////////
leomerel 21:2ad11875542c 167 /*if(i==10){
pierreblouet 18:a302b82c4357 168 send_explicit_data_to_remote_node(xbee, remoteDevice,1);
pierreblouet 19:9f6297cdd07a 169 feux_gauche_rouge = 0;
pierreblouet 19:9f6297cdd07a 170 feux_gauche_vert = 1;
pierreblouet 17:0694b399bd0d 171 }
pierreblouet 17:0694b399bd0d 172 if(i==20){
pierreblouet 18:a302b82c4357 173 send_explicit_data_to_remote_node(xbee, remoteDevice,0);
pierreblouet 19:9f6297cdd07a 174 feux_gauche_rouge = 1;
pierreblouet 19:9f6297cdd07a 175 feux_gauche_vert = 0;
pierreblouet 17:0694b399bd0d 176 i=0;
leomerel 21:2ad11875542c 177 }*/
pierreblouet 17:0694b399bd0d 178 ////////////////////////////////////////////
leomerel 12:9ec78b07c688 179 }
pierreblouet 17:0694b399bd0d 180
pierreblouet 17:0694b399bd0d 181 // delete(log_serial);
pierreblouet 17:0694b399bd0d 182 }