Contest IOT GSE5 / Mbed 2 deprecated contest_IOT2

Dependencies:   HCSR04 mbed

Fork of contest_IOT by Alexandre HOCHART

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_8
00006 #define ECHO_2  PB_4
00007 #define TRIG_1  PB_10
00008 #define TRIG_2  PB_5
00009 #define PUSH    USER_BUTTON //PC_13
00010 #define LED_1   LED1
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 InterruptIn button(PUSH);   //Bouton d'interruption
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 
00086 int main() {
00087     int pos1prec[30];
00088     int pos2prec[30];
00089     int pos1[30];
00090     int pos2[30];
00091     double posBallX;
00092     double posBallY;
00093     double angBall;
00094     int distance1;
00095     int distance2;
00096 
00097     pc.baud(115200);
00098     pong_init_ttempro();
00099     posBallX = 5;
00100     posBallY = 19;
00101     angBall = 25;
00102     wait(1);
00103     //Initialisation de l'interruption : en appuyant sur le bouton bleu de la carte, le programme change d'état
00104     
00105     
00106     //Boucle d'exécution du programme
00107     while(1) { 
00108         led=1;
00109         for(int i=0; i<=29; i++){
00110             pos1prec[i]= pos1[i];
00111             pos2prec[i]= pos2[i];
00112             pos1[i]= 0;
00113             pos2[i]= 0;
00114         }
00115         distance1 = sensor1.distance(1);
00116         distance2 = sensor2.distance(1);
00117         set_pos_vector(pos1,distance1);
00118         set_pos_vector(pos2,distance2);     
00119         print_cursor_ttempro(pos1,pos1prec,pos2,pos2prec);
00120         pc.printf("\033[%d;%dH",(int)posBallY, (int)posBallX);     //Place le curseur à 0:0
00121         pc.printf(" ");     //Place le curseur à 0:0  
00122         posBallX = posBallX + 2.0*cos((double)angBall*3.1415/180.0);
00123         posBallY = posBallY - 2.0*sin((double)angBall*3.1415/180.0);
00124         if(posBallX <= 4){
00125             if(pos1[(int)posBallY] == 1){
00126                 posBallX = 8 - posBallX;
00127                 angBall = 180 - angBall;
00128             }
00129             else {
00130                 pc.printf("\033[2J");       //Efface la console
00131                 pc.printf("\033[16;60H"); 
00132                 pc.printf("P1 Loose");       
00133                 wait(5);
00134             }
00135         }
00136         else if(posBallX >= 125){
00137             if(pos2[(int)posBallY] == 1){
00138                 posBallX = 250 - posBallX;
00139                 angBall = 180 - angBall;
00140             }
00141             else {
00142                 pc.printf("\033[2J");       //Efface la console
00143                 pc.printf("\033[16;60H"); 
00144                 pc.printf("P2 Loose");       
00145                 wait(5);
00146             }
00147         }
00148         
00149         
00150         if(posBallY <= 2){
00151             posBallY = -posBallY+4;
00152             angBall = -angBall;
00153         }
00154         else if(posBallY >= 31){
00155             posBallY = 62 - posBallY;
00156             angBall = -angBall;
00157         }
00158         pc.printf("\033[%d;%dH",(int)posBallY, (int)posBallX);     //Place le curseur à 0:0
00159         pc.printf("o");     //Place le curseur à 0:0  
00160         
00161         wait(0.1);
00162     }
00163 }
00164 
00165