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@39:558cd5780490, 2015-04-06 (annotated)
- Committer:
- pete1801
- Date:
- Mon Apr 06 20:18:02 2015 +0000
- Revision:
- 39:558cd5780490
- Parent:
- 38:0196baea1d35
- Child:
- 40:cf5a55961d8c
Ajout d'un thread qui envois les structures vers le fixe.
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 |
pete1801 | 37:28f1122a858c | 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); |
llarose | 17:1a634bb615f3 | 30 | void flex(void const* args); |
groygirard | 15:dc18545822b3 | 31 | void analyze_sensor_data(void const* args); |
groygirard | 26:5700cde2350b | 32 | void configure_GUNNER(); |
groygirard | 26:5700cde2350b | 33 | void configure_RPS(); |
groygirard | 26:5700cde2350b | 34 | void configure_GUITAR(); |
llarose | 22:cccb77300fd5 | 35 | void ReadConfig(); |
groygirard | 25:184915935d68 | 36 | void timer2_init(void); |
pete1801 | 39:558cd5780490 | 37 | void Send_Data_To_Fixe(void const* args); |
groygirard | 14:bda91cead7f2 | 38 | |
groygirard | 12:ebb08773dbdb | 39 | uint8_t play = 0; |
groygirard | 14:bda91cead7f2 | 40 | |
llarose | 17:1a634bb615f3 | 41 | FlexSensor flexSensors(p15, p16, p17); // flex sensor 1. |
groygirard | 6:fd1bf5563299 | 42 | Accel accel; |
groygirard | 25:184915935d68 | 43 | flex_t flex_data; |
groygirard | 12:ebb08773dbdb | 44 | RtosTimer *sync; |
groygirard | 26:5700cde2350b | 45 | GameMode_e mode = RPS; |
llarose | 22:cccb77300fd5 | 46 | short PanId; |
pete1801 | 39:558cd5780490 | 47 | Xbee xbee; |
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 |
pete1801 | 39:558cd5780490 | 54 | Thread* Thread_Send_Data_To_Fixe = NULL;// Thread pour envoyer les données des sensors au fixe |
groygirard | 14:bda91cead7f2 | 55 | |
groygirard | 33:ab4ff35d27ea | 56 | Mail<Mobile_Vers_Fixe, 32> mailbox_Mobile_Vers_Fixe; |
groygirard | 14:bda91cead7f2 | 57 | |
groygirard | 25:184915935d68 | 58 | extern "C" void TIMER2_IRQHandler(void) |
groygirard | 25:184915935d68 | 59 | { |
groygirard | 25:184915935d68 | 60 | /*Flag du decodage - s'execute a chaque fronts, descendants et montants*/ |
groygirard | 25:184915935d68 | 61 | if ((LPC_TIM2->IR & 0x20) == 0x20) { |
groygirard | 25:184915935d68 | 62 | LPC_TIM2->IR |= 0x20; // clear Timer2 interrupt register |
groygirard | 29:9a932d354ae3 | 63 | threads[mode]->signal_set(0x02); |
groygirard | 25:184915935d68 | 64 | } |
groygirard | 25:184915935d68 | 65 | } |
groygirard | 14:bda91cead7f2 | 66 | |
groygirard | 14:bda91cead7f2 | 67 | |
llarose | 1:601d2922ff06 | 68 | int main(void const* args) |
llarose | 1:601d2922ff06 | 69 | { |
pete1801 | 30:389d09853cd1 | 70 | m_pc.printf("\r\n==== PROGRAM START MOBILE ====\r\n"); |
groygirard | 6:fd1bf5563299 | 71 | // Initializing the accelerometer |
groygirard | 26:5700cde2350b | 72 | |
llarose | 22:cccb77300fd5 | 73 | ReadConfig(); //read config file |
pete1801 | 30:389d09853cd1 | 74 | m_pc.printf("PANID %x\r\n", PanId); |
pete1801 | 39:558cd5780490 | 75 | xbee = Xbee(PanId, p13, p14); //set PAN ID |
groygirard | 26:5700cde2350b | 76 | |
groygirard | 26:5700cde2350b | 77 | #if ACTIVATE_ACCEL |
groygirard | 6:fd1bf5563299 | 78 | accel = Accel(); |
groygirard | 6:fd1bf5563299 | 79 | accel.init_MMA8452(); |
groygirard | 25:184915935d68 | 80 | timer2_init(); |
groygirard | 26:5700cde2350b | 81 | #endif |
groygirard | 15:dc18545822b3 | 82 | |
groygirard | 6:fd1bf5563299 | 83 | switch(mode) { |
llarose | 1:601d2922ff06 | 84 | case GUNNER: |
llarose | 1:601d2922ff06 | 85 | gunner_thread_ptr = new Thread(gunner); |
llarose | 17:1a634bb615f3 | 86 | flex_thread_ptr = new Thread(flex); |
llarose | 17:1a634bb615f3 | 87 | m_pc.printf("gunner mode started\r\n"); |
llarose | 1:601d2922ff06 | 88 | break; |
llarose | 1:601d2922ff06 | 89 | case RPS: |
groygirard | 26:5700cde2350b | 90 | flex_thread_ptr = new Thread(flex); |
llarose | 1:601d2922ff06 | 91 | rps_thread_ptr = new Thread(rps); |
groygirard | 26:5700cde2350b | 92 | m_pc.printf("rps mode started\r\n"); |
llarose | 1:601d2922ff06 | 93 | break; |
llarose | 1:601d2922ff06 | 94 | case AirGuitar: |
llarose | 1:601d2922ff06 | 95 | airguitar_thread_ptr = new Thread(airGuitar); |
llarose | 1:601d2922ff06 | 96 | break; |
llarose | 1:601d2922ff06 | 97 | default: |
llarose | 1:601d2922ff06 | 98 | break; |
llarose | 1:601d2922ff06 | 99 | } |
groygirard | 29:9a932d354ae3 | 100 | threads[GUNNER] = gunner_thread_ptr; |
groygirard | 29:9a932d354ae3 | 101 | threads[RPS] = rps_thread_ptr; |
groygirard | 29:9a932d354ae3 | 102 | threads[AirGuitar] = airguitar_thread_ptr; |
groygirard | 29:9a932d354ae3 | 103 | |
pete1801 | 39:558cd5780490 | 104 | Thread_Send_Data_To_Fixe = new Thread(Send_Data_To_Fixe); |
groygirard | 14:bda91cead7f2 | 105 | |
groygirard | 12:ebb08773dbdb | 106 | while(true) { |
pete1801 | 30:389d09853cd1 | 107 | |
groygirard | 6:fd1bf5563299 | 108 | } |
llarose | 1:601d2922ff06 | 109 | } |
groygirard | 14:bda91cead7f2 | 110 | |
groygirard | 25:184915935d68 | 111 | void timer2_init(void) |
groygirard | 12:ebb08773dbdb | 112 | { |
groygirard | 25:184915935d68 | 113 | LPC_PINCON->PINSEL0 |= 0xc00; // set P0.5 to CAP2.1 |
groygirard | 25:184915935d68 | 114 | LPC_SC->PCONP |= (1 << 22); // Timer2 power on |
groygirard | 25:184915935d68 | 115 | LPC_SC->PCLKSEL1 |= (1 << 12); // Divide CCLK by 1 for Timer2 |
groygirard | 25:184915935d68 | 116 | LPC_TIM2->CCR |= 0x30; // set cap2.1 rising-edge/falling-edge and interrupt |
groygirard | 25:184915935d68 | 117 | LPC_TIM2->TCR |= (1 << 0); // start Timer2 |
groygirard | 25:184915935d68 | 118 | LPC_TIM2->EMR = 0x20; // |
groygirard | 25:184915935d68 | 119 | LPC_TIM2->IR |= 0xFFFFFFFF; |
groygirard | 25:184915935d68 | 120 | NVIC_EnableIRQ(TIMER2_IRQn); |
llarose | 1:601d2922ff06 | 121 | } |
groygirard | 14:bda91cead7f2 | 122 | |
llarose | 17:1a634bb615f3 | 123 | void flex(void const* args) |
llarose | 17:1a634bb615f3 | 124 | { |
llarose | 17:1a634bb615f3 | 125 | flexSensors.Run(); |
llarose | 17:1a634bb615f3 | 126 | } |
llarose | 17:1a634bb615f3 | 127 | |
groygirard | 26:5700cde2350b | 128 | |
llarose | 1:601d2922ff06 | 129 | void gunner(void const* args) |
groygirard | 12:ebb08773dbdb | 130 | { |
groygirard | 12:ebb08773dbdb | 131 | // local variables |
groygirard | 12:ebb08773dbdb | 132 | while(true) { |
groygirard | 29:9a932d354ae3 | 133 | Thread::signal_wait(0x02); |
groygirard | 29:9a932d354ae3 | 134 | flex_data = flexSensors.get_flex_values(); |
groygirard | 33:ab4ff35d27ea | 135 | Mobile_Vers_Fixe *mail = mailbox_Mobile_Vers_Fixe.alloc(); |
groygirard | 33:ab4ff35d27ea | 136 | mail->flexSensor = flex_data; |
groygirard | 33:ab4ff35d27ea | 137 | mail->gants = 0x01; |
groygirard | 33:ab4ff35d27ea | 138 | mail->accelData.x = 0x00; |
groygirard | 33:ab4ff35d27ea | 139 | mail->accelData.y = 0x00; |
groygirard | 33:ab4ff35d27ea | 140 | mail->accelData.z = 0x01; |
groygirard | 33:ab4ff35d27ea | 141 | mailbox_Mobile_Vers_Fixe.put(mail); |
llarose | 1:601d2922ff06 | 142 | } |
llarose | 1:601d2922ff06 | 143 | } |
groygirard | 14:bda91cead7f2 | 144 | |
groygirard | 26:5700cde2350b | 145 | void configure_GUNNER() |
llarose | 17:1a634bb615f3 | 146 | { |
groygirard | 29:9a932d354ae3 | 147 | accel.set_TRANSIENT_MODE(0x18, 0x05, 0x08); // z plan transient motion detection |
llarose | 17:1a634bb615f3 | 148 | } |
llarose | 17:1a634bb615f3 | 149 | |
llarose | 1:601d2922ff06 | 150 | void rps(void const* args) |
llarose | 1:601d2922ff06 | 151 | { |
groygirard | 6:fd1bf5563299 | 152 | // local variables |
groygirard | 26:5700cde2350b | 153 | m_pc.printf("RPS Start! \n\r"); |
groygirard | 26:5700cde2350b | 154 | configure_RPS(); |
groygirard | 25:184915935d68 | 155 | uint8_t windup = 0; |
groygirard | 6:fd1bf5563299 | 156 | while(true) { |
groygirard | 25:184915935d68 | 157 | Thread::signal_wait(0x02); |
groygirard | 25:184915935d68 | 158 | windup++; |
groygirard | 25:184915935d68 | 159 | m_pc.printf("Decide in : %d \n\r", windup); |
groygirard | 26:5700cde2350b | 160 | if(windup >= 3) { |
groygirard | 25:184915935d68 | 161 | windup = 0; |
groygirard | 25:184915935d68 | 162 | Thread::wait(500); |
groygirard | 26:5700cde2350b | 163 | flex_data = flexSensors.get_flex_values(); |
groygirard | 33:ab4ff35d27ea | 164 | Mobile_Vers_Fixe *mail = mailbox_Mobile_Vers_Fixe.alloc(); |
groygirard | 33:ab4ff35d27ea | 165 | mail->flexSensor = flex_data; |
groygirard | 33:ab4ff35d27ea | 166 | mail->gants = 0x01; |
groygirard | 33:ab4ff35d27ea | 167 | mail->accelData.x = 0x01; |
groygirard | 33:ab4ff35d27ea | 168 | mail->accelData.y = 0x00; |
groygirard | 33:ab4ff35d27ea | 169 | mail->accelData.z = 0x00; |
groygirard | 33:ab4ff35d27ea | 170 | mailbox_Mobile_Vers_Fixe.put(mail); |
groygirard | 25:184915935d68 | 171 | // send data frame to the fixed mbed for analyze |
groygirard | 25:184915935d68 | 172 | } |
groygirard | 25:184915935d68 | 173 | accel.clear_TRANSIENT_INTERRUPT(); |
llarose | 1:601d2922ff06 | 174 | } |
llarose | 1:601d2922ff06 | 175 | } |
groygirard | 14:bda91cead7f2 | 176 | |
pete1801 | 39:558cd5780490 | 177 | void Send_Data_To_Fixe(void const* args) |
groygirard | 28:6f9c5af9e272 | 178 | { |
groygirard | 28:6f9c5af9e272 | 179 | while (true) { |
groygirard | 28:6f9c5af9e272 | 180 | // attente et lecture d'un événement digital |
pete1801 | 37:28f1122a858c | 181 | osEvent evtD = mailbox_Mobile_Vers_Fixe.get(); |
groygirard | 28:6f9c5af9e272 | 182 | if (evtD.status == osEventMail) { |
pete1801 | 37:28f1122a858c | 183 | Mobile_Vers_Fixe *mail = (Mobile_Vers_Fixe*)evtD.value.p; |
groygirard | 28:6f9c5af9e272 | 184 | // écriture de l'événement en sortie (port série) |
pete1801 | 39:558cd5780490 | 185 | //m_pc.printf("Valeur des flex : %d, %d, %d\r\n" , mail->flexSensor.index, mail->flexSensor.majeur, mail->flexSensor.annulaire); |
pete1801 | 39:558cd5780490 | 186 | |
pete1801 | 39:558cd5780490 | 187 | // Envoyer la structure |
pete1801 | 39:558cd5780490 | 188 | xbee.EnvoyerStructure(mail); |
pete1801 | 37:28f1122a858c | 189 | mailbox_Mobile_Vers_Fixe.free(mail); |
groygirard | 28:6f9c5af9e272 | 190 | } |
groygirard | 29:9a932d354ae3 | 191 | } |
groygirard | 28:6f9c5af9e272 | 192 | } |
groygirard | 28:6f9c5af9e272 | 193 | |
groygirard | 26:5700cde2350b | 194 | void configure_RPS() |
groygirard | 26:5700cde2350b | 195 | { |
groygirard | 26:5700cde2350b | 196 | accel.set_TRANSIENT_MODE(0x12, 0x05, 0x08); |
llarose | 1:601d2922ff06 | 197 | } |
groygirard | 14:bda91cead7f2 | 198 | |
llarose | 1:601d2922ff06 | 199 | void airGuitar(void const* args) |
llarose | 1:601d2922ff06 | 200 | { |
groygirard | 6:fd1bf5563299 | 201 | // local variables |
groygirard | 14:bda91cead7f2 | 202 | |
groygirard | 6:fd1bf5563299 | 203 | while(true) { |
llarose | 1:601d2922ff06 | 204 | Thread::signal_wait(GO); |
llarose | 1:601d2922ff06 | 205 | // code... |
llarose | 1:601d2922ff06 | 206 | } |
llarose | 1:601d2922ff06 | 207 | } |
groygirard | 14:bda91cead7f2 | 208 | |
groygirard | 26:5700cde2350b | 209 | void configure_GUITAR() |
groygirard | 15:dc18545822b3 | 210 | { |
groygirard | 15:dc18545822b3 | 211 | } |
llarose | 22:cccb77300fd5 | 212 | |
llarose | 22:cccb77300fd5 | 213 | //read config file |
llarose | 22:cccb77300fd5 | 214 | void ReadConfig() |
llarose | 22:cccb77300fd5 | 215 | { |
llarose | 22:cccb77300fd5 | 216 | FILE* file = fopen("/local/config.txt","r"); |
groygirard | 26:5700cde2350b | 217 | if (file != NULL) { |
llarose | 22:cccb77300fd5 | 218 | char buffer[2]; |
llarose | 22:cccb77300fd5 | 219 | //char time; |
llarose | 22:cccb77300fd5 | 220 | //char selector; |
pete1801 | 32:7bdaac2c4cbf | 221 | |
llarose | 22:cccb77300fd5 | 222 | fscanf(file, "%x", &buffer); //panID = 2 char |
llarose | 22:cccb77300fd5 | 223 | //fscanf(file, "%d", &time); //read period = 1 decimal |
llarose | 22:cccb77300fd5 | 224 | //fscanf(file, "%d", &selector); //end device selector = 1 decimal |
pete1801 | 32:7bdaac2c4cbf | 225 | |
llarose | 22:cccb77300fd5 | 226 | PanId = buffer[1] << 8 | buffer[0]; //set PAN ID global variable |
llarose | 22:cccb77300fd5 | 227 | //ReadPeriod = time; //set read period global variable |
llarose | 22:cccb77300fd5 | 228 | //EndDeviceSelection = selector; //set end device selection global variable |
pete1801 | 32:7bdaac2c4cbf | 229 | |
llarose | 22:cccb77300fd5 | 230 | fclose(file); //close file |
groygirard | 26:5700cde2350b | 231 | } else { //if file is not found |
llarose | 22:cccb77300fd5 | 232 | m_pc.printf("ERROR AT CONFIG FILE \r\n"); |
llarose | 22:cccb77300fd5 | 233 | } |
groygirard | 27:0c0dfdf8d953 | 234 | } |