Projet_S5 / Mbed 2 deprecated Repo_Noeud_Mobile_refactor

Dependencies:   mbed-rtos mbed

Fork of Repo_Noeud_Mobile by Projet_S5

Committer:
groygirard
Date:
Sat Mar 21 17:24:38 2015 +0000
Revision:
15:dc18545822b3
Parent:
14:bda91cead7f2
Child:
17:1a634bb615f3
Child:
25:184915935d68
analyze  sensor data

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"
groygirard 14:bda91cead7f2 17
llarose 1:601d2922ff06 18 #define GO 0x01
groygirard 14:bda91cead7f2 19
groygirard 12:ebb08773dbdb 20 Serial m_pc(USBTX, USBRX);
groygirard 14:bda91cead7f2 21
llarose 1:601d2922ff06 22 enum GameMode { GUNNER, RPS, AirGuitar};
groygirard 14:bda91cead7f2 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 15:dc18545822b3 29 void analyze_sensor_data(void const* args);
groygirard 15:dc18545822b3 30 void analyze_GUNNER(uint8_t axe_x);
groygirard 15:dc18545822b3 31 void analyze_RPS(uint8_t axe_z);
groygirard 15:dc18545822b3 32 void analyze_GUITAR(uint8_t axe_z);
groygirard 15:dc18545822b3 33 void etat_de_jeu(void const *args);
groygirard 15:dc18545822b3 34 void reception_coord(void const *args);
groygirard 14:bda91cead7f2 35
groygirard 12:ebb08773dbdb 36 uint8_t play = 0;
groygirard 14:bda91cead7f2 37
llarose 1:601d2922ff06 38 FlexSensor index(DIGITAL, p15); // flex sensor 1.
llarose 1:601d2922ff06 39 FlexSensor majeur(DIGITAL, p16); // flex sensor 2.
llarose 1:601d2922ff06 40 FlexSensor annulaire(DIGITAL, p17); // flex sensor 3.
llarose 1:601d2922ff06 41 CountDown countDown;
groygirard 6:fd1bf5563299 42 Accel accel;
groygirard 12:ebb08773dbdb 43 FlexSensor flex;
groygirard 12:ebb08773dbdb 44 RtosTimer *sync;
groygirard 14:bda91cead7f2 45 GameMode mode = RPS;
groygirard 15:dc18545822b3 46
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
groygirard 14:bda91cead7f2 52
groygirard 12:ebb08773dbdb 53 typedef struct {
groygirard 12:ebb08773dbdb 54 accel_t accel_data;
groygirard 12:ebb08773dbdb 55 flex_t flex_data;
groygirard 12:ebb08773dbdb 56 } sensors_t;
groygirard 14:bda91cead7f2 57
groygirard 12:ebb08773dbdb 58 Mail<sensors_t, 32> mailbox_sensors;
groygirard 14:bda91cead7f2 59
groygirard 14:bda91cead7f2 60
llarose 1:601d2922ff06 61 int main(void const* args)
llarose 1:601d2922ff06 62 {
groygirard 6:fd1bf5563299 63 // Initializing the accelerometer
groygirard 6:fd1bf5563299 64 accel = Accel();
groygirard 6:fd1bf5563299 65 accel.init_MMA8452();
groygirard 12:ebb08773dbdb 66 RtosTimer timer(get_sensor_data, osTimerPeriodic, (void *)0);
groygirard 12:ebb08773dbdb 67 sync = &timer;
groygirard 15:dc18545822b3 68
groygirard 6:fd1bf5563299 69 switch(mode) {
llarose 1:601d2922ff06 70 case GUNNER:
llarose 1:601d2922ff06 71 gunner_thread_ptr = new Thread(gunner);
llarose 1:601d2922ff06 72 break;
llarose 1:601d2922ff06 73 case RPS:
llarose 1:601d2922ff06 74 rps_thread_ptr = new Thread(rps);
llarose 1:601d2922ff06 75 break;
llarose 1:601d2922ff06 76 case AirGuitar:
llarose 1:601d2922ff06 77 airguitar_thread_ptr = new Thread(airGuitar);
llarose 1:601d2922ff06 78 break;
llarose 1:601d2922ff06 79 default:
llarose 1:601d2922ff06 80 break;
llarose 1:601d2922ff06 81 }
groygirard 14:bda91cead7f2 82
groygirard 14:bda91cead7f2 83 Thread thread0(reception_coord);
groygirard 14:bda91cead7f2 84 Thread thread1(etat_de_jeu);
groygirard 14:bda91cead7f2 85 Thread thread2(analyze_sensor_data);
groygirard 14:bda91cead7f2 86 threads[0] = &thread0;
groygirard 14:bda91cead7f2 87 threads[1] = &thread1;
groygirard 14:bda91cead7f2 88 threads[2] = &thread2;
groygirard 14:bda91cead7f2 89
groygirard 12:ebb08773dbdb 90 while(true) {
groygirard 6:fd1bf5563299 91 }
llarose 1:601d2922ff06 92 }
groygirard 14:bda91cead7f2 93
llarose 1:601d2922ff06 94 void gunner(void const* args)
groygirard 12:ebb08773dbdb 95 {
groygirard 12:ebb08773dbdb 96 // local variables
llarose 3:a77d02cb5694 97 Cible* cible = new Cible();
llarose 3:a77d02cb5694 98 countDown.run();
groygirard 14:bda91cead7f2 99
groygirard 12:ebb08773dbdb 100 while(true) {
llarose 3:a77d02cb5694 101 // Thread::signal_wait(GO);
llarose 3:a77d02cb5694 102 cible->reset();
llarose 3:a77d02cb5694 103 int target = rand() % 3;
groygirard 14:bda91cead7f2 104
llarose 3:a77d02cb5694 105 cible->set(target);
llarose 3:a77d02cb5694 106 countDown.run();
llarose 1:601d2922ff06 107 }
llarose 1:601d2922ff06 108 }
groygirard 14:bda91cead7f2 109
llarose 1:601d2922ff06 110 void rps(void const* args)
llarose 1:601d2922ff06 111 {
groygirard 6:fd1bf5563299 112 // local variables
groygirard 14:bda91cead7f2 113
groygirard 6:fd1bf5563299 114 while(true) {
llarose 1:601d2922ff06 115 Thread::signal_wait(GO);
llarose 1:601d2922ff06 116 // code...
llarose 1:601d2922ff06 117 }
llarose 1:601d2922ff06 118 }
groygirard 14:bda91cead7f2 119
llarose 1:601d2922ff06 120 void airGuitar(void const* args)
llarose 1:601d2922ff06 121 {
groygirard 6:fd1bf5563299 122 // local variables
groygirard 14:bda91cead7f2 123
groygirard 6:fd1bf5563299 124 while(true) {
llarose 1:601d2922ff06 125 Thread::signal_wait(GO);
llarose 1:601d2922ff06 126 // code...
llarose 1:601d2922ff06 127 }
llarose 1:601d2922ff06 128 }
groygirard 14:bda91cead7f2 129
groygirard 14:bda91cead7f2 130
groygirard 12:ebb08773dbdb 131 void get_sensor_data(void const* args)
groygirard 6:fd1bf5563299 132 {
groygirard 12:ebb08773dbdb 133 sensors_t *mail = mailbox_sensors.alloc();
groygirard 12:ebb08773dbdb 134 mail->accel_data = accel.get_axis_values();
groygirard 12:ebb08773dbdb 135 mail->flex_data = flex.get_flex_values();
groygirard 12:ebb08773dbdb 136 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 137 mailbox_sensors.put(mail);
groygirard 14:bda91cead7f2 138 }
groygirard 14:bda91cead7f2 139
groygirard 15:dc18545822b3 140 void analyze_GUNNER(uint8_t axe_x)
groygirard 15:dc18545822b3 141 {
groygirard 15:dc18545822b3 142 }
groygirard 15:dc18545822b3 143
groygirard 15:dc18545822b3 144 void analyze_RPS(uint8_t axe_z)
groygirard 15:dc18545822b3 145 {
groygirard 15:dc18545822b3 146
groygirard 15:dc18545822b3 147 }
groygirard 15:dc18545822b3 148
groygirard 15:dc18545822b3 149 void analyze_GUITAR(uint8_t axe_z)
groygirard 15:dc18545822b3 150 {
groygirard 15:dc18545822b3 151 }
groygirard 15:dc18545822b3 152
groygirard 15:dc18545822b3 153 void etat_de_jeu(void const *args)
groygirard 15:dc18545822b3 154 {
groygirard 15:dc18545822b3 155
groygirard 15:dc18545822b3 156 while(true) {
groygirard 15:dc18545822b3 157 Thread::signal_wait(0x1);
groygirard 15:dc18545822b3 158 m_pc.printf("Etat \r\n");
groygirard 15:dc18545822b3 159 switch(play) {
groygirard 15:dc18545822b3 160 case 0:
groygirard 15:dc18545822b3 161 sync->stop();
groygirard 15:dc18545822b3 162 break;
groygirard 15:dc18545822b3 163 case 1:
groygirard 15:dc18545822b3 164 sync->start(250);
groygirard 15:dc18545822b3 165 break;
groygirard 15:dc18545822b3 166 default:
groygirard 15:dc18545822b3 167 break;
groygirard 15:dc18545822b3 168 }
groygirard 15:dc18545822b3 169 }
groygirard 15:dc18545822b3 170 }
groygirard 15:dc18545822b3 171
groygirard 15:dc18545822b3 172 void reception_coord(void const *args)
groygirard 15:dc18545822b3 173 {
groygirard 15:dc18545822b3 174 while(true) {
groygirard 15:dc18545822b3 175 if(play == 0) {
groygirard 15:dc18545822b3 176 play = 1;
groygirard 15:dc18545822b3 177 threads[1]->signal_set(0x1);
groygirard 15:dc18545822b3 178 Thread::wait(2000);
groygirard 15:dc18545822b3 179 } else {
groygirard 15:dc18545822b3 180 play = 0;
groygirard 15:dc18545822b3 181 threads[1]->signal_set(0x1);
groygirard 15:dc18545822b3 182 Thread::wait(2000);
groygirard 15:dc18545822b3 183 }
groygirard 15:dc18545822b3 184 }
groygirard 15:dc18545822b3 185 }
groygirard 15:dc18545822b3 186
groygirard 14:bda91cead7f2 187 void analyze_sensor_data(void const* args)
groygirard 14:bda91cead7f2 188 {
groygirard 14:bda91cead7f2 189 while (true) {
groygirard 14:bda91cead7f2 190 // attente et lecture d'un événement digital
groygirard 14:bda91cead7f2 191 osEvent evtD = mailbox_sensors.get();
groygirard 14:bda91cead7f2 192 if (evtD.status == osEventMail) {
groygirard 14:bda91cead7f2 193 sensors_t *mail = (sensors_t*)evtD.value.p;
groygirard 14:bda91cead7f2 194 // écriture de l'événement en sortie (port série)
groygirard 15:dc18545822b3 195 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);
groygirard 14:bda91cead7f2 196 switch(mode) {
groygirard 14:bda91cead7f2 197 case GUNNER:
groygirard 15:dc18545822b3 198 analyze_GUNNER(mail->accel_data.x);
groygirard 14:bda91cead7f2 199 break;
groygirard 14:bda91cead7f2 200 case RPS:
groygirard 14:bda91cead7f2 201 analyze_RPS(mail->accel_data.z);
groygirard 14:bda91cead7f2 202 break;
groygirard 14:bda91cead7f2 203 case AirGuitar:
groygirard 15:dc18545822b3 204 analyze_GUITAR(mail->accel_data.z);
groygirard 14:bda91cead7f2 205 break;
groygirard 14:bda91cead7f2 206 default:
groygirard 14:bda91cead7f2 207 break;
groygirard 14:bda91cead7f2 208 }
groygirard 14:bda91cead7f2 209 mailbox_sensors.free(mail);
groygirard 14:bda91cead7f2 210 }
groygirard 14:bda91cead7f2 211 }
groygirard 15:dc18545822b3 212 }