Last versionnnn
Dependencies: BLE_API HCSR04 X_NUCLEO_IDB0XA1 mbed
Fork of contest_IOT3 by
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
Generated on Mon Jul 18 2022 01:28:44 by 1.7.2