Last

Dependencies:   BLE_API HCSR04 X_NUCLEO_IDB0XA1 mbed

Fork of contest_IOT5 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                     }
00106                     break;
00107                     
00108         case 4 :    for(int i=0; i<=29; i++){
00109                         jeu.pos1prec[i]= jeu.pos1[i];
00110                         jeu.pos2prec[i]= jeu.pos2[i];
00111                         jeu.pos1[i]= 0;
00112                         jeu.pos2[i]= 0;
00113                     }
00114                     jeu.distance1 = sensor1.distance(1);
00115                     jeu.distance2 = sensor2.distance(1);
00116                     set_pos_vector(jeu.pos1,jeu.distance1);
00117                     set_pos_vector(jeu.pos2,jeu.distance2);     
00118                     print_cursor_ttempro(pc,jeu.pos1,jeu.pos1prec,jeu.pos2,jeu.pos2prec);
00119                     print_ball(pc,&jeu.distance1,&jeu.distance2,&jeu.posBallX,&jeu.posBallY);
00120                     if(bp.read() != 1){ 
00121                         jeu.state = 3; 
00122                         pong_init_ttempro(pc);
00123                         jeu.setChronoActive();
00124                     }
00125                     break;
00126                     
00127         case 3 :    for(int i=0; i<=29; i++){
00128                         jeu.pos1prec[i]= jeu.pos1[i];
00129                         jeu.pos2prec[i]= jeu.pos2[i];
00130                         jeu.pos1[i]= 0;
00131                         jeu.pos2[i]= 0;
00132                     }
00133                     jeu.distance1 = sensor1.distance(1);
00134                     jeu.distance2 = sensor2.distance(1);
00135                     set_pos_vector(jeu.pos1,jeu.distance1);
00136                     set_pos_vector(jeu.pos2,jeu.distance2);     
00137                     print_cursor_ttempro(pc,jeu.pos1,jeu.pos1prec,jeu.pos2,jeu.pos2prec);
00138                     jeu.state = set_print_ball(pc,jeu.pos1,jeu.pos2,&jeu.posBallX,&jeu.posBallY,&jeu.angBall);
00139                     break;
00140                     
00141         case 1 :    jeu.addPointP2();
00142                     if( jeu.p2_score >= 3){ 
00143                         pc.printf("\033[2J");       //Efface la console
00144                         pc.printf("\033[16;60H"); 
00145                         pc.printf("P2  WIN ");
00146                         jeu.stopChrono();
00147                         jeu.reinitPosition(0, 0, 5.0, 19.0, 25.0); // (p1_score, p2_score, posBallX, posBallY, angBall)
00148                     }
00149                     else{
00150                         pc.printf("\033[2J");       //Efface la console
00151                         pc.printf("\033[10;60H"); 
00152                         pc.printf("P1 : %d  // P2 : %d",jeu.p1_score,jeu.p2_score);
00153                         jeu.reinitPosition(jeu.p1_score, jeu.p2_score, 5.0, 19.0, 25.0); // (p1_score, p2_score, posBallX, posBallY, angBall)
00154                     }
00155                     jeu.state = 0;
00156                     break;
00157                     
00158         case 2 :    jeu.addPointP1();
00159                     if( jeu.p1_score >= 3){ 
00160                         pc.printf("\033[2J");       //Efface la console
00161                         pc.printf("\033[16;60H"); 
00162                         pc.printf("P1  WIN ");
00163                         jeu.stopChrono();
00164                         jeu.reinitPosition(0, 0, 124.0, 19.0, 145.0); // (p1_score, p2_score, posBallX, posBallY, angBall)
00165                     }
00166                     else{
00167                         pc.printf("\033[2J");       //Efface la console
00168                         pc.printf("\033[10;60H"); 
00169                         pc.printf("P1 : %d  // P2 : %d",jeu.p1_score,jeu.p2_score);
00170                         jeu.reinitPosition(jeu.p1_score, jeu.p2_score, 124.0, 19.0, 145.0); // (p1_score, p2_score, posBallX, posBallY, angBall)
00171                     }
00172                     jeu.state = 0;
00173                     break;
00174         }
00175         wait(0.1);
00176     }
00177 }
00178 
00179