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
Diff: main.cpp
- Revision:
- 25:184915935d68
- Parent:
- 15:dc18545822b3
- Child:
- 27:0c0dfdf8d953
--- a/main.cpp Sat Mar 21 17:24:38 2015 +0000 +++ b/main.cpp Thu Mar 26 15:41:15 2015 +0000 @@ -27,11 +27,12 @@ void airGuitar(void const* args); void get_sensor_data(void const* args); void analyze_sensor_data(void const* args); -void analyze_GUNNER(uint8_t axe_x); -void analyze_RPS(uint8_t axe_z); -void analyze_GUITAR(uint8_t axe_z); +void analyze_GUNNER(); +void analyze_RPS(); +void analyze_GUITAR(); void etat_de_jeu(void const *args); void reception_coord(void const *args); +void timer2_init(void); uint8_t play = 0; @@ -40,6 +41,7 @@ FlexSensor annulaire(DIGITAL, p17); // flex sensor 3. CountDown countDown; Accel accel; +flex_t flex_data; FlexSensor flex; RtosTimer *sync; GameMode mode = RPS; @@ -50,21 +52,28 @@ Thread* rps_thread_ptr = NULL; // avec des position codees Thread* airguitar_thread_ptr = NULL; // dans des define. guillaume -typedef struct { - accel_t accel_data; - flex_t flex_data; -} sensors_t; + +Mail<flex_t, 32> mailbox_flex; -Mail<sensors_t, 32> mailbox_sensors; - +extern "C" void TIMER2_IRQHandler(void) +{ + /*Flag du decodage - s'execute a chaque fronts, descendants et montants*/ + if ((LPC_TIM2->IR & 0x20) == 0x20) { + LPC_TIM2->IR |= 0x20; // clear Timer2 interrupt register + threads[2]->signal_set(0x02); + } +} int main(void const* args) { // Initializing the accelerometer accel = Accel(); accel.init_MMA8452(); - RtosTimer timer(get_sensor_data, osTimerPeriodic, (void *)0); - sync = &timer; + timer2_init(); + + //RtosTimer timer(get_sensor_data, osTimerPeriodic, (void *)0); + //sync = &timer; + //sync->start(200); switch(mode) { case GUNNER: @@ -80,17 +89,29 @@ break; } - Thread thread0(reception_coord); - Thread thread1(etat_de_jeu); + //Thread thread0(reception_coord); + //Thread thread1(etat_de_jeu); Thread thread2(analyze_sensor_data); - threads[0] = &thread0; - threads[1] = &thread1; - threads[2] = &thread2; + // threads[0] = &thread0; + // threads[1] = &thread1; + threads[2] = rps_thread_ptr; while(true) { } } +void timer2_init(void) +{ + LPC_PINCON->PINSEL0 |= 0xc00; // set P0.5 to CAP2.1 + LPC_SC->PCONP |= (1 << 22); // Timer2 power on + LPC_SC->PCLKSEL1 |= (1 << 12); // Divide CCLK by 1 for Timer2 + LPC_TIM2->CCR |= 0x30; // set cap2.1 rising-edge/falling-edge and interrupt + LPC_TIM2->TCR |= (1 << 0); // start Timer2 + LPC_TIM2->EMR = 0x20; // + LPC_TIM2->IR |= 0xFFFFFFFF; + NVIC_EnableIRQ(TIMER2_IRQn); +} + void gunner(void const* args) { // local variables @@ -98,7 +119,7 @@ countDown.run(); while(true) { - // Thread::signal_wait(GO); + Thread::signal_wait(GO); cible->reset(); int target = rand() % 3; @@ -110,10 +131,23 @@ void rps(void const* args) { // local variables - + analyze_RPS(); + uint8_t windup = 0; while(true) { - Thread::signal_wait(GO); - // code... + Thread::signal_wait(0x02); + windup++; + m_pc.printf("Decide in : %d \n\r", windup); + if(windup >= 3){ + windup = 0; + Thread::wait(500); + flex_data = flex.get_flex_values(); + flex_t *mail = mailbox_flex.alloc(); + mail = &flex_data; + mailbox_flex.put(mail); + // send data frame to the fixed mbed for analyze + } + accel.clear_TRANSIENT_INTERRUPT(); + } } @@ -130,27 +164,23 @@ void get_sensor_data(void const* args) { - sensors_t *mail = mailbox_sensors.alloc(); - mail->accel_data = accel.get_axis_values(); - mail->flex_data = flex.get_flex_values(); - 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); - mailbox_sensors.put(mail); + flex_data = flex.get_flex_values(); } -void analyze_GUNNER(uint8_t axe_x) +void analyze_GUNNER() { } -void analyze_RPS(uint8_t axe_z) +void analyze_RPS() { - + accel.set_TRANSIENT_MODE(0x12, 0x05, 0x08); } -void analyze_GUITAR(uint8_t axe_z) +void analyze_GUITAR() { } -void etat_de_jeu(void const *args) +/*void etat_de_jeu(void const *args) { while(true) { @@ -158,18 +188,18 @@ m_pc.printf("Etat \r\n"); switch(play) { case 0: - sync->stop(); + accel.set_STANDBY_MODE(); break; case 1: - sync->start(250); + accel.set_TRANSIENT_MODE(0x12, 0x08, 0x05); break; default: break; } } -} +}*/ -void reception_coord(void const *args) +/*void reception_coord(void const *args) { while(true) { if(play == 0) { @@ -178,35 +208,27 @@ Thread::wait(2000); } else { play = 0; - threads[1]->signal_set(0x1); Thread::wait(2000); } } -} +}*/ void analyze_sensor_data(void const* args) { while (true) { - // attente et lecture d'un événement digital - osEvent evtD = mailbox_sensors.get(); - if (evtD.status == osEventMail) { - sensors_t *mail = (sensors_t*)evtD.value.p; - // écriture de l'événement en sortie (port série) - 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); - switch(mode) { - case GUNNER: - analyze_GUNNER(mail->accel_data.x); - break; - case RPS: - analyze_RPS(mail->accel_data.z); - break; - case AirGuitar: - analyze_GUITAR(mail->accel_data.z); - break; - default: - break; - } - mailbox_sensors.free(mail); + // écriture de l'événement en sortie (port série) + switch(mode) { + case GUNNER: + analyze_GUNNER(); + break; + case RPS: + //analyze_RPS(); + break; + case AirGuitar: + analyze_GUITAR(); + break; + default: + break; } } }