Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Repo_Noeud_Mobile by
main.cpp@22:cccb77300fd5, 2015-03-22 (annotated)
- Committer:
- llarose
- Date:
- Sun Mar 22 19:57:40 2015 +0000
- Revision:
- 22:cccb77300fd5
- Parent:
- 17:1a634bb615f3
- Child:
- 26:5700cde2350b
- Child:
- 30:389d09853cd1
sending data via xbee
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
llarose | 1:601d2922ff06 | 1 | /* S5 Projet - Conception d'un systeme embarque reseaute |
llarose | 1:601d2922ff06 | 2 | * main.cpp |
groygirard | 6:fd1bf5563299 | 3 | * |
llarose | 1:601d2922ff06 | 4 | * @author Equipe de projet 2 |
groygirard | 6:fd1bf5563299 | 5 | * |
llarose | 1:601d2922ff06 | 6 | */ |
groygirard | 14:bda91cead7f2 | 7 | |
groygirard | 6:fd1bf5563299 | 8 | // System libraries |
llarose | 1:601d2922ff06 | 9 | #include "mbed.h" |
llarose | 1:601d2922ff06 | 10 | #include "rtos.h" |
groygirard | 14:bda91cead7f2 | 11 | |
groygirard | 6:fd1bf5563299 | 12 | // Proprietary libraries |
groygirard | 8:51f6c8f59449 | 13 | #include "Cible.h" |
groygirard | 6:fd1bf5563299 | 14 | #include "CountDown.h" |
llarose | 1:601d2922ff06 | 15 | #include "FlexSensor.h" |
groygirard | 6:fd1bf5563299 | 16 | #include "MMA8452Q.h" |
llarose | 22:cccb77300fd5 | 17 | #include "Structure.h" |
llarose | 22:cccb77300fd5 | 18 | #include "Xbee.h" |
groygirard | 14:bda91cead7f2 | 19 | |
llarose | 1:601d2922ff06 | 20 | #define GO 0x01 |
llarose | 17:1a634bb615f3 | 21 | #define ACTIVATE_ACCEL 0 |
groygirard | 14:bda91cead7f2 | 22 | |
groygirard | 12:ebb08773dbdb | 23 | Serial m_pc(USBTX, USBRX); |
llarose | 22:cccb77300fd5 | 24 | LocalFileSystem local("local"); // file system for config.txt |
groygirard | 14:bda91cead7f2 | 25 | |
groygirard | 6:fd1bf5563299 | 26 | //PROTOTYPES DE FONCTION |
llarose | 1:601d2922ff06 | 27 | void gunner(void const* args); |
llarose | 1:601d2922ff06 | 28 | void rps(void const* args); |
llarose | 1:601d2922ff06 | 29 | void airGuitar(void const* args); |
groygirard | 12:ebb08773dbdb | 30 | void get_sensor_data(void const* args); |
llarose | 17:1a634bb615f3 | 31 | void flex(void const* args); |
groygirard | 15:dc18545822b3 | 32 | void analyze_sensor_data(void const* args); |
groygirard | 15:dc18545822b3 | 33 | void analyze_GUNNER(uint8_t axe_x); |
groygirard | 15:dc18545822b3 | 34 | void analyze_RPS(uint8_t axe_z); |
groygirard | 15:dc18545822b3 | 35 | void analyze_GUITAR(uint8_t axe_z); |
groygirard | 15:dc18545822b3 | 36 | void etat_de_jeu(void const *args); |
groygirard | 15:dc18545822b3 | 37 | void reception_coord(void const *args); |
llarose | 22:cccb77300fd5 | 38 | void ReadConfig(); |
groygirard | 14:bda91cead7f2 | 39 | |
groygirard | 12:ebb08773dbdb | 40 | uint8_t play = 0; |
groygirard | 14:bda91cead7f2 | 41 | |
llarose | 17:1a634bb615f3 | 42 | FlexSensor flexSensors(p15, p16, p17); // flex sensor 1. |
groygirard | 6:fd1bf5563299 | 43 | Accel accel; |
groygirard | 12:ebb08773dbdb | 44 | RtosTimer *sync; |
llarose | 22:cccb77300fd5 | 45 | GameMode_e mode = GUNNER; |
llarose | 22:cccb77300fd5 | 46 | short PanId; |
llarose | 22:cccb77300fd5 | 47 | Xbee* xbee = NULL; |
groygirard | 14:bda91cead7f2 | 48 | |
groygirard | 15:dc18545822b3 | 49 | Thread *threads[3]; |
groygirard | 6:fd1bf5563299 | 50 | Thread* gunner_thread_ptr = NULL; // Possiblement mettre dans un tableau |
groygirard | 6:fd1bf5563299 | 51 | Thread* rps_thread_ptr = NULL; // avec des position codees |
groygirard | 6:fd1bf5563299 | 52 | Thread* airguitar_thread_ptr = NULL; // dans des define. guillaume |
llarose | 17:1a634bb615f3 | 53 | Thread* flex_thread_ptr = NULL; // Lecture des entrées analogiques |
groygirard | 14:bda91cead7f2 | 54 | |
groygirard | 12:ebb08773dbdb | 55 | typedef struct { |
groygirard | 12:ebb08773dbdb | 56 | accel_t accel_data; |
groygirard | 12:ebb08773dbdb | 57 | flex_t flex_data; |
groygirard | 12:ebb08773dbdb | 58 | } sensors_t; |
groygirard | 14:bda91cead7f2 | 59 | |
groygirard | 12:ebb08773dbdb | 60 | Mail<sensors_t, 32> mailbox_sensors; |
groygirard | 14:bda91cead7f2 | 61 | |
groygirard | 14:bda91cead7f2 | 62 | |
llarose | 1:601d2922ff06 | 63 | int main(void const* args) |
llarose | 1:601d2922ff06 | 64 | { |
llarose | 17:1a634bb615f3 | 65 | m_pc.printf("==== PROGRAM START MOBILE ====\r\n"); |
groygirard | 6:fd1bf5563299 | 66 | // Initializing the accelerometer |
llarose | 22:cccb77300fd5 | 67 | |
llarose | 22:cccb77300fd5 | 68 | ReadConfig(); //read config file |
llarose | 22:cccb77300fd5 | 69 | m_pc.printf("PANID %#04x\r\n", PanId); |
llarose | 22:cccb77300fd5 | 70 | xbee = new Xbee(PanId, p13, p14); //set PAN ID |
llarose | 22:cccb77300fd5 | 71 | |
llarose | 17:1a634bb615f3 | 72 | #if ACTIVATE_ACCEL |
llarose | 17:1a634bb615f3 | 73 | accel = Accel(); |
llarose | 17:1a634bb615f3 | 74 | accel.init_MMA8452(); |
llarose | 17:1a634bb615f3 | 75 | RtosTimer timer(get_sensor_data, osTimerPeriodic, (void *)0); |
llarose | 17:1a634bb615f3 | 76 | sync = &timer; |
llarose | 17:1a634bb615f3 | 77 | #endif |
groygirard | 15:dc18545822b3 | 78 | |
groygirard | 6:fd1bf5563299 | 79 | switch(mode) { |
llarose | 1:601d2922ff06 | 80 | case GUNNER: |
llarose | 1:601d2922ff06 | 81 | gunner_thread_ptr = new Thread(gunner); |
llarose | 17:1a634bb615f3 | 82 | flex_thread_ptr = new Thread(flex); |
llarose | 17:1a634bb615f3 | 83 | m_pc.printf("gunner mode started\r\n"); |
llarose | 1:601d2922ff06 | 84 | break; |
llarose | 1:601d2922ff06 | 85 | case RPS: |
llarose | 1:601d2922ff06 | 86 | rps_thread_ptr = new Thread(rps); |
llarose | 1:601d2922ff06 | 87 | break; |
llarose | 1:601d2922ff06 | 88 | case AirGuitar: |
llarose | 1:601d2922ff06 | 89 | airguitar_thread_ptr = new Thread(airGuitar); |
llarose | 1:601d2922ff06 | 90 | break; |
llarose | 1:601d2922ff06 | 91 | default: |
llarose | 1:601d2922ff06 | 92 | break; |
llarose | 1:601d2922ff06 | 93 | } |
llarose | 17:1a634bb615f3 | 94 | #if ACTIVATE_ACCEL |
llarose | 17:1a634bb615f3 | 95 | Thread thread0(reception_coord); |
llarose | 17:1a634bb615f3 | 96 | Thread thread1(etat_de_jeu); |
llarose | 17:1a634bb615f3 | 97 | Thread thread2(analyze_sensor_data); |
llarose | 17:1a634bb615f3 | 98 | threads[0] = &thread0; |
llarose | 17:1a634bb615f3 | 99 | threads[1] = &thread1; |
llarose | 17:1a634bb615f3 | 100 | threads[2] = &thread2; |
llarose | 17:1a634bb615f3 | 101 | #endif |
groygirard | 14:bda91cead7f2 | 102 | |
groygirard | 12:ebb08773dbdb | 103 | while(true) { |
groygirard | 6:fd1bf5563299 | 104 | } |
llarose | 1:601d2922ff06 | 105 | } |
groygirard | 14:bda91cead7f2 | 106 | |
llarose | 1:601d2922ff06 | 107 | void gunner(void const* args) |
groygirard | 12:ebb08773dbdb | 108 | { |
groygirard | 12:ebb08773dbdb | 109 | // local variables |
llarose | 3:a77d02cb5694 | 110 | Cible* cible = new Cible(); |
llarose | 17:1a634bb615f3 | 111 | CountDown countDown(500); |
llarose | 3:a77d02cb5694 | 112 | countDown.run(); |
groygirard | 14:bda91cead7f2 | 113 | |
groygirard | 12:ebb08773dbdb | 114 | while(true) { |
llarose | 3:a77d02cb5694 | 115 | // Thread::signal_wait(GO); |
llarose | 3:a77d02cb5694 | 116 | cible->reset(); |
llarose | 3:a77d02cb5694 | 117 | int target = rand() % 3; |
llarose | 3:a77d02cb5694 | 118 | cible->set(target); |
llarose | 3:a77d02cb5694 | 119 | countDown.run(); |
llarose | 17:1a634bb615f3 | 120 | |
llarose | 17:1a634bb615f3 | 121 | flex_t data = flexSensors.get_flex_values(); |
llarose | 17:1a634bb615f3 | 122 | m_pc.printf("index: %u, majeur: %u, annulaire: %u\n\r", data.index, data.majeur, data.annulaire); |
llarose | 22:cccb77300fd5 | 123 | char data_test[3] = {data.index, data.majeur, data.annulaire}; |
llarose | 22:cccb77300fd5 | 124 | xbee->EnvoyerDonnees(data_test,3); |
llarose | 1:601d2922ff06 | 125 | } |
llarose | 1:601d2922ff06 | 126 | } |
groygirard | 14:bda91cead7f2 | 127 | |
llarose | 17:1a634bb615f3 | 128 | void flex(void const* args) |
llarose | 17:1a634bb615f3 | 129 | { |
llarose | 17:1a634bb615f3 | 130 | flexSensors.Run(); |
llarose | 17:1a634bb615f3 | 131 | } |
llarose | 17:1a634bb615f3 | 132 | |
llarose | 1:601d2922ff06 | 133 | void rps(void const* args) |
llarose | 1:601d2922ff06 | 134 | { |
groygirard | 6:fd1bf5563299 | 135 | // local variables |
groygirard | 14:bda91cead7f2 | 136 | |
groygirard | 6:fd1bf5563299 | 137 | while(true) { |
llarose | 1:601d2922ff06 | 138 | Thread::signal_wait(GO); |
llarose | 1:601d2922ff06 | 139 | // code... |
llarose | 1:601d2922ff06 | 140 | } |
llarose | 1:601d2922ff06 | 141 | } |
groygirard | 14:bda91cead7f2 | 142 | |
llarose | 1:601d2922ff06 | 143 | void airGuitar(void const* args) |
llarose | 1:601d2922ff06 | 144 | { |
groygirard | 6:fd1bf5563299 | 145 | // local variables |
groygirard | 14:bda91cead7f2 | 146 | |
groygirard | 6:fd1bf5563299 | 147 | while(true) { |
llarose | 1:601d2922ff06 | 148 | Thread::signal_wait(GO); |
llarose | 1:601d2922ff06 | 149 | // code... |
llarose | 1:601d2922ff06 | 150 | } |
llarose | 1:601d2922ff06 | 151 | } |
groygirard | 14:bda91cead7f2 | 152 | |
groygirard | 14:bda91cead7f2 | 153 | |
groygirard | 12:ebb08773dbdb | 154 | void get_sensor_data(void const* args) |
groygirard | 6:fd1bf5563299 | 155 | { |
groygirard | 12:ebb08773dbdb | 156 | sensors_t *mail = mailbox_sensors.alloc(); |
groygirard | 12:ebb08773dbdb | 157 | mail->accel_data = accel.get_axis_values(); |
llarose | 17:1a634bb615f3 | 158 | mail->flex_data = flexSensors.get_flex_values(); |
groygirard | 12:ebb08773dbdb | 159 | m_pc.printf("I2C Communication success: Data received %d; %d; %d;\r\n", mail->accel_data.x, mail->accel_data.y, mail->accel_data.z); |
groygirard | 12:ebb08773dbdb | 160 | mailbox_sensors.put(mail); |
groygirard | 14:bda91cead7f2 | 161 | } |
groygirard | 14:bda91cead7f2 | 162 | |
groygirard | 15:dc18545822b3 | 163 | void analyze_GUNNER(uint8_t axe_x) |
groygirard | 15:dc18545822b3 | 164 | { |
groygirard | 15:dc18545822b3 | 165 | } |
groygirard | 15:dc18545822b3 | 166 | |
groygirard | 15:dc18545822b3 | 167 | void analyze_RPS(uint8_t axe_z) |
groygirard | 15:dc18545822b3 | 168 | { |
groygirard | 15:dc18545822b3 | 169 | |
groygirard | 15:dc18545822b3 | 170 | } |
groygirard | 15:dc18545822b3 | 171 | |
groygirard | 15:dc18545822b3 | 172 | void analyze_GUITAR(uint8_t axe_z) |
groygirard | 15:dc18545822b3 | 173 | { |
groygirard | 15:dc18545822b3 | 174 | } |
groygirard | 15:dc18545822b3 | 175 | |
groygirard | 15:dc18545822b3 | 176 | void etat_de_jeu(void const *args) |
groygirard | 15:dc18545822b3 | 177 | { |
groygirard | 15:dc18545822b3 | 178 | |
groygirard | 15:dc18545822b3 | 179 | while(true) { |
groygirard | 15:dc18545822b3 | 180 | Thread::signal_wait(0x1); |
groygirard | 15:dc18545822b3 | 181 | m_pc.printf("Etat \r\n"); |
groygirard | 15:dc18545822b3 | 182 | switch(play) { |
groygirard | 15:dc18545822b3 | 183 | case 0: |
groygirard | 15:dc18545822b3 | 184 | sync->stop(); |
groygirard | 15:dc18545822b3 | 185 | break; |
groygirard | 15:dc18545822b3 | 186 | case 1: |
groygirard | 15:dc18545822b3 | 187 | sync->start(250); |
groygirard | 15:dc18545822b3 | 188 | break; |
groygirard | 15:dc18545822b3 | 189 | default: |
groygirard | 15:dc18545822b3 | 190 | break; |
groygirard | 15:dc18545822b3 | 191 | } |
groygirard | 15:dc18545822b3 | 192 | } |
groygirard | 15:dc18545822b3 | 193 | } |
groygirard | 15:dc18545822b3 | 194 | |
groygirard | 15:dc18545822b3 | 195 | void reception_coord(void const *args) |
groygirard | 15:dc18545822b3 | 196 | { |
groygirard | 15:dc18545822b3 | 197 | while(true) { |
groygirard | 15:dc18545822b3 | 198 | if(play == 0) { |
groygirard | 15:dc18545822b3 | 199 | play = 1; |
groygirard | 15:dc18545822b3 | 200 | threads[1]->signal_set(0x1); |
groygirard | 15:dc18545822b3 | 201 | Thread::wait(2000); |
groygirard | 15:dc18545822b3 | 202 | } else { |
groygirard | 15:dc18545822b3 | 203 | play = 0; |
groygirard | 15:dc18545822b3 | 204 | threads[1]->signal_set(0x1); |
groygirard | 15:dc18545822b3 | 205 | Thread::wait(2000); |
groygirard | 15:dc18545822b3 | 206 | } |
groygirard | 15:dc18545822b3 | 207 | } |
groygirard | 15:dc18545822b3 | 208 | } |
groygirard | 15:dc18545822b3 | 209 | |
groygirard | 14:bda91cead7f2 | 210 | void analyze_sensor_data(void const* args) |
groygirard | 14:bda91cead7f2 | 211 | { |
groygirard | 14:bda91cead7f2 | 212 | while (true) { |
groygirard | 14:bda91cead7f2 | 213 | // attente et lecture d'un événement digital |
groygirard | 14:bda91cead7f2 | 214 | osEvent evtD = mailbox_sensors.get(); |
groygirard | 14:bda91cead7f2 | 215 | if (evtD.status == osEventMail) { |
groygirard | 14:bda91cead7f2 | 216 | sensors_t *mail = (sensors_t*)evtD.value.p; |
groygirard | 14:bda91cead7f2 | 217 | // écriture de l'événement en sortie (port série) |
groygirard | 15:dc18545822b3 | 218 | m_pc.printf("Valeur des trois axes de l'accelerometre: %d, %d, %d\r\n" , mail->accel_data.x, mail->accel_data.y, mail->accel_data.z); |
groygirard | 14:bda91cead7f2 | 219 | switch(mode) { |
groygirard | 14:bda91cead7f2 | 220 | case GUNNER: |
groygirard | 15:dc18545822b3 | 221 | analyze_GUNNER(mail->accel_data.x); |
groygirard | 14:bda91cead7f2 | 222 | break; |
groygirard | 14:bda91cead7f2 | 223 | case RPS: |
groygirard | 14:bda91cead7f2 | 224 | analyze_RPS(mail->accel_data.z); |
groygirard | 14:bda91cead7f2 | 225 | break; |
groygirard | 14:bda91cead7f2 | 226 | case AirGuitar: |
groygirard | 15:dc18545822b3 | 227 | analyze_GUITAR(mail->accel_data.z); |
groygirard | 14:bda91cead7f2 | 228 | break; |
groygirard | 14:bda91cead7f2 | 229 | default: |
groygirard | 14:bda91cead7f2 | 230 | break; |
groygirard | 14:bda91cead7f2 | 231 | } |
groygirard | 14:bda91cead7f2 | 232 | mailbox_sensors.free(mail); |
groygirard | 14:bda91cead7f2 | 233 | } |
groygirard | 14:bda91cead7f2 | 234 | } |
groygirard | 15:dc18545822b3 | 235 | } |
llarose | 22:cccb77300fd5 | 236 | |
llarose | 22:cccb77300fd5 | 237 | //read config file |
llarose | 22:cccb77300fd5 | 238 | void ReadConfig() |
llarose | 22:cccb77300fd5 | 239 | { |
llarose | 22:cccb77300fd5 | 240 | FILE* file = fopen("/local/config.txt","r"); |
llarose | 22:cccb77300fd5 | 241 | if (file != NULL) |
llarose | 22:cccb77300fd5 | 242 | { |
llarose | 22:cccb77300fd5 | 243 | char buffer[2]; |
llarose | 22:cccb77300fd5 | 244 | //char time; |
llarose | 22:cccb77300fd5 | 245 | //char selector; |
llarose | 22:cccb77300fd5 | 246 | |
llarose | 22:cccb77300fd5 | 247 | fscanf(file, "%x", &buffer); //panID = 2 char |
llarose | 22:cccb77300fd5 | 248 | //fscanf(file, "%d", &time); //read period = 1 decimal |
llarose | 22:cccb77300fd5 | 249 | //fscanf(file, "%d", &selector); //end device selector = 1 decimal |
llarose | 22:cccb77300fd5 | 250 | |
llarose | 22:cccb77300fd5 | 251 | PanId = buffer[1] << 8 | buffer[0]; //set PAN ID global variable |
llarose | 22:cccb77300fd5 | 252 | //ReadPeriod = time; //set read period global variable |
llarose | 22:cccb77300fd5 | 253 | //EndDeviceSelection = selector; //set end device selection global variable |
llarose | 22:cccb77300fd5 | 254 | |
llarose | 22:cccb77300fd5 | 255 | fclose(file); //close file |
llarose | 22:cccb77300fd5 | 256 | } |
llarose | 22:cccb77300fd5 | 257 | else //if file is not found |
llarose | 22:cccb77300fd5 | 258 | { |
llarose | 22:cccb77300fd5 | 259 | m_pc.printf("ERROR AT CONFIG FILE \r\n"); |
llarose | 22:cccb77300fd5 | 260 | } |
llarose | 22:cccb77300fd5 | 261 | } |