Alexandre HOCHART / Mbed 2 deprecated contest_IOT_10

Dependencies:   BLE_API HCSR04 X_NUCLEO_IDB0XA1 mbed

Fork of contest_IOT6 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 TRIG_1  PA_9
00009 #define TRIG_2  PB_10
00010 #define ECHO_1  PC_7
00011 #define ECHO_2  PA_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  PA_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     /*
00079     initJeuBLE(ble);
00080     ble.gap().onDisconnection(disconnectionCallback);
00081     */
00082     
00083     //Initialisation de l'affichage
00084     pong_init_ttempro(pc);
00085     pc.baud(115200);
00086     
00087     //Boucle d'exécution du programme
00088     while(1) {
00089         
00090         /*
00091         ******* Mise à jour des données BLE chaque seconde *******
00092         
00093         if(triggerSensorPolling && ble.getGapState().connected){
00094             triggerSensorPolling = false; // flag indiquant qu'une seconde s'est écoulée, il faut mettre à jour les données BLE           
00095             miseAJourBLE(ble, jeu.p1_score, jeu.p2_score, jeu.chrono);
00096         }else{
00097             ble.waitForEvent(); // low power wait for event
00098         }
00099         */
00100         /*
00101         ******* Mécanique de jeu ********
00102         */
00103         switch(jeu.state){
00104         case 0 :    if(bp.read() != 1){ 
00105                         jeu.state = 4; 
00106                         pong_init_ttempro(pc);
00107                     }
00108                     break;
00109                     
00110         case 4 :    for(int i=0; i<=29; i++){
00111                         jeu.pos1prec[i]= jeu.pos1[i];
00112                         jeu.pos2prec[i]= jeu.pos2[i];
00113                         jeu.pos1[i]= 0;
00114                         jeu.pos2[i]= 0;
00115                     }
00116                     jeu.distance1 = sensor1.distance(1);
00117                     jeu.distance2 = sensor2.distance(1);
00118                     set_pos_vector(jeu.pos1,jeu.distance1);
00119                     set_pos_vector(jeu.pos2,jeu.distance2);     
00120                     print_cursor_ttempro(pc,jeu.pos1,jeu.pos1prec,jeu.pos2,jeu.pos2prec);
00121                     print_ball(pc,&jeu.distance1,&jeu.distance2,&jeu.posBallX,&jeu.posBallY);
00122                     if(bp.read() != 1){ 
00123                         jeu.state = 3; 
00124                         jeu.setChronoActive();
00125                     }
00126                     break;
00127                     
00128         case 3 :    for(int i=0; i<=29; i++){
00129                         jeu.pos1prec[i]= jeu.pos1[i];
00130                         jeu.pos2prec[i]= jeu.pos2[i];
00131                         jeu.pos1[i]= 0;
00132                         jeu.pos2[i]= 0;
00133                     }
00134                     jeu.distance1 = sensor1.distance(1);
00135                     jeu.distance2 = sensor2.distance(1);
00136                     set_pos_vector(jeu.pos1,jeu.distance1);
00137                     set_pos_vector(jeu.pos2,jeu.distance2);     
00138                     print_cursor_ttempro(pc,jeu.pos1,jeu.pos1prec,jeu.pos2,jeu.pos2prec);
00139                     jeu.state = set_print_ball(pc,jeu.pos1,jeu.pos2,&jeu.posBallX,&jeu.posBallY,&jeu.angBall);
00140                     break;
00141                     
00142         case 1 :    jeu.addPointP2();
00143                     if( jeu.p2_score >= 3){ 
00144                         pc.printf("\033[2J");       //Efface la console
00145                         pc.printf("\033[16;60H"); 
00146                         pc.printf("P2  WIN ");
00147                         jeu.stopChrono();
00148                         jeu.reinitPosition(0, 0, 4.0, 19.0, 25.0); // (p1_score, p2_score, posBallX, posBallY, angBall)
00149                     }
00150                     else{
00151                         pc.printf("\033[2J");       //Efface la console
00152                         pc.printf("\033[16;55H"); 
00153                         pc.printf("P1 : %d  // P2 : %d",jeu.p1_score,jeu.p2_score);
00154                         jeu.reinitPosition(jeu.p1_score, jeu.p2_score, 4.0, 19.0, 25.0); // (p1_score, p2_score, posBallX, posBallY, angBall)
00155                     }
00156                     jeu.state = 0;
00157                     break;
00158                     
00159         case 2 :    jeu.addPointP1();
00160                     if( jeu.p1_score >= 3){ 
00161                         pc.printf("\033[2J");       //Efface la console
00162                         pc.printf("\033[16;60H"); 
00163                         pc.printf("P1  WIN ");
00164                         jeu.stopChrono();
00165                         jeu.reinitPosition(0, 0, 125.0, 19.0, 145.0); // (p1_score, p2_score, posBallX, posBallY, angBall)
00166                     }
00167                     else{
00168                         pc.printf("\033[2J");       //Efface la console
00169                         pc.printf("\033[16;55H"); 
00170                         pc.printf("P1 : %d  // P2 : %d",jeu.p1_score,jeu.p2_score);
00171                         jeu.reinitPosition(jeu.p1_score, jeu.p2_score, 125.0, 19.0, 145.0); // (p1_score, p2_score, posBallX, posBallY, angBall)
00172                     }
00173                     jeu.state = 0;
00174                     break;
00175         }
00176         wait(0.075);
00177     }
00178 }
00179 
00180