Projet_S5 / Mbed 2 deprecated Repo_Noeud_Mobile_refactor

Dependencies:   mbed-rtos mbed

Fork of Repo_Noeud_Mobile by Projet_S5

Committer:
groygirard
Date:
Mon Apr 06 17:41:49 2015 +0000
Revision:
27:0c0dfdf8d953
Parent:
26:5700cde2350b
Parent:
25:184915935d68
Child:
28:6f9c5af9e272
rps merged

Who changed what in which revision?

UserRevisionLine numberNew 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
groygirard 26:5700cde2350b 21 #define ACTIVATE_ACCEL 1
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);
groygirard 14:bda91cead7f2 37
groygirard 12:ebb08773dbdb 38 uint8_t play = 0;
groygirard 14:bda91cead7f2 39
llarose 17:1a634bb615f3 40 FlexSensor flexSensors(p15, p16, p17); // flex sensor 1.
groygirard 6:fd1bf5563299 41 Accel accel;
groygirard 25:184915935d68 42 flex_t flex_data;
groygirard 12:ebb08773dbdb 43 RtosTimer *sync;
groygirard 26:5700cde2350b 44 GameMode_e mode = RPS;
llarose 22:cccb77300fd5 45 short PanId;
llarose 22:cccb77300fd5 46 Xbee* xbee = NULL;
groygirard 14:bda91cead7f2 47
groygirard 15:dc18545822b3 48 Thread *threads[3];
groygirard 6:fd1bf5563299 49 Thread* gunner_thread_ptr = NULL; // Possiblement mettre dans un tableau
groygirard 6:fd1bf5563299 50 Thread* rps_thread_ptr = NULL; // avec des position codees
groygirard 6:fd1bf5563299 51 Thread* airguitar_thread_ptr = NULL; // dans des define. guillaume
llarose 17:1a634bb615f3 52 Thread* flex_thread_ptr = NULL; // Lecture des entrées analogiques
groygirard 25:184915935d68 53
groygirard 25:184915935d68 54 Mail<flex_t, 32> mailbox_flex;
groygirard 14:bda91cead7f2 55
groygirard 14:bda91cead7f2 56
groygirard 25:184915935d68 57 extern "C" void TIMER2_IRQHandler(void)
groygirard 25:184915935d68 58 {
groygirard 25:184915935d68 59 /*Flag du decodage - s'execute a chaque fronts, descendants et montants*/
groygirard 25:184915935d68 60 if ((LPC_TIM2->IR & 0x20) == 0x20) {
groygirard 25:184915935d68 61 LPC_TIM2->IR |= 0x20; // clear Timer2 interrupt register
groygirard 26:5700cde2350b 62 threads[1]->signal_set(0x02);
groygirard 25:184915935d68 63 }
groygirard 25:184915935d68 64 }
groygirard 14:bda91cead7f2 65
groygirard 14:bda91cead7f2 66
llarose 1:601d2922ff06 67 int main(void const* args)
llarose 1:601d2922ff06 68 {
llarose 17:1a634bb615f3 69 m_pc.printf("==== PROGRAM START MOBILE ====\r\n");
groygirard 6:fd1bf5563299 70 // Initializing the accelerometer
groygirard 26:5700cde2350b 71
llarose 22:cccb77300fd5 72 ReadConfig(); //read config file
llarose 22:cccb77300fd5 73 m_pc.printf("PANID %#04x\r\n", PanId);
llarose 22:cccb77300fd5 74 xbee = new Xbee(PanId, p13, p14); //set PAN ID
groygirard 26:5700cde2350b 75
groygirard 26:5700cde2350b 76 #if ACTIVATE_ACCEL
groygirard 6:fd1bf5563299 77 accel = Accel();
groygirard 6:fd1bf5563299 78 accel.init_MMA8452();
groygirard 25:184915935d68 79 timer2_init();
groygirard 26:5700cde2350b 80 #endif
groygirard 15:dc18545822b3 81
groygirard 6:fd1bf5563299 82 switch(mode) {
llarose 1:601d2922ff06 83 case GUNNER:
llarose 1:601d2922ff06 84 gunner_thread_ptr = new Thread(gunner);
llarose 17:1a634bb615f3 85 flex_thread_ptr = new Thread(flex);
llarose 17:1a634bb615f3 86 m_pc.printf("gunner mode started\r\n");
llarose 1:601d2922ff06 87 break;
llarose 1:601d2922ff06 88 case RPS:
groygirard 26:5700cde2350b 89 flex_thread_ptr = new Thread(flex);
llarose 1:601d2922ff06 90 rps_thread_ptr = new Thread(rps);
groygirard 26:5700cde2350b 91 m_pc.printf("rps mode started\r\n");
llarose 1:601d2922ff06 92 break;
llarose 1:601d2922ff06 93 case AirGuitar:
llarose 1:601d2922ff06 94 airguitar_thread_ptr = new Thread(airGuitar);
llarose 1:601d2922ff06 95 break;
llarose 1:601d2922ff06 96 default:
llarose 1:601d2922ff06 97 break;
llarose 1:601d2922ff06 98 }
groygirard 26:5700cde2350b 99 threads[0] = gunner_thread_ptr;
groygirard 26:5700cde2350b 100 threads[1] = rps_thread_ptr;
groygirard 26:5700cde2350b 101 threads[2] = airguitar_thread_ptr;
groygirard 14:bda91cead7f2 102
groygirard 12:ebb08773dbdb 103 while(true) {
groygirard 6:fd1bf5563299 104 }
llarose 1:601d2922ff06 105 }
groygirard 14:bda91cead7f2 106
groygirard 25:184915935d68 107 void timer2_init(void)
groygirard 25:184915935d68 108 {
groygirard 25:184915935d68 109 LPC_PINCON->PINSEL0 |= 0xc00; // set P0.5 to CAP2.1
groygirard 25:184915935d68 110 LPC_SC->PCONP |= (1 << 22); // Timer2 power on
groygirard 25:184915935d68 111 LPC_SC->PCLKSEL1 |= (1 << 12); // Divide CCLK by 1 for Timer2
groygirard 25:184915935d68 112 LPC_TIM2->CCR |= 0x30; // set cap2.1 rising-edge/falling-edge and interrupt
groygirard 25:184915935d68 113 LPC_TIM2->TCR |= (1 << 0); // start Timer2
groygirard 25:184915935d68 114 LPC_TIM2->EMR = 0x20; //
groygirard 25:184915935d68 115 LPC_TIM2->IR |= 0xFFFFFFFF;
groygirard 25:184915935d68 116 NVIC_EnableIRQ(TIMER2_IRQn);
groygirard 25:184915935d68 117 }
groygirard 25:184915935d68 118
groygirard 26:5700cde2350b 119 void flex(void const* args)
groygirard 26:5700cde2350b 120 {
groygirard 26:5700cde2350b 121 flexSensors.Run();
groygirard 26:5700cde2350b 122 }
groygirard 26:5700cde2350b 123
groygirard 26:5700cde2350b 124
llarose 1:601d2922ff06 125 void gunner(void const* args)
groygirard 12:ebb08773dbdb 126 {
groygirard 12:ebb08773dbdb 127 // local variables
llarose 3:a77d02cb5694 128 Cible* cible = new Cible();
llarose 17:1a634bb615f3 129 CountDown countDown(500);
llarose 3:a77d02cb5694 130 countDown.run();
groygirard 14:bda91cead7f2 131
groygirard 12:ebb08773dbdb 132 while(true) {
llarose 3:a77d02cb5694 133 // Thread::signal_wait(GO);
llarose 3:a77d02cb5694 134 cible->reset();
llarose 3:a77d02cb5694 135 int target = rand() % 3;
llarose 3:a77d02cb5694 136 cible->set(target);
llarose 3:a77d02cb5694 137 countDown.run();
groygirard 26:5700cde2350b 138
llarose 17:1a634bb615f3 139 flex_t data = flexSensors.get_flex_values();
llarose 17:1a634bb615f3 140 m_pc.printf("index: %u, majeur: %u, annulaire: %u\n\r", data.index, data.majeur, data.annulaire);
llarose 22:cccb77300fd5 141 char data_test[3] = {data.index, data.majeur, data.annulaire};
llarose 22:cccb77300fd5 142 xbee->EnvoyerDonnees(data_test,3);
llarose 1:601d2922ff06 143 }
llarose 1:601d2922ff06 144 }
groygirard 14:bda91cead7f2 145
groygirard 26:5700cde2350b 146 void configure_GUNNER()
llarose 17:1a634bb615f3 147 {
groygirard 26:5700cde2350b 148 accel.set_TRANSIENT_MODE(0x18, 0x05, 0x08);
llarose 17:1a634bb615f3 149 }
llarose 17:1a634bb615f3 150
llarose 1:601d2922ff06 151 void rps(void const* args)
llarose 1:601d2922ff06 152 {
groygirard 6:fd1bf5563299 153 // local variables
groygirard 26:5700cde2350b 154 m_pc.printf("RPS Start! \n\r");
groygirard 26:5700cde2350b 155 configure_RPS();
groygirard 25:184915935d68 156 uint8_t windup = 0;
groygirard 6:fd1bf5563299 157 while(true) {
groygirard 25:184915935d68 158 Thread::signal_wait(0x02);
groygirard 25:184915935d68 159 windup++;
groygirard 25:184915935d68 160 m_pc.printf("Decide in : %d \n\r", windup);
groygirard 26:5700cde2350b 161 if(windup >= 3) {
groygirard 25:184915935d68 162 windup = 0;
groygirard 25:184915935d68 163 Thread::wait(500);
groygirard 26:5700cde2350b 164 flex_data = flexSensors.get_flex_values();
groygirard 25:184915935d68 165 flex_t *mail = mailbox_flex.alloc();
groygirard 25:184915935d68 166 mail = &flex_data;
groygirard 25:184915935d68 167 mailbox_flex.put(mail);
groygirard 25:184915935d68 168 // send data frame to the fixed mbed for analyze
groygirard 25:184915935d68 169 }
groygirard 25:184915935d68 170 accel.clear_TRANSIENT_INTERRUPT();
llarose 1:601d2922ff06 171 }
llarose 1:601d2922ff06 172 }
groygirard 25:184915935d68 173
groygirard 26:5700cde2350b 174 void configure_RPS()
groygirard 26:5700cde2350b 175 {
groygirard 26:5700cde2350b 176 accel.set_TRANSIENT_MODE(0x12, 0x05, 0x08);
llarose 1:601d2922ff06 177 }
groygirard 14:bda91cead7f2 178
llarose 1:601d2922ff06 179 void airGuitar(void const* args)
llarose 1:601d2922ff06 180 {
groygirard 6:fd1bf5563299 181 // local variables
groygirard 14:bda91cead7f2 182
groygirard 6:fd1bf5563299 183 while(true) {
llarose 1:601d2922ff06 184 Thread::signal_wait(GO);
llarose 1:601d2922ff06 185 // code...
llarose 1:601d2922ff06 186 }
llarose 1:601d2922ff06 187 }
groygirard 14:bda91cead7f2 188
groygirard 26:5700cde2350b 189 void configure_GUITAR()
groygirard 15:dc18545822b3 190 {
groygirard 15:dc18545822b3 191 }
groygirard 15:dc18545822b3 192
groygirard 15:dc18545822b3 193
llarose 22:cccb77300fd5 194 //read config file
llarose 22:cccb77300fd5 195 void ReadConfig()
groygirard 15:dc18545822b3 196 {
llarose 22:cccb77300fd5 197 FILE* file = fopen("/local/config.txt","r");
groygirard 26:5700cde2350b 198 if (file != NULL) {
llarose 22:cccb77300fd5 199 char buffer[2];
llarose 22:cccb77300fd5 200 //char time;
llarose 22:cccb77300fd5 201 //char selector;
groygirard 26:5700cde2350b 202
llarose 22:cccb77300fd5 203 fscanf(file, "%x", &buffer); //panID = 2 char
llarose 22:cccb77300fd5 204 //fscanf(file, "%d", &time); //read period = 1 decimal
llarose 22:cccb77300fd5 205 //fscanf(file, "%d", &selector); //end device selector = 1 decimal
groygirard 15:dc18545822b3 206
llarose 22:cccb77300fd5 207 PanId = buffer[1] << 8 | buffer[0]; //set PAN ID global variable
llarose 22:cccb77300fd5 208 //ReadPeriod = time; //set read period global variable
llarose 22:cccb77300fd5 209 //EndDeviceSelection = selector; //set end device selection global variable
groygirard 26:5700cde2350b 210
llarose 22:cccb77300fd5 211 fclose(file); //close file
groygirard 26:5700cde2350b 212 } else { //if file is not found
llarose 22:cccb77300fd5 213 m_pc.printf("ERROR AT CONFIG FILE \r\n");
groygirard 14:bda91cead7f2 214 }
groygirard 27:0c0dfdf8d953 215 }