Projet_S5 / Mbed 2 deprecated Repo_Noeud_Mobile_refactor

Dependencies:   mbed-rtos mbed

Fork of Repo_Noeud_Mobile by Projet_S5

Revision:
14:bda91cead7f2
Parent:
12:ebb08773dbdb
Child:
15:dc18545822b3
--- a/main.cpp	Sat Mar 07 21:48:09 2015 +0000
+++ b/main.cpp	Sat Mar 21 17:08:29 2015 +0000
@@ -4,31 +4,31 @@
  * @author Equipe de projet 2
  *
  */
- 
+
 // System libraries
 #include "mbed.h"
 #include "rtos.h"
- 
+
 // Proprietary libraries
 #include "Cible.h"
 #include "CountDown.h"
 #include "FlexSensor.h"
 #include "MMA8452Q.h"
- 
+
 #define GO 0x01
- 
+
 Serial m_pc(USBTX, USBRX);
- 
+
 enum GameMode { GUNNER, RPS, AirGuitar};
- 
+
 //PROTOTYPES DE FONCTION
 void gunner(void const* args);
 void rps(void const* args);
 void airGuitar(void const* args);
 void get_sensor_data(void const* args);
- 
+
 uint8_t play = 0;
- 
+
 FlexSensor index(DIGITAL, p15);       // flex sensor 1.
 FlexSensor majeur(DIGITAL, p16);      // flex sensor 2.
 FlexSensor annulaire(DIGITAL, p17);   // flex sensor 3.
@@ -36,23 +36,23 @@
 Accel accel;
 FlexSensor flex;
 RtosTimer *sync;
- 
+GameMode mode = RPS;
 Thread *threads[2];
- 
+
 Thread* gunner_thread_ptr = NULL;       // Possiblement mettre dans un tableau
 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<sensors_t, 32> mailbox_sensors;
- 
+
 void etat_de_jeu(void const *args)
 {
- 
+
     while(true) {
         Thread::signal_wait(0x1);
         m_pc.printf("Etat \r\n");
@@ -68,7 +68,7 @@
         }
     }
 }
- 
+
 void reception_coord(void const *args)
 {
     while(true) {
@@ -83,7 +83,7 @@
         }
     }
 }
- 
+
 int main(void const* args)
 {
     // Initializing the accelerometer
@@ -91,7 +91,7 @@
     accel.init_MMA8452();
     RtosTimer timer(get_sensor_data, osTimerPeriodic, (void *)0);
     sync = &timer;
-    GameMode mode = GUNNER;
+    
     switch(mode) {
         case GUNNER:
             gunner_thread_ptr =  new Thread(gunner);
@@ -105,53 +105,55 @@
         default:
             break;
     }
-    
-    Thread thread(reception_coord);
-    Thread thread2(etat_de_jeu);
-    threads[0] = &thread;
-    threads[1] = &thread2;
-    
+
+    Thread thread0(reception_coord);
+    Thread thread1(etat_de_jeu);
+    Thread thread2(analyze_sensor_data);
+    threads[0] = &thread0;
+    threads[1] = &thread1;
+    threads[2] = &thread2;
+
     while(true) {
     }
 }
- 
+
 void gunner(void const* args)
 {
     // local variables
     Cible* cible = new Cible();
     countDown.run();
- 
+
     while(true) {
         // Thread::signal_wait(GO);
         cible->reset();
         int target = rand() % 3;
- 
+
         cible->set(target);
         countDown.run();
     }
 }
- 
+
 void rps(void const* args)
 {
     // local variables
- 
+
     while(true) {
         Thread::signal_wait(GO);
         // code...
     }
 }
- 
+
 void airGuitar(void const* args)
 {
     // local variables
- 
+
     while(true) {
         Thread::signal_wait(GO);
         // code...
     }
 }
- 
- 
+
+
 void get_sensor_data(void const* args)
 {
     sensors_t *mail = mailbox_sensors.alloc();
@@ -159,4 +161,31 @@
     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);
+}
+
+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)
+            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();
+                    break;
+                case RPS:
+                    analyze_RPS(mail->accel_data.z);
+                    break;
+                case AirGuitar:
+                    analyze_GUITAR();
+                    break;
+                default:
+                    break;
+            }
+            mailbox_sensors.free(mail);
+        }
+    }
 }
\ No newline at end of file