Pong Game Tea Term

Dependencies:   HCSR04 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 <math.h>
00004 
00005 #define ECHO_1  PA_4
00006 #define ECHO_2  PB_3
00007 #define TRIG_1  PB_5
00008 #define TRIG_2  PA_10
00009 #define PUSH    PA_9 //PC_13
00010 #define LED_1   PA_8
00011 
00012 //------------------------------------
00013 // Hyperterminal configuration
00014 // 115200 bauds, 8-bit data, no parity
00015 //------------------------------------
00016 
00017 
00018 Serial pc(USBTX, USBRX);    //UART
00019 DigitalOut led(LED_1);      //Led d'état
00020 DigitalIn bp(PUSH);
00021 
00022 HCSR04 sensor1(TRIG_1, ECHO_1);
00023 HCSR04 sensor2(TRIG_2, ECHO_2); 
00024 
00025 void pong_init_ttempro(){
00026 
00027     pc.printf("\033[2J");       //Efface la console
00028     pc.printf("\033[?25l");     //Cache le curseur
00029     
00030     for(int i=0; i <= 128 ; i++){
00031         pc.printf("\033[0;%dH",i);     //Place le curseur à 0:0
00032         pc.printf("X");     //Place le curseur à 0:0
00033         pc.printf("\033[32;%dH",i);     //Place le curseur à 0:0
00034         pc.printf("X");     //Place le curseur à 0:0
00035     }
00036     
00037     for(int i=0; i <= 32 ; i++){
00038         pc.printf("\033[%d;0H",i);     //Place le curseur à 0:0
00039         pc.printf("X");     //Place le curseur à 0:0
00040         pc.printf("\033[%d;128H",i);     //Place le curseur à 0:0
00041         pc.printf("X");     //Place le curseur à 0:0
00042     }
00043     
00044 }
00045 
00046 void print_cursor_ttempro(int *pos1, int *pos1prec, int *pos2, int *pos2prec){
00047     for(int i=0;i<=29;i++){
00048         if( pos1[i] != pos1prec[i] ){
00049             if(pos1[i] == 1){
00050                 pc.printf("\033[%d;3H",i+2);     //Place le curseur à 0:0
00051                 pc.printf("X");     //Place le curseur à 0:0  
00052             }
00053             else{
00054                 pc.printf("\033[%d;3H",i+2);     //Place le curseur à 0:0
00055                 pc.printf(" ");     //Place le curseur à 0:0  
00056             }
00057         }
00058                 
00059         if( pos2[i] != pos2prec[i] ){
00060             if(pos2[i] == 1){
00061                 pc.printf("\033[%d;126H",i+2);     //Place le curseur à 0:0
00062                 pc.printf("X");     //Place le curseur à 0:0  
00063             }
00064             else{
00065                 pc.printf("\033[%d;126H",i+2);     //Place le curseur à 0:0
00066                 pc.printf(" ");     //Place le curseur à 0:0  
00067             }
00068         }   
00069     } 
00070 }
00071 
00072 void set_pos_vector(int *pos, int distance){
00073             
00074     if(distance <= 10){
00075         for(int i=0;i<=5;i++){ pos[i] = 1; }
00076     }
00077     else if(distance >= 34){
00078         for(int i=24;i<=29;i++){ pos[i] = 1; }
00079     }
00080     else{
00081         for(int i=(distance-10);i<=(distance-4);i++){ pos[i] = 1; }
00082     }   
00083 }
00084 
00085 int set_print_ball(int *pos1,int *pos2,double *posBallX, double *posBallY, double *angBall){
00086     
00087     pc.printf("\033[%d;%dH",(int)*posBallY, (int)*posBallX);     //Place le curseur à 0:0
00088     pc.printf(" ");     //Place le curseur à 0:0  
00089     *posBallX = *posBallX + 2.0*cos((double)*angBall*3.1415/180.0);
00090     *posBallY = *posBallY - 2.0*sin((double)*angBall*3.1415/180.0);
00091     
00092     if(*posBallX <= 4){
00093         if(pos1[(int)*posBallY] == 1){
00094             *posBallX = 8 - *posBallX;
00095             *angBall = 180 - *angBall;
00096         }
00097         else{ return 1; }
00098         }
00099     else if(*posBallX >= 125){
00100         if(pos2[(int)*posBallY] == 1){
00101             *posBallX = 250 - *posBallX;
00102             *angBall = 180 - *angBall;
00103         }
00104         else{ return 2; }
00105     }
00106         
00107         
00108     if(*posBallY <= 2){
00109         *posBallY = -*posBallY+4;
00110         *angBall = -*angBall;
00111     }
00112     else if(*posBallY >= 31){
00113         *posBallY = 62 - *posBallY;
00114         *angBall = -*angBall;
00115     }
00116     pc.printf("\033[%d;%dH",(int)*posBallY, (int)*posBallX);     //Place le curseur à 0:0
00117     pc.printf("o");     //Place le curseur à 0:0  
00118     return 3;
00119 }
00120 
00121 int main() {
00122     int pos1prec[30];
00123     int pos2prec[30];
00124     int pos1[30];
00125     int pos2[30];
00126     double posBallX;
00127     double posBallY;
00128     double angBall;
00129     int distance1;
00130     int distance2;
00131     
00132     int state;
00133     int p1_score;
00134     int p2_score;
00135 
00136     pc.baud(115200);
00137     pong_init_ttempro();
00138     posBallX = 5.0;
00139     posBallY = 19.0;
00140     angBall = 25.0;
00141     state = 0;
00142     p1_score = 0;
00143     p2_score = 0;
00144     wait(1);
00145     led=1;
00146     wait(1);
00147     //Initialisation de l'interruption : en appuyant sur le bouton bleu de la carte, le programme change d'état
00148     
00149     
00150     //Boucle d'exécution du programme
00151     while(1) { 
00152         switch(state){
00153         case 0 :    if(bp.read() == 1){ 
00154                     state = 3; 
00155                     pong_init_ttempro();
00156                     led = 1;
00157                     }
00158                     else led = 0;
00159                     break;
00160                     
00161         case 3 :    for(int i=0; i<=29; i++){
00162                         pos1prec[i]= pos1[i];
00163                         pos2prec[i]= pos2[i];
00164                         pos1[i]= 0;
00165                         pos2[i]= 0;
00166                     }
00167                     distance1 = sensor1.distance(1);
00168                     distance2 = sensor2.distance(1);
00169                     set_pos_vector(pos1,distance1);
00170                     set_pos_vector(pos2,distance2);     
00171                     print_cursor_ttempro(pos1,pos1prec,pos2,pos2prec);
00172                     state = set_print_ball(pos1,pos2,&posBallX,&posBallY,&angBall);
00173                     break;
00174                     
00175         case 1 :    p2_score++;
00176                     if( p2_score >= 3){ 
00177                         pc.printf("\033[2J");       //Efface la console
00178                         pc.printf("\033[16;60H"); 
00179                         pc.printf("P2  WIN ");
00180                         p1_score = 0;
00181                         p2_score = 0;
00182                         posBallX = 5.0;
00183                         posBallY = 19.0;
00184                         angBall = 25.0;
00185                     }
00186                     else{
00187                         pc.printf("\033[2J");       //Efface la console
00188                         pc.printf("\033[10;60H"); 
00189                         pc.printf("P1 : %d  // P2 : %d",p1_score,p2_score);
00190                         posBallX = 5.0;
00191                         posBallY = 19.0;
00192                         angBall = 25.0;
00193                         
00194                     }
00195                     state = 0;
00196                     break;
00197                     
00198         case 2 :    p1_score++;
00199                     if( p1_score >= 3){ 
00200                         pc.printf("\033[2J");       //Efface la console
00201                         pc.printf("\033[16;60H"); 
00202                         pc.printf("P1  WIN ");
00203                         p1_score = 0;
00204                         p2_score = 0; 
00205                         posBallX = 124.0;
00206                         posBallY = 19.0;
00207                         angBall = 145.0; 
00208                     }
00209                     else{
00210                         pc.printf("\033[2J");       //Efface la console
00211                         pc.printf("\033[10;60H"); 
00212                         pc.printf("P1 : %d  // P2 : %d",p1_score,p2_score);
00213                         posBallX = 124.0;
00214                         posBallY = 19.0;
00215                         angBall = 145.0;
00216                     }
00217                     state = 0;
00218                     break;
00219         }
00220         wait(0.1);   
00221     }
00222 }
00223 
00224