Last versionnnn

Dependencies:   BLE_API HCSR04 X_NUCLEO_IDB0XA1 mbed

Fork of contest_IOT3 by Contest IOT GSE5

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "HCSR04.h"
00003 #include "jeu.h"
00004 #include "display.h"
00005 #include <math.h>
00006 
00007 
00008 #define ECHO_1  PA_9
00009 #define ECHO_2  PB_9
00010 #define TRIG_1  PC_7
00011 #define TRIG_2  PB_8
00012 #define PUSH    USER_BUTTON //PC_13
00013 #define LED_1   LED1
00014 
00015 /*
00016 #define ECHO_1  PA_4
00017 #define ECHO_2  PB_3
00018 #define TRIG_1  PB_5
00019 #define TRIG_2  PA_10
00020 #define PUSH    PA_9 //PC_13
00021 #define LED_1   PA_8
00022 */
00023 
00024 //------------------------------------
00025 // Hyperterminal configuration
00026 // 115200 bauds, 8-bit data, no parity
00027 //------------------------------------
00028 
00029 
00030 DigitalOut led(LED_1);      //Led d'état
00031 DigitalIn bp(PUSH);
00032 Serial pc(USBTX, USBRX);    //UART
00033 
00034 
00035 HCSR04 sensor1(TRIG_1, ECHO_1);
00036 HCSR04 sensor2(TRIG_2, ECHO_2); 
00037 
00038 BLE  ble;
00039 
00040 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params){
00041     ble.gap().startAdvertising(); // restart advertising
00042 }
00043 
00044 InfosJeu jeu;
00045 /*  ACTION POSSIBLES : 
00046  *  --> Accès aux valeurs :
00047  *      jeu.p1_score
00048  *      jeu.p2_score
00049  *      jeu.chrono
00050  *      jeu.pos1prec[30];
00051  *      jeu.pos2prec[30];
00052  *      jeu.pos1[30];
00053  *      jeu.pos2[30];
00054  *      jeu.posBallX;
00055  *      jeu.posBallY;
00056  *      jeu.angBall;
00057  *      jeu.distance1;
00058  *      jeu.distance2;
00059  *      jeu.state;
00060  *
00061  *  --> Méthodes utiles :
00062  *      jeu.addPointP1();
00063  *      jeu.addPointP2();
00064  *      jeu.setChronoActive();
00065  *      jeu.incrementeChrono();
00066  *      jeu.stopChrono();
00067  *      jeu.resetAndStart();
00068  */   
00069 
00070 int main() {
00071     //Initialisation des fonctions récurrentes (toutes les secondes)
00072     Ticker ticker;
00073     ticker.attach(periodicCallback, 1); // blink LED every second
00074     Ticker tickerChrono;
00075     tickerChrono.attach(&jeu, &InfosJeu::incrementeChrono, 1);
00076     
00077     //Initialisation du BLE
00078     initJeuBLE(ble);
00079     ble.gap().onDisconnection(disconnectionCallback);
00080     
00081     //Initialisation de l'affichage
00082     pong_init_ttempro(pc);
00083     pc.baud(115200);
00084     
00085     //Boucle d'exécution du programme
00086     while(1) {
00087         
00088         /*
00089         ******* Mise à jour des données BLE chaque seconde *******
00090         */
00091         if(triggerSensorPolling && ble.getGapState().connected){
00092             triggerSensorPolling = false; // flag indiquant qu'une seconde s'est écoulée, il faut mettre à jour les données BLE           
00093             miseAJourBLE(ble, jeu.p1_score, jeu.p2_score, jeu.chrono);
00094         }else{
00095             ble.waitForEvent(); // low power wait for event
00096         }
00097         
00098         /*
00099         ******* Mécanique de jeu ********
00100         */
00101         switch(jeu.state){
00102         case 0 :    if(bp.read() != 1){ 
00103                         jeu.state = 3; 
00104                         pong_init_ttempro(pc);
00105                         jeu.setChronoActive();
00106                     }
00107                     break;
00108                     
00109         case 3 :    for(int i=0; i<=29; i++){
00110                         jeu.pos1prec[i]= jeu.pos1[i];
00111                         jeu.pos2prec[i]= jeu.pos2[i];
00112                         jeu.pos1[i]= 0;
00113                         jeu.pos2[i]= 0;
00114                     }
00115                     jeu.distance1 = sensor1.distance(1);
00116                     jeu.distance2 = sensor2.distance(1);
00117                     set_pos_vector(jeu.pos1,jeu.distance1);
00118                     set_pos_vector(jeu.pos2,jeu.distance2);     
00119                     print_cursor_ttempro(pc,jeu.pos1,jeu.pos1prec,jeu.pos2,jeu.pos2prec);
00120                     jeu.state = set_print_ball(pc,jeu.pos1,jeu.pos2,&jeu.posBallX,&jeu.posBallY,&jeu.angBall);
00121                     break;
00122                     
00123         case 1 :    jeu.addPointP2();
00124                     if( jeu.p2_score >= 3){ 
00125                         pc.printf("\033[2J");       //Efface la console
00126                         pc.printf("\033[16;60H"); 
00127                         pc.printf("P2  WIN ");
00128                         jeu.stopChrono();
00129                         jeu.reinitPosition(0, 0, 5.0, 19.0, 25.0); // (p1_score, p2_score, posBallX, posBallY, angBall)
00130                     }
00131                     else{
00132                         pc.printf("\033[2J");       //Efface la console
00133                         pc.printf("\033[10;60H"); 
00134                         pc.printf("P1 : %d  // P2 : %d",jeu.p1_score,jeu.p2_score);
00135                         jeu.reinitPosition(jeu.p1_score, jeu.p2_score, 5.0, 19.0, 25.0); // (p1_score, p2_score, posBallX, posBallY, angBall)
00136                     }
00137                     jeu.state = 0;
00138                     break;
00139                     
00140         case 2 :    jeu.addPointP1();
00141                     if( jeu.p1_score >= 3){ 
00142                         pc.printf("\033[2J");       //Efface la console
00143                         pc.printf("\033[16;60H"); 
00144                         pc.printf("P1  WIN ");
00145                         jeu.stopChrono();
00146                         jeu.reinitPosition(0, 0, 124.0, 19.0, 145.0); // (p1_score, p2_score, posBallX, posBallY, angBall)
00147                     }
00148                     else{
00149                         pc.printf("\033[2J");       //Efface la console
00150                         pc.printf("\033[10;60H"); 
00151                         pc.printf("P1 : %d  // P2 : %d",jeu.p1_score,jeu.p2_score);
00152                         jeu.reinitPosition(jeu.p1_score, jeu.p2_score, 124.0, 19.0, 145.0); // (p1_score, p2_score, posBallX, posBallY, angBall)
00153                     }
00154                     jeu.state = 0;
00155                     break;
00156         }
00157         wait(0.1);
00158     }
00159 }
00160 
00161