Gestion du Traffic Adaptatif- Code du mbed coordinateur
Dependencies: XBeeLib mbed mbed-rtos EthernetInterface
main.cpp@31:7ca80c48a6d7, 2018-12-06 (annotated)
- Committer:
- leomerel
- Date:
- Thu Dec 06 20:28:22 2018 +0000
- Revision:
- 31:7ca80c48a6d7
- Parent:
- 30:f8df12b28719
VF; Version finale remise avec le rapport final. Par rapport a la version precedente, on a ajoute la communication avec le rasberryPi.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
leomerel | 31:7ca80c48a6d7 | 1 | /* |
leomerel | 31:7ca80c48a6d7 | 2 | * GTA (Gestion du Trafic Adaptatif) Sherbrooke |
leomerel | 31:7ca80c48a6d7 | 3 | * Code à mettre dans le mbed du noeud fixe |
leomerel | 31:7ca80c48a6d7 | 4 | * Par : Léo MEREL, Jean-Philippe BAILLARGEON, Pierre BLOUET, Alex VIGNEAULT, Mikaël LAMONTAGNE |
leomerel | 31:7ca80c48a6d7 | 5 | */ |
leomerel | 31:7ca80c48a6d7 | 6 | |
pierreblouet | 17:0694b399bd0d | 7 | #include "mbed.h" |
pierreblouet | 17:0694b399bd0d | 8 | #include "XBeeLib.h" |
leomerel | 21:5adfcfd83e95 | 9 | #include "rtos.h" |
leomerel | 29:109a6834f399 | 10 | #include "EthernetInterface.h" |
leomerel | 29:109a6834f399 | 11 | |
leomerel | 29:109a6834f399 | 12 | const char* ECHO_SERVER_ADDRESS = "192.168.1.133"; |
leomerel | 29:109a6834f399 | 13 | const int ECHO_SERVER_PORT = 7; |
leomerel | 25:fdb28df21d44 | 14 | |
pierreblouet | 17:0694b399bd0d | 15 | #if defined(ENABLE_LOGGING) |
pierreblouet | 17:0694b399bd0d | 16 | #include "DigiLoggerMbedSerial.h" |
pierreblouet | 17:0694b399bd0d | 17 | using namespace DigiLog; |
pierreblouet | 17:0694b399bd0d | 18 | #endif |
leomerel | 12:9ec78b07c688 | 19 | |
leomerel | 26:e9fc7e552c88 | 20 | //Adressage |
pierreblouet | 17:0694b399bd0d | 21 | #define REMOTE_NODE_ADDR64_MSB ((uint32_t)0x0013A200) |
leomerel | 24:bbde0b873a37 | 22 | #define REMOTE_NODE_ADDR64_LSB1 ((uint32_t)0x40C0E3A1) // adresse du recepteur 1 |
leomerel | 24:bbde0b873a37 | 23 | #define REMOTE_NODE_ADDR64_LSB2 ((uint32_t)0x4086DA0E) // adresse du recepteur 2 |
leomerel | 24:bbde0b873a37 | 24 | #define REMOTE_NODE_ADDR64_1 UINT64(REMOTE_NODE_ADDR64_MSB, REMOTE_NODE_ADDR64_LSB1) |
leomerel | 24:bbde0b873a37 | 25 | #define REMOTE_NODE_ADDR64_2 UINT64(REMOTE_NODE_ADDR64_MSB, REMOTE_NODE_ADDR64_LSB2) |
pierreblouet | 17:0694b399bd0d | 26 | |
pierreblouet | 17:0694b399bd0d | 27 | using namespace XBeeLib; |
pierreblouet | 17:0694b399bd0d | 28 | |
leomerel | 21:5adfcfd83e95 | 29 | //Nombre de voitures au feu |
leomerel | 22:c3b22291cb9d | 30 | int voituresFeu1 = 0; |
leomerel | 24:bbde0b873a37 | 31 | int voituresFeu2 = 0; |
leomerel | 21:5adfcfd83e95 | 32 | Thread t_nbVoiture; |
leomerel | 26:e9fc7e552c88 | 33 | Thread t_gestion; |
leomerel | 21:5adfcfd83e95 | 34 | |
leomerel | 26:e9fc7e552c88 | 35 | //Gestion |
leomerel | 28:50d89e4255da | 36 | int temps = 5000; //durée (en ms) pour qu'une voiture traverse le chantier |
leomerel | 31:7ca80c48a6d7 | 37 | int duree_cycle = 10000; // durée (en ms) du cycle d'allumage classique |
leomerel | 25:fdb28df21d44 | 38 | Timer timer; |
leomerel | 31:7ca80c48a6d7 | 39 | int isRed; |
leomerel | 28:50d89e4255da | 40 | Thread t_setFeu1Vert; |
leomerel | 28:50d89e4255da | 41 | Thread t_setFeu2Vert; |
leomerel | 29:109a6834f399 | 42 | bool stay1=0; /* stay est une variable qui est à 1 lorsqu'on veut qu'un feu reste à une */ |
leomerel | 29:109a6834f399 | 43 | bool stay2=0; /* certaine couleur jusqu'à ce qu'une autre commande lui dise de changer de couleur */ |
pierreblouet | 17:0694b399bd0d | 44 | |
leomerel | 26:e9fc7e552c88 | 45 | //Communication |
pierreblouet | 17:0694b399bd0d | 46 | Serial *log_serial; |
leomerel | 23:2a6ea31d8e23 | 47 | XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600); |
leomerel | 24:bbde0b873a37 | 48 | const RemoteXBeeZB remoteDevice1 = RemoteXBeeZB(REMOTE_NODE_ADDR64_1); |
leomerel | 24:bbde0b873a37 | 49 | const RemoteXBeeZB remoteDevice2 = RemoteXBeeZB(REMOTE_NODE_ADDR64_2); |
leomerel | 28:50d89e4255da | 50 | char set_rouge[]="r"; // message pour demander a un recepteur de passer au rouge |
leomerel | 28:50d89e4255da | 51 | char set_vert[]="v"; // message pour demander a un recepteur de passer au vert |
leomerel | 24:bbde0b873a37 | 52 | |
leomerel | 29:109a6834f399 | 53 | |
leomerel | 29:109a6834f399 | 54 | InterruptIn button(p5); |
leomerel | 29:109a6834f399 | 55 | DigitalOut led1(LED1); |
leomerel | 29:109a6834f399 | 56 | DigitalOut led2(LED2); |
leomerel | 29:109a6834f399 | 57 | DigitalOut led3(LED3); |
leomerel | 29:109a6834f399 | 58 | DigitalOut led4(LED4); |
leomerel | 29:109a6834f399 | 59 | uint8_t vehicule_urgence=0; |
leomerel | 29:109a6834f399 | 60 | Thread t_urgence; |
leomerel | 29:109a6834f399 | 61 | Thread t_blink; |
leomerel | 30:f8df12b28719 | 62 | Thread t_Ethernet; |
leomerel | 30:f8df12b28719 | 63 | |
leomerel | 30:f8df12b28719 | 64 | Mail<int,128> mail_box; |
leomerel | 29:109a6834f399 | 65 | |
leomerel | 31:7ca80c48a6d7 | 66 | // Envoyer un message au rasberryPi |
leomerel | 29:109a6834f399 | 67 | void sendMessage() { |
leomerel | 29:109a6834f399 | 68 | EthernetInterface eth; |
leomerel | 29:109a6834f399 | 69 | eth.init(); //Use DHCP |
leomerel | 29:109a6834f399 | 70 | eth.connect(); |
leomerel | 31:7ca80c48a6d7 | 71 | printf("\r\nClient IP Address is %s\r\n", eth.getIPAddress()); |
leomerel | 29:109a6834f399 | 72 | |
leomerel | 29:109a6834f399 | 73 | // Connect to Server |
leomerel | 29:109a6834f399 | 74 | TCPSocketConnection socket; |
leomerel | 29:109a6834f399 | 75 | while (socket.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) { |
leomerel | 31:7ca80c48a6d7 | 76 | printf("Unable to connect to (%s) on port (%d)\r\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT); |
leomerel | 29:109a6834f399 | 77 | wait(1); |
leomerel | 29:109a6834f399 | 78 | } |
leomerel | 31:7ca80c48a6d7 | 79 | printf("Connected to Server at %s\r\n",ECHO_SERVER_ADDRESS); |
leomerel | 30:f8df12b28719 | 80 | int * i = 0; |
leomerel | 31:7ca80c48a6d7 | 81 | char hello[] = "100"; |
leomerel | 29:109a6834f399 | 82 | while(1) { |
leomerel | 30:f8df12b28719 | 83 | osEvent evt = mail_box.get(); |
leomerel | 30:f8df12b28719 | 84 | if (evt.status == osEventMail) { |
leomerel | 30:f8df12b28719 | 85 | i = (int*)evt.value.p; |
leomerel | 31:7ca80c48a6d7 | 86 | if(*i<10){ |
leomerel | 31:7ca80c48a6d7 | 87 | sprintf(hello, "00%d\r\n", *i); |
leomerel | 31:7ca80c48a6d7 | 88 | } |
leomerel | 31:7ca80c48a6d7 | 89 | else if(*i<100){ |
leomerel | 31:7ca80c48a6d7 | 90 | sprintf(hello, "0%d\r\n", *i); |
leomerel | 31:7ca80c48a6d7 | 91 | } |
leomerel | 31:7ca80c48a6d7 | 92 | else{ |
leomerel | 31:7ca80c48a6d7 | 93 | sprintf(hello, "%d\r\n", *i); |
leomerel | 31:7ca80c48a6d7 | 94 | } |
leomerel | 31:7ca80c48a6d7 | 95 | printf("Sending message to Server : '%s' \r\n",hello); |
leomerel | 30:f8df12b28719 | 96 | socket.send_all(hello, sizeof(hello) - 1); |
leomerel | 30:f8df12b28719 | 97 | mail_box.free(i); |
leomerel | 30:f8df12b28719 | 98 | } |
leomerel | 29:109a6834f399 | 99 | } |
leomerel | 29:109a6834f399 | 100 | |
leomerel | 29:109a6834f399 | 101 | |
leomerel | 29:109a6834f399 | 102 | } |
leomerel | 29:109a6834f399 | 103 | |
leomerel | 31:7ca80c48a6d7 | 104 | // Envoyer un message à un autre mbed, via un xbee d'adresse connue |
leomerel | 25:fdb28df21d44 | 105 | static void send_explicit_data_to_remote_node(XBeeZB& xbee, const RemoteXBeeZB& RemoteDevice,const char * data) |
leomerel | 24:bbde0b873a37 | 106 | { |
leomerel | 24:bbde0b873a37 | 107 | const uint8_t dstEP = 0xE8; |
leomerel | 24:bbde0b873a37 | 108 | const uint8_t srcEP = 0xE8; |
leomerel | 24:bbde0b873a37 | 109 | const uint16_t clusterID = 0x0011; |
leomerel | 24:bbde0b873a37 | 110 | const uint16_t profileID = 0xC105; |
leomerel | 24:bbde0b873a37 | 111 | |
leomerel | 25:fdb28df21d44 | 112 | const TxStatus txStatus = xbee.send_data(RemoteDevice, dstEP, srcEP, clusterID, profileID, (const uint8_t *)data, strlen(data)); |
leomerel | 24:bbde0b873a37 | 113 | } |
pierreblouet | 17:0694b399bd0d | 114 | |
leomerel | 28:50d89e4255da | 115 | //Fonction callback invoquée à la réception d'un message |
pierreblouet | 17:0694b399bd0d | 116 | static void receive_cb(const RemoteXBeeZB& remote, bool broadcast, const uint8_t *const data, uint16_t len) |
pierreblouet | 17:0694b399bd0d | 117 | { |
leomerel | 28:50d89e4255da | 118 | const uint64_t remote_addr64 = remote.get_addr64(); //adresse de l'expéditeur du message |
leomerel | 22:c3b22291cb9d | 119 | |
leomerel | 24:bbde0b873a37 | 120 | if (data[0]==0x6D){ |
leomerel | 24:bbde0b873a37 | 121 | // baisse le compteur de voiture au feu 1 |
leomerel | 24:bbde0b873a37 | 122 | if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1) && (voituresFeu1!=0)){ |
leomerel | 24:bbde0b873a37 | 123 | voituresFeu1--; |
leomerel | 24:bbde0b873a37 | 124 | } |
leomerel | 24:bbde0b873a37 | 125 | // baisse le compteur de voiture au feu 2 |
leomerel | 24:bbde0b873a37 | 126 | else if ( (UINT64_LO32(remote_addr64)==UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)) && (voituresFeu2!=0)){ |
leomerel | 24:bbde0b873a37 | 127 | voituresFeu2--; |
leomerel | 24:bbde0b873a37 | 128 | } |
leomerel | 25:fdb28df21d44 | 129 | log_serial->printf("Nombre de voitures feu 1 : %d\r\n",voituresFeu1); |
leomerel | 25:fdb28df21d44 | 130 | log_serial->printf("Nombre de voitures feu 2 : %d\r\n",voituresFeu2); |
leomerel | 30:f8df12b28719 | 131 | int *a = mail_box.alloc(); |
leomerel | 31:7ca80c48a6d7 | 132 | *a = voituresFeu1+voituresFeu2; |
leomerel | 31:7ca80c48a6d7 | 133 | log_serial->printf("Voiture total : %d\r\n",*a); |
leomerel | 30:f8df12b28719 | 134 | mail_box.put(a); |
leomerel | 22:c3b22291cb9d | 135 | } |
leomerel | 23:2a6ea31d8e23 | 136 | else if (data[0]==0x70){ |
leomerel | 24:bbde0b873a37 | 137 | // augmente le compteur de voiture au feu 1 |
leomerel | 24:bbde0b873a37 | 138 | if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1)){ |
leomerel | 24:bbde0b873a37 | 139 | voituresFeu1++; |
leomerel | 24:bbde0b873a37 | 140 | } |
leomerel | 24:bbde0b873a37 | 141 | // augmente le compteur de voiture au feu 2 |
leomerel | 24:bbde0b873a37 | 142 | else if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)){ |
leomerel | 24:bbde0b873a37 | 143 | voituresFeu2++; |
leomerel | 24:bbde0b873a37 | 144 | } |
leomerel | 25:fdb28df21d44 | 145 | log_serial->printf("Nombre de voitures feu 1 : %d\r\n",voituresFeu1); |
leomerel | 25:fdb28df21d44 | 146 | log_serial->printf("Nombre de voitures feu 2 : %d\r\n",voituresFeu2); |
leomerel | 30:f8df12b28719 | 147 | int *a = mail_box.alloc(); |
leomerel | 31:7ca80c48a6d7 | 148 | *a = voituresFeu1+voituresFeu2; |
leomerel | 31:7ca80c48a6d7 | 149 | log_serial->printf("Voiture total : %d\r\n",*a); |
leomerel | 30:f8df12b28719 | 150 | mail_box.put(a); |
leomerel | 22:c3b22291cb9d | 151 | } |
leomerel | 23:2a6ea31d8e23 | 152 | else if (data[0]==0x72){ |
leomerel | 28:50d89e4255da | 153 | // confirmation que r1 est bien rouge, donc peut demander au r2 de passer au vert |
leomerel | 24:bbde0b873a37 | 154 | if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB1)){ |
leomerel | 29:109a6834f399 | 155 | if(vehicule_urgence==0){ |
leomerel | 31:7ca80c48a6d7 | 156 | isRed = 1; |
leomerel | 29:109a6834f399 | 157 | t_setFeu2Vert.signal_set(0x1); |
leomerel | 29:109a6834f399 | 158 | } |
leomerel | 24:bbde0b873a37 | 159 | } |
leomerel | 28:50d89e4255da | 160 | // confirmation que r2 est bien rouge, donc peut demander au r1 de passer au vert |
leomerel | 24:bbde0b873a37 | 161 | else if ( UINT64_LO32(remote_addr64) == UINT64_LO32(REMOTE_NODE_ADDR64_LSB2)){ |
leomerel | 29:109a6834f399 | 162 | if(vehicule_urgence==0){ |
leomerel | 31:7ca80c48a6d7 | 163 | isRed = 2; |
leomerel | 29:109a6834f399 | 164 | t_setFeu1Vert.signal_set(0x1); |
leomerel | 29:109a6834f399 | 165 | } |
leomerel | 24:bbde0b873a37 | 166 | } |
leomerel | 23:2a6ea31d8e23 | 167 | } |
pierreblouet | 17:0694b399bd0d | 168 | log_serial->printf("\r\n"); |
emilmont | 1:491820ee784d | 169 | } |
leomerel | 12:9ec78b07c688 | 170 | |
leomerel | 28:50d89e4255da | 171 | void setFeu1Vert(){ |
leomerel | 28:50d89e4255da | 172 | while(1){ |
leomerel | 28:50d89e4255da | 173 | Thread::signal_wait(0x1); |
leomerel | 28:50d89e4255da | 174 | Thread::wait(temps); |
leomerel | 29:109a6834f399 | 175 | if(vehicule_urgence==0){ |
leomerel | 29:109a6834f399 | 176 | send_explicit_data_to_remote_node(xbee, remoteDevice1,set_vert); |
leomerel | 31:7ca80c48a6d7 | 177 | log_serial->printf("r1 passe au vert\r\n"); |
leomerel | 29:109a6834f399 | 178 | } |
leomerel | 28:50d89e4255da | 179 | } |
leomerel | 28:50d89e4255da | 180 | } |
leomerel | 28:50d89e4255da | 181 | |
leomerel | 28:50d89e4255da | 182 | void setFeu2Vert(){ |
leomerel | 28:50d89e4255da | 183 | while(1){ |
leomerel | 28:50d89e4255da | 184 | Thread::signal_wait(0x1); |
leomerel | 28:50d89e4255da | 185 | Thread::wait(temps); |
leomerel | 29:109a6834f399 | 186 | if(vehicule_urgence==0){ |
leomerel | 29:109a6834f399 | 187 | send_explicit_data_to_remote_node(xbee, remoteDevice2,set_vert); |
leomerel | 29:109a6834f399 | 188 | } |
leomerel | 31:7ca80c48a6d7 | 189 | log_serial->printf("r2 passe au vert\r\n"); |
leomerel | 28:50d89e4255da | 190 | } |
leomerel | 28:50d89e4255da | 191 | } |
leomerel | 28:50d89e4255da | 192 | |
leomerel | 31:7ca80c48a6d7 | 193 | // Connection faite au démarrage du programme lorsqu'on reset le mbed |
leomerel | 23:2a6ea31d8e23 | 194 | void connect_Xbee() |
pierreblouet | 17:0694b399bd0d | 195 | { |
pierreblouet | 17:0694b399bd0d | 196 | log_serial = new Serial(DEBUG_TX, DEBUG_RX); |
pierreblouet | 17:0694b399bd0d | 197 | log_serial->baud(9600); |
pierreblouet | 17:0694b399bd0d | 198 | |
leomerel | 22:c3b22291cb9d | 199 | #if defined(ENABLE_LOGGING) |
pierreblouet | 17:0694b399bd0d | 200 | new DigiLoggerMbedSerial(log_serial, LogLevelInfo); |
leomerel | 22:c3b22291cb9d | 201 | #endif |
pierreblouet | 17:0694b399bd0d | 202 | |
leomerel | 28:50d89e4255da | 203 | // Register callbacks |
pierreblouet | 17:0694b399bd0d | 204 | xbee.register_receive_cb(&receive_cb); |
pierreblouet | 17:0694b399bd0d | 205 | |
pierreblouet | 17:0694b399bd0d | 206 | RadioStatus const radioStatus = xbee.init(); |
pierreblouet | 17:0694b399bd0d | 207 | MBED_ASSERT(radioStatus == Success); |
leomerel | 12:9ec78b07c688 | 208 | |
leomerel | 28:50d89e4255da | 209 | //Attend que l'appareil rejoigne le réseau |
leomerel | 28:50d89e4255da | 210 | log_serial->printf("En attente de connexion au reseau: "); |
pierreblouet | 17:0694b399bd0d | 211 | while (!xbee.is_joined()) { |
pierreblouet | 17:0694b399bd0d | 212 | wait_ms(1000); |
pierreblouet | 17:0694b399bd0d | 213 | log_serial->printf("."); |
leomerel | 12:9ec78b07c688 | 214 | } |
leomerel | 28:50d89e4255da | 215 | log_serial->printf("Connection reussie.\r\n"); |
leomerel | 31:7ca80c48a6d7 | 216 | isRed=1; |
leomerel | 23:2a6ea31d8e23 | 217 | } |
leomerel | 23:2a6ea31d8e23 | 218 | |
leomerel | 23:2a6ea31d8e23 | 219 | void gestion() |
leomerel | 23:2a6ea31d8e23 | 220 | { |
leomerel | 23:2a6ea31d8e23 | 221 | while(1) |
leomerel | 23:2a6ea31d8e23 | 222 | { |
leomerel | 28:50d89e4255da | 223 | /* Si il n'y a pas de voitures à un feu ou si il y a beaucoup plus de voitures à l'autre feu, */ |
leomerel | 28:50d89e4255da | 224 | /* alors l'autre feu passera au vert et le feu avec le moins de voitures passera au rouge. */ |
leomerel | 28:50d89e4255da | 225 | if ( ((voituresFeu1==0) && (voituresFeu2!=0)) || (voituresFeu2-voituresFeu1>=10) ){ |
leomerel | 25:fdb28df21d44 | 226 | if(stay1==0){ |
leomerel | 25:fdb28df21d44 | 227 | stay2=0; |
leomerel | 25:fdb28df21d44 | 228 | stay1=1; |
leomerel | 26:e9fc7e552c88 | 229 | send_explicit_data_to_remote_node(xbee, remoteDevice1,set_rouge); |
leomerel | 27:0085fca436e1 | 230 | Thread::wait(100); |
leomerel | 25:fdb28df21d44 | 231 | } |
leomerel | 23:2a6ea31d8e23 | 232 | } |
leomerel | 28:50d89e4255da | 233 | else if ( ((voituresFeu2==0) && (voituresFeu1!=0)) || (voituresFeu1-voituresFeu2>=10) ){ |
leomerel | 25:fdb28df21d44 | 234 | if(stay2==0){ |
leomerel | 25:fdb28df21d44 | 235 | stay1=0; |
leomerel | 25:fdb28df21d44 | 236 | stay2=1; |
leomerel | 26:e9fc7e552c88 | 237 | send_explicit_data_to_remote_node(xbee, remoteDevice2,set_rouge); |
leomerel | 27:0085fca436e1 | 238 | Thread::wait(100); |
leomerel | 25:fdb28df21d44 | 239 | } |
leomerel | 23:2a6ea31d8e23 | 240 | } |
leomerel | 28:50d89e4255da | 241 | /* Si on est dans aucun de ces deux cas, alors les feux suivront un cycle d'allumage classique. */ |
leomerel | 25:fdb28df21d44 | 242 | else{ |
leomerel | 25:fdb28df21d44 | 243 | stay1=0; |
leomerel | 25:fdb28df21d44 | 244 | stay2=0; |
leomerel | 31:7ca80c48a6d7 | 245 | if(isRed==1){ |
leomerel | 26:e9fc7e552c88 | 246 | send_explicit_data_to_remote_node(xbee, remoteDevice2,set_rouge); |
leomerel | 25:fdb28df21d44 | 247 | } |
leomerel | 31:7ca80c48a6d7 | 248 | else if(isRed==2){ |
leomerel | 26:e9fc7e552c88 | 249 | send_explicit_data_to_remote_node(xbee, remoteDevice1,set_rouge); |
leomerel | 25:fdb28df21d44 | 250 | } |
leomerel | 31:7ca80c48a6d7 | 251 | Thread::wait(duree_cycle); |
leomerel | 25:fdb28df21d44 | 252 | } |
leomerel | 23:2a6ea31d8e23 | 253 | } |
leomerel | 22:c3b22291cb9d | 254 | } |
leomerel | 22:c3b22291cb9d | 255 | |
leomerel | 29:109a6834f399 | 256 | void rise() { |
leomerel | 29:109a6834f399 | 257 | led3 = !led3; |
leomerel | 29:109a6834f399 | 258 | t_urgence.signal_set(0x1); |
leomerel | 29:109a6834f399 | 259 | } |
leomerel | 29:109a6834f399 | 260 | |
leomerel | 29:109a6834f399 | 261 | void blink(){ |
leomerel | 29:109a6834f399 | 262 | while(1){ |
leomerel | 29:109a6834f399 | 263 | Thread::signal_wait(0x1); |
leomerel | 29:109a6834f399 | 264 | while(vehicule_urgence){ |
leomerel | 29:109a6834f399 | 265 | led4 = !led4; |
leomerel | 29:109a6834f399 | 266 | Thread::wait(200); |
leomerel | 29:109a6834f399 | 267 | } |
leomerel | 29:109a6834f399 | 268 | led4 = 0; |
leomerel | 29:109a6834f399 | 269 | } |
leomerel | 29:109a6834f399 | 270 | } |
leomerel | 29:109a6834f399 | 271 | |
leomerel | 29:109a6834f399 | 272 | void urgence(){ |
leomerel | 29:109a6834f399 | 273 | while(1){ |
leomerel | 29:109a6834f399 | 274 | Thread::signal_wait(0x1); |
leomerel | 29:109a6834f399 | 275 | t_blink.signal_set(0x1); |
leomerel | 29:109a6834f399 | 276 | vehicule_urgence = 1; |
leomerel | 29:109a6834f399 | 277 | send_explicit_data_to_remote_node(xbee, remoteDevice1,set_rouge); |
leomerel | 29:109a6834f399 | 278 | send_explicit_data_to_remote_node(xbee, remoteDevice2,set_rouge); |
leomerel | 29:109a6834f399 | 279 | Thread::wait(10000); |
leomerel | 29:109a6834f399 | 280 | stay1=0; |
leomerel | 29:109a6834f399 | 281 | stay2=0; |
leomerel | 29:109a6834f399 | 282 | vehicule_urgence = 0; |
leomerel | 29:109a6834f399 | 283 | } |
leomerel | 29:109a6834f399 | 284 | } |
leomerel | 29:109a6834f399 | 285 | |
leomerel | 31:7ca80c48a6d7 | 286 | int main(){ |
leomerel | 29:109a6834f399 | 287 | led2=0; |
leomerel | 29:109a6834f399 | 288 | led3=0; |
leomerel | 29:109a6834f399 | 289 | led4=0; |
leomerel | 23:2a6ea31d8e23 | 290 | connect_Xbee(); |
leomerel | 21:5adfcfd83e95 | 291 | |
leomerel | 23:2a6ea31d8e23 | 292 | t_gestion.start(gestion); |
leomerel | 28:50d89e4255da | 293 | t_setFeu1Vert.start(setFeu1Vert); |
leomerel | 28:50d89e4255da | 294 | t_setFeu2Vert.start(setFeu2Vert); |
leomerel | 29:109a6834f399 | 295 | t_urgence.start(urgence); |
leomerel | 29:109a6834f399 | 296 | t_blink.start(blink); |
leomerel | 30:f8df12b28719 | 297 | t_Ethernet.start(sendMessage); |
leomerel | 29:109a6834f399 | 298 | |
leomerel | 29:109a6834f399 | 299 | button.rise(&rise); // attach the address of the flip function to the rising edge |
leomerel | 23:2a6ea31d8e23 | 300 | |
leomerel | 25:fdb28df21d44 | 301 | while (true) { |
leomerel | 25:fdb28df21d44 | 302 | uint32_t receive_value = xbee.process_rx_frames();//nécessaire pour lire (constamment) la valeur recue |
leomerel | 12:9ec78b07c688 | 303 | } |
pierreblouet | 17:0694b399bd0d | 304 | } |