Pong Game Tea Term

Dependencies:   HCSR04 mbed

Fork of contest_IOT by Alexandre HOCHART

main.cpp

Committer:
Alex_Hochart
Date:
2015-10-23
Revision:
4:ed21ec4a79ad
Parent:
3:6bcdaa2636ec

File content as of revision 4:ed21ec4a79ad:

#include "mbed.h"
#include "HCSR04.h"
#include <math.h>

#define ECHO_1  PA_8
#define ECHO_2  PB_4
#define TRIG_1  PB_10
#define TRIG_2  PB_5
#define PUSH    USER_BUTTON //PC_13
#define LED_1   LED1

//------------------------------------
// Hyperterminal configuration
// 115200 bauds, 8-bit data, no parity
//------------------------------------


Serial pc(USBTX, USBRX);    //UART
DigitalOut led(LED_1);      //Led d'état
InterruptIn button(PUSH);   //Bouton d'interruption

HCSR04 sensor1(TRIG_1, ECHO_1);
HCSR04 sensor2(TRIG_2, ECHO_2); 

void pong_init_ttempro(){

    pc.printf("\033[2J");       //Efface la console
    pc.printf("\033[?25l");     //Cache le curseur
    
    for(int i=0; i <= 128 ; i++){
        pc.printf("\033[0;%dH",i);     //Place le curseur à 0:0
        pc.printf("X");     //Place le curseur à 0:0
        pc.printf("\033[32;%dH",i);     //Place le curseur à 0:0
        pc.printf("X");     //Place le curseur à 0:0
    }
    
    for(int i=0; i <= 32 ; i++){
        pc.printf("\033[%d;0H",i);     //Place le curseur à 0:0
        pc.printf("X");     //Place le curseur à 0:0
        pc.printf("\033[%d;128H",i);     //Place le curseur à 0:0
        pc.printf("X");     //Place le curseur à 0:0
    }
    
}

void print_cursor_ttempro(int *pos1, int *pos1prec, int *pos2, int *pos2prec){
    for(int i=0;i<=29;i++){
        if( pos1[i] != pos1prec[i] ){
            if(pos1[i] == 1){
                pc.printf("\033[%d;3H",i+2);     //Place le curseur à 0:0
                pc.printf("X");     //Place le curseur à 0:0  
            }
            else{
                pc.printf("\033[%d;3H",i+2);     //Place le curseur à 0:0
                pc.printf(" ");     //Place le curseur à 0:0  
            }
        }
                
        if( pos2[i] != pos2prec[i] ){
            if(pos2[i] == 1){
                pc.printf("\033[%d;126H",i+2);     //Place le curseur à 0:0
                pc.printf("X");     //Place le curseur à 0:0  
            }
            else{
                pc.printf("\033[%d;126H",i+2);     //Place le curseur à 0:0
                pc.printf(" ");     //Place le curseur à 0:0  
            }
        }   
    } 
}

void set_pos_vector(int *pos, int distance){
            
    if(distance <= 10){
        for(int i=0;i<=5;i++){ pos[i] = 1; }
    }
    else if(distance >= 34){
        for(int i=24;i<=29;i++){ pos[i] = 1; }
    }
    else{
        for(int i=(distance-10);i<=(distance-4);i++){ pos[i] = 1; }
    }   
}


int main() {
    int pos1prec[30];
    int pos2prec[30];
    int pos1[30];
    int pos2[30];
    double posBallX;
    double posBallY;
    double angBall;
    int distance1;
    int distance2;

    pc.baud(115200);
    pong_init_ttempro();
    posBallX = 5;
    posBallY = 19;
    angBall = 25;
    wait(1);
    //Initialisation de l'interruption : en appuyant sur le bouton bleu de la carte, le programme change d'état
    
    
    //Boucle d'exécution du programme
    while(1) { 
        led=1;
        for(int i=0; i<=29; i++){
            pos1prec[i]= pos1[i];
            pos2prec[i]= pos2[i];
            pos1[i]= 0;
            pos2[i]= 0;
        }
        distance1 = sensor1.distance(1);
        distance2 = sensor2.distance(1);
        set_pos_vector(pos1,distance1);
        set_pos_vector(pos2,distance2);     
        print_cursor_ttempro(pos1,pos1prec,pos2,pos2prec);
        pc.printf("\033[%d;%dH",(int)posBallY, (int)posBallX);     //Place le curseur à 0:0
        pc.printf(" ");     //Place le curseur à 0:0  
        posBallX = posBallX + 2.0*cos((double)angBall*3.1415/180.0);
        posBallY = posBallY - 2.0*sin((double)angBall*3.1415/180.0);
        if(posBallX <= 4){
            if(pos1[(int)posBallY] == 1){
                posBallX = 8 - posBallX;
                angBall = 180 - angBall;
            }
            else {
                pc.printf("\033[2J");       //Efface la console
                pc.printf("\033[16;60H"); 
                pc.printf("P1 Loose");       
                wait(5);
            }
        }
        else if(posBallX >= 125){
            if(pos2[(int)posBallY] == 1){
                posBallX = 250 - posBallX;
                angBall = 180 - angBall;
            }
            else {
                pc.printf("\033[2J");       //Efface la console
                pc.printf("\033[16;60H"); 
                pc.printf("P2 Loose");       
                wait(5);
            }
        }
        
        
        if(posBallY <= 2){
            posBallY = -posBallY+4;
            angBall = -angBall;
        }
        else if(posBallY >= 31){
            posBallY = 62 - posBallY;
            angBall = -angBall;
        }
        pc.printf("\033[%d;%dH",(int)posBallY, (int)posBallX);     //Place le curseur à 0:0
        pc.printf("o");     //Place le curseur à 0:0  
        
        wait(0.1);
    }
}