Projet_S5 / Mbed 2 deprecated Repo_Noeud_Mobile_refactor

Dependencies:   mbed-rtos mbed

Fork of Repo_Noeud_Mobile by Projet_S5

Committer:
groygirard
Date:
Fri Mar 06 18:03:55 2015 +0000
Revision:
12:ebb08773dbdb
Parent:
8:51f6c8f59449
Child:
14:bda91cead7f2
Added sensor data acquisition function with mailbox.

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 12:ebb08773dbdb 7
groygirard 6:fd1bf5563299 8 // System libraries
llarose 1:601d2922ff06 9 #include "mbed.h"
llarose 1:601d2922ff06 10 #include "rtos.h"
groygirard 12:ebb08773dbdb 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"
groygirard 12:ebb08773dbdb 17
llarose 1:601d2922ff06 18 #define GO 0x01
groygirard 12:ebb08773dbdb 19
groygirard 12:ebb08773dbdb 20 Serial m_pc(USBTX, USBRX);
groygirard 12:ebb08773dbdb 21
llarose 1:601d2922ff06 22 enum GameMode { GUNNER, RPS, AirGuitar};
groygirard 12:ebb08773dbdb 23
groygirard 6:fd1bf5563299 24 //PROTOTYPES DE FONCTION
llarose 1:601d2922ff06 25 void gunner(void const* args);
llarose 1:601d2922ff06 26 void rps(void const* args);
llarose 1:601d2922ff06 27 void airGuitar(void const* args);
groygirard 12:ebb08773dbdb 28 void get_sensor_data(void const* args);
groygirard 12:ebb08773dbdb 29
groygirard 12:ebb08773dbdb 30 uint8_t play = 0;
groygirard 12:ebb08773dbdb 31
llarose 1:601d2922ff06 32 FlexSensor index(DIGITAL, p15); // flex sensor 1.
llarose 1:601d2922ff06 33 FlexSensor majeur(DIGITAL, p16); // flex sensor 2.
llarose 1:601d2922ff06 34 FlexSensor annulaire(DIGITAL, p17); // flex sensor 3.
llarose 1:601d2922ff06 35 CountDown countDown;
groygirard 6:fd1bf5563299 36 Accel accel;
groygirard 12:ebb08773dbdb 37 FlexSensor flex;
groygirard 12:ebb08773dbdb 38 RtosTimer *sync;
groygirard 12:ebb08773dbdb 39
groygirard 12:ebb08773dbdb 40 Thread *threads[2];
groygirard 12:ebb08773dbdb 41
groygirard 6:fd1bf5563299 42 Thread* gunner_thread_ptr = NULL; // Possiblement mettre dans un tableau
groygirard 6:fd1bf5563299 43 Thread* rps_thread_ptr = NULL; // avec des position codees
groygirard 6:fd1bf5563299 44 Thread* airguitar_thread_ptr = NULL; // dans des define. guillaume
groygirard 12:ebb08773dbdb 45
groygirard 12:ebb08773dbdb 46 typedef struct {
groygirard 12:ebb08773dbdb 47 accel_t accel_data;
groygirard 12:ebb08773dbdb 48 flex_t flex_data;
groygirard 12:ebb08773dbdb 49 } sensors_t;
groygirard 12:ebb08773dbdb 50
groygirard 12:ebb08773dbdb 51 Mail<sensors_t, 32> mailbox_sensors;
groygirard 12:ebb08773dbdb 52
groygirard 12:ebb08773dbdb 53 void etat_de_jeu(void const *args)
groygirard 12:ebb08773dbdb 54 {
groygirard 12:ebb08773dbdb 55
groygirard 12:ebb08773dbdb 56 while(true) {
groygirard 12:ebb08773dbdb 57 Thread::signal_wait(0x1);
groygirard 12:ebb08773dbdb 58 m_pc.printf("Etat \r\n");
groygirard 12:ebb08773dbdb 59 switch(play) {
groygirard 12:ebb08773dbdb 60 case 0:
groygirard 12:ebb08773dbdb 61 sync->stop();
groygirard 12:ebb08773dbdb 62 break;
groygirard 12:ebb08773dbdb 63 case 1:
groygirard 12:ebb08773dbdb 64 sync->start(250);
groygirard 12:ebb08773dbdb 65 break;
groygirard 12:ebb08773dbdb 66 default:
groygirard 12:ebb08773dbdb 67 break;
groygirard 12:ebb08773dbdb 68 }
groygirard 12:ebb08773dbdb 69 }
groygirard 12:ebb08773dbdb 70 }
groygirard 12:ebb08773dbdb 71
groygirard 12:ebb08773dbdb 72 void reception_coord(void const *args)
groygirard 12:ebb08773dbdb 73 {
groygirard 12:ebb08773dbdb 74 while(true) {
groygirard 12:ebb08773dbdb 75 if(play == 0) {
groygirard 12:ebb08773dbdb 76 play = 1;
groygirard 12:ebb08773dbdb 77 threads[1]->signal_set(0x1);
groygirard 12:ebb08773dbdb 78 Thread::wait(2000);
groygirard 12:ebb08773dbdb 79 } else {
groygirard 12:ebb08773dbdb 80 play = 0;
groygirard 12:ebb08773dbdb 81 threads[1]->signal_set(0x1);
groygirard 12:ebb08773dbdb 82 Thread::wait(2000);
groygirard 12:ebb08773dbdb 83 }
groygirard 12:ebb08773dbdb 84 }
groygirard 12:ebb08773dbdb 85 }
groygirard 12:ebb08773dbdb 86
llarose 1:601d2922ff06 87 int main(void const* args)
llarose 1:601d2922ff06 88 {
groygirard 6:fd1bf5563299 89 // Initializing the accelerometer
groygirard 6:fd1bf5563299 90 accel = Accel();
groygirard 6:fd1bf5563299 91 accel.init_MMA8452();
groygirard 12:ebb08773dbdb 92 RtosTimer timer(get_sensor_data, osTimerPeriodic, (void *)0);
groygirard 12:ebb08773dbdb 93 sync = &timer;
llarose 1:601d2922ff06 94 GameMode mode = GUNNER;
groygirard 6:fd1bf5563299 95 switch(mode) {
llarose 1:601d2922ff06 96 case GUNNER:
llarose 1:601d2922ff06 97 gunner_thread_ptr = new Thread(gunner);
llarose 1:601d2922ff06 98 break;
llarose 1:601d2922ff06 99 case RPS:
llarose 1:601d2922ff06 100 rps_thread_ptr = new Thread(rps);
llarose 1:601d2922ff06 101 break;
llarose 1:601d2922ff06 102 case AirGuitar:
llarose 1:601d2922ff06 103 airguitar_thread_ptr = new Thread(airGuitar);
llarose 1:601d2922ff06 104 break;
llarose 1:601d2922ff06 105 default:
llarose 1:601d2922ff06 106 break;
llarose 1:601d2922ff06 107 }
groygirard 12:ebb08773dbdb 108
groygirard 12:ebb08773dbdb 109 Thread thread(reception_coord);
groygirard 12:ebb08773dbdb 110 Thread thread2(etat_de_jeu);
groygirard 12:ebb08773dbdb 111 threads[0] = &thread;
groygirard 12:ebb08773dbdb 112 threads[1] = &thread2;
groygirard 12:ebb08773dbdb 113
groygirard 12:ebb08773dbdb 114 while(true) {
groygirard 6:fd1bf5563299 115 }
llarose 1:601d2922ff06 116 }
groygirard 12:ebb08773dbdb 117
llarose 1:601d2922ff06 118 void gunner(void const* args)
groygirard 12:ebb08773dbdb 119 {
groygirard 12:ebb08773dbdb 120 // local variables
llarose 3:a77d02cb5694 121 Cible* cible = new Cible();
llarose 3:a77d02cb5694 122 countDown.run();
groygirard 12:ebb08773dbdb 123
groygirard 12:ebb08773dbdb 124 while(true) {
llarose 3:a77d02cb5694 125 // Thread::signal_wait(GO);
llarose 3:a77d02cb5694 126 cible->reset();
llarose 3:a77d02cb5694 127 int target = rand() % 3;
groygirard 12:ebb08773dbdb 128
llarose 3:a77d02cb5694 129 cible->set(target);
llarose 3:a77d02cb5694 130 countDown.run();
llarose 1:601d2922ff06 131 }
llarose 1:601d2922ff06 132 }
groygirard 12:ebb08773dbdb 133
llarose 1:601d2922ff06 134 void rps(void const* args)
llarose 1:601d2922ff06 135 {
groygirard 6:fd1bf5563299 136 // local variables
groygirard 12:ebb08773dbdb 137
groygirard 6:fd1bf5563299 138 while(true) {
llarose 1:601d2922ff06 139 Thread::signal_wait(GO);
llarose 1:601d2922ff06 140 // code...
llarose 1:601d2922ff06 141 }
llarose 1:601d2922ff06 142 }
groygirard 12:ebb08773dbdb 143
llarose 1:601d2922ff06 144 void airGuitar(void const* args)
llarose 1:601d2922ff06 145 {
groygirard 6:fd1bf5563299 146 // local variables
groygirard 12:ebb08773dbdb 147
groygirard 6:fd1bf5563299 148 while(true) {
llarose 1:601d2922ff06 149 Thread::signal_wait(GO);
llarose 1:601d2922ff06 150 // code...
llarose 1:601d2922ff06 151 }
llarose 1:601d2922ff06 152 }
groygirard 12:ebb08773dbdb 153
groygirard 12:ebb08773dbdb 154
groygirard 12:ebb08773dbdb 155 void get_sensor_data(void const* args)
groygirard 6:fd1bf5563299 156 {
groygirard 12:ebb08773dbdb 157 sensors_t *mail = mailbox_sensors.alloc();
groygirard 12:ebb08773dbdb 158 mail->accel_data = accel.get_axis_values();
groygirard 12:ebb08773dbdb 159 mail->flex_data = flex.get_flex_values();
groygirard 12:ebb08773dbdb 160 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 161 mailbox_sensors.put(mail);
groygirard 12:ebb08773dbdb 162 }