Codigo con interfaz gráfica. Falta juntar los dos programas. Ya accede a ambos juegos

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
acastiblancoc
Date:
Sun Nov 18 01:43:14 2018 +0000
Commit message:
Codigo con interfaz gr?fica. Falta juntar los dos programas. Ya accede a ambos juegos

Changed in this revision

MPU6050.lib Show annotated file Show diff for this revision Revisions of this file
figs.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r aa4d235c4151 MPU6050.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MPU6050.lib	Sun Nov 18 01:43:14 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/acastiblancoc/code/MPU6050/#e4beb72a8367
diff -r 000000000000 -r aa4d235c4151 figs.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/figs.h	Sun Nov 18 01:43:14 2018 +0000
@@ -0,0 +1,10 @@
+#ifndef FIGS_H
+#define FIGS_H
+
+#include "mbed.h"
+
+#define PLANT_TYPE 1
+
+ uint8_t PLANT[7]={0b10000000,0b11000000,0b11100000,0b01000000,0b01100000,0,0b00100000};//FIG_C[0]=1; FIG_C[1]=11; FIG_C[2]=111; FIG_C[3]=01; FIG_C[4]=011
+
+#endif 
\ No newline at end of file
diff -r 000000000000 -r aa4d235c4151 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Nov 18 01:43:14 2018 +0000
@@ -0,0 +1,560 @@
+#include "mbed.h"
+#include "MPU6050.h"
+#include "figs.h" 
+Ticker bajar;
+Serial command(USBTX,USBRX);
+AnalogIn joy(A0);
+AnalogIn joy1(A1); 
+float vx=0;
+float vy=0;
+DigitalIn cambios(PB_8);
+int cc=0, punto=1;
+uint8_t movimiento=0;
+float VEL= 500; 
+uint8_t matrix_act [11]={0,0,0,0,0,0,0,0,0,0,0};   
+uint8_t matrix_temp [8]={0,0,0,0,0,0,0,0};    
+uint8_t matrix_temp1[8]={0,0,0,0,0,0,0,0};
+uint8_t fila=1,cont=0,columna=1,rotacion=1,figura=0;
+SPI deviceM(PB_15, PB_14, PB_13);
+DigitalOut ssel (PB_12);
+Serial a(USBTX,USBRX);
+Ticker cambio;
+MPU6050 Wire(PB_9,PB_8);
+InterruptIn iz(PA_14);
+InterruptIn de(PA_13);
+#define  uint8_t unsigned char
+float q[3];
+int pos;
+float vel=200;
+int b;
+uint8_t cam[3]={0b01100000,0b00011000,0b00000110};
+uint8_t Matr[9]={0,0,0,0,0,0,0,0,0};
+uint8_t entorno={0b10000001};
+uint8_t carro={0b00011000};
+uint8_t obs=0b01100000;
+void derecha();
+void izquierda(); 
+void colision();
+void juego();
+void accelerometro();
+void cambiof();
+int con;
+int az;
+
+void sendSPI(uint8_t d1, uint8_t d2)
+{
+    deviceM.unlock();
+    ssel=0;
+    deviceM.write(d1); 
+    deviceM.write(d2);  
+    ssel=1;
+    deviceM.lock(); 
+}
+   
+void borrar()
+{
+ for(int i;i<=8;i++)   {
+     sendSPI(i,0);
+     }
+}
+   
+void inicializar(){
+                
+                    a.baud(9600);
+                    sendSPI(0x0c,1);
+                    sendSPI(0x09,0);
+                    sendSPI(0x0A,0x01);
+                    sendSPI(0x0F,1);
+                    wait (0.5);
+                    sendSPI(0x0F,0);
+                    wait(0.5);
+                    sendSPI(0xB,0x7);    
+                    borrar();
+                    vel=200;
+                    carro=0b00011000;
+    }
+    
+void imprimir()
+{
+   
+    
+    int c_d; //carro, obstaculo y entorno
+    int c_e; //carro y entorno
+    int din;
+    for(int i=1;i<=7;i++){
+             sendSPI(i,entorno);
+              }
+   for(int j=1;j<=10;j++){
+             din=(obs>>b) | entorno  ;
+             c_d= carro | din;
+             c_e=carro | entorno;
+             sendSPI(8,c_e);
+             if(j<=7){   
+             sendSPI(j,din);
+             }
+             
+             if(j>1 && j<=8)
+             sendSPI(j-1,din);
+                 
+             if(j>2 && j<=9){
+             sendSPI(j-2,entorno);
+             }
+             if(j>=8&&j<=9){
+                 sendSPI(8,c_d);
+                 }
+             if(j>10){
+                 sendSPI(8,c_e);
+                 }
+            
+             if( (obs>>b)==carro && j==8 ){
+               colision();
+                 }
+             
+             wait_ms(vel);
+                con++;
+                if(con==10){
+    vel=vel-10;}
+    }
+    
+}
+
+void carro_juego ()
+{
+    cambio.attach(&cambiof,0.2);
+     while(1){
+     accelerometro();
+     //juego();        
+        }
+        }
+        
+void juego(){
+                    inicializar();   
+                    de.fall(&derecha);  
+                    iz.fall(&izquierda);  
+                    a.printf("inicio\n");
+                    while(1){
+                    con=0; 
+                    b=2*(rand()%3);
+                    a.printf("numero %d\n",b);
+                     imprimir();  
+                    }
+             }
+                    
+void derecha()
+{
+    if(carro==0b00011000 || carro==0b01100000)
+    carro=carro>>2;
+    a.printf("entra der \n");
+    return;
+}
+void izquierda()
+{
+    if( carro==0b00000110 ||  carro==0b00011000  )
+    carro=carro<<2;
+    a.printf("entra izq \n");
+    return;
+}
+
+void colision ()
+{
+                 borrar();  
+                 sendSPI(0x0F,0);
+                 sendSPI(3,0b01111110);
+                 sendSPI(4,0b01111110);
+                 sendSPI(5,0b01111110);
+                 sendSPI(6,0b01111110);
+                 wait(2);
+                 juego();
+}
+
+void accelerometro(){
+         
+         Wire.getAccelero(q);
+         a.printf("accelero: \t x=  %f,\t y=  %f, \t z= %f \n",q[0],q[1],q[2]);
+         int accelero[3]; 
+         Wire.getAcceleroRaw(accelero);
+         int valor=accelero[1];
+         if(valor<=(2000) && valor>=(1000)){
+           az=1;}
+         if(valor<(1000) && valor>=(-1000)){
+           az=2;}
+         if(valor<(-1000) && valor>=(-2000)){
+           az=3;}
+         a.printf("acel : \t  %d \n",az);        
+         wait(0.8);
+    }
+
+void cambiof(){
+    
+    switch (az){
+        case 1: carro=cam[1];
+        break;
+        case 2: carro=cam[2];
+        break;
+        case 3: carro=cam[3];
+        break;
+        }
+    
+    
+    }
+    
+    /////////////////////////////////////////////////////////////////////////////////////
+    
+    void init_display()
+{
+    sendSPI(0x0c,1);
+    sendSPI(0x0b,7);
+    sendSPI(0x09,0);
+    sendSPI(0x0A,0x0E);
+    int j;
+    for (j=0;j<4;j++){
+        sendSPI(0x0F,1);
+        wait (0.2);
+        sendSPI(0x0f,0);
+        wait (0.2);
+    }   
+}
+
+void copy_matrix(uint8_t a,uint8_t b,uint8_t c,uint8_t* fig,uint8_t columna)
+{       
+        if(((matrix_act[cont-2]& *(fig+c)>>columna-1)==0)&&((matrix_act[cont-1]& *(fig+b)>>columna-1)==0)&&((matrix_act[cont]& *(fig+a)>>columna-1)==0)){
+                    matrix_temp[0]= *(fig+5)>>columna-1;             
+                    matrix_temp[1]= *(fig+a)>>columna-1;            
+                    matrix_temp[2]= *(fig+b)>>columna-1;
+                    matrix_temp[3]= *(fig+c)>>columna-1;
+        }   
+}
+
+void borraraa()            
+{
+    int i;
+    for(i=0;i<=8;i++)
+    {
+        sendSPI(i,0);
+        matrix_act[i]=0;   
+    }
+};
+
+void buscar_fila(){
+    for (uint8_t i=0;i<9;i++){                     
+        if((matrix_act[i]& matrix_temp[3])==0){
+        fila=i;
+        }
+        if(((matrix_act[i]& matrix_temp[3])!=0)&& (i!=9)){
+        fila=i-1;  
+        command.printf("Fila pos 1: %d \n", fila);                                
+        i=9;
+        }
+        if(((matrix_act[i]& matrix_temp[2])!=0)&& (i!=9)){           
+        fila=i;                                   
+        i=9;
+        command.printf("Fila pos 2: %d \n", fila);
+        }
+        if(((matrix_act[i]& matrix_temp[1])!=0)&& (i!=9)){
+        fila=i+1;                                 
+        i=9;
+        command.printf("Fila pos 3: %d \n", fila);
+        }
+    }
+    if(fila>8)
+        fila=8;
+    if(fila<=1){
+        punto=1;
+        VEL=500;
+        wait_ms(VEL);
+        borrar();
+        fila=8;
+    }
+};
+
+void guardar(){
+        matrix_act[fila-3]=matrix_temp1[0];
+        matrix_act[fila-2]=matrix_temp1[1];
+        matrix_act[fila-1]=matrix_temp1[2];
+        matrix_act[fila  ]=matrix_temp1[3];
+        };
+    
+void reada()
+{    vx=0;
+     vy=0;
+     vx=joy.read();
+     vy=joy1.read();
+     cc=cambios.read();
+    }
+    
+void bajaf()
+{
+    movimiento=4;}
+void movimiento_fig(){
+    reada();
+    command.printf("vy = %f \n", vy);
+    command.printf("vx = %f \n", vx);
+    command.printf("cc = %f \n", cambios.read());
+   if(vy<0.2)  
+    movimiento=1;
+    if(vy>0.8)  
+    movimiento=4;
+    if(vx<0.2)
+    movimiento=3;
+    if(vx>0.80) 
+    movimiento=2;
+    command.printf("movimiento = %d \n", movimiento);
+    switch (movimiento){
+                
+                case 4:
+                cont++;
+                //printf("%f", joy.read());
+                if(cont>8)cont=8;
+                break;                                            
+                
+                case 1:
+                if( (matrix_temp[1]==2) || (matrix_temp[1]==1)|| (matrix_temp[1]==3)) 
+                columna--;
+                rotacion++;
+                if(rotacion>4)
+                rotacion=1;
+                break; 
+                
+                 case 2:
+                if((matrix_temp[2]==7 || matrix_temp[3]==7)||(matrix_temp[2]==3 && matrix_temp[3]==6)) {
+                    command.printf("a");
+                    columna=6;
+                    }
+                else if((matrix_temp[1]==2 && matrix_temp[2]==2 && matrix_temp[3]==2)){
+                    command.printf("b");
+                    columna=8;
+                    }
+                else if (columna<7){
+                    command.printf("c");
+                    columna++;
+                    }
+                    //printf("%f", joy1.read());
+                break;        
+            
+                case 3:
+                columna--;
+                if(columna<1)
+                columna=1;
+                //printf("%f", joy.read());
+                break;                                       
+                                                        
+    }
+    }
+
+
+void print_matrix(uint8_t *temp){
+            matrix_temp1[0]=(matrix_temp[0]+ matrix_act[cont-3]);
+            matrix_temp1[1]=(matrix_temp[1]+ matrix_act[cont-2]);
+            matrix_temp1[2]=(matrix_temp[2]+ matrix_act[cont-1]);
+            matrix_temp1[3]=(matrix_temp[3]+ matrix_act[cont]);                              
+            sendSPI(cont-3,matrix_temp1[0]);
+            sendSPI(cont-2,matrix_temp1[1]);
+            sendSPI(cont-1,matrix_temp1[2]);
+            sendSPI(cont  ,matrix_temp1[3]);                     //pasa de i+2 a i+1
+            if(punto%3==0)
+            {
+            VEL=VEL/3;
+             if(VEL<=50)
+             VEL=50;   
+                }
+            wait_ms(VEL);
+}
+
+void crear_fig(char type_fig,char rotacion,char columna)
+{    
+    switch (type_fig){                  
+        case 1: if(columna>7)
+                columna=7;
+                copy_matrix(5,1,1,PLANT,columna); break;  
+        
+        case 2: if(rotacion==1 || rotacion==3)              
+                copy_matrix(0,0,0,PLANT,columna);
+                if(rotacion==2 || rotacion==4)
+                copy_matrix(5,5,2,PLANT,columna);         
+                break;
+                  
+        case 3: if(rotacion==1)
+                copy_matrix(0,0,1,PLANT,columna);        
+                if(rotacion==2)
+                copy_matrix(5,2,0,PLANT,columna);
+                if(rotacion==3)
+                copy_matrix(1,3,3,PLANT,columna);
+                if(rotacion==4)
+                copy_matrix(5,6,2,PLANT,columna);
+                break;
+        
+        case 4: if(rotacion==1)
+                copy_matrix(5,3,2,PLANT,columna);        
+                if(rotacion==2)
+                copy_matrix(0,1,0,PLANT,columna);
+                if(rotacion==3)
+                copy_matrix(5,2,3,PLANT,columna);
+                if(rotacion==4)
+                copy_matrix(3,1,3,PLANT,columna);
+                break;
+        
+        case 5: if(rotacion==1 || rotacion==3)
+                copy_matrix(5,4,1,PLANT,columna);   
+                if(rotacion==2 || rotacion==4)
+                copy_matrix(0,1,3,PLANT,columna);
+                break; 
+    }  
+}
+
+void figuras(){
+    figura= rand() % 5+1; 
+    rotacion= rand() % 4+1;
+    columna= 4; 
+    }
+    
+void elimina_linea(){
+   for(uint8_t i=0;i<9;i++){
+        if(matrix_act[i]==255){
+            for(uint8_t a=i;a>=1;a--){
+                sendSPI(a,matrix_act[a-1]);
+                matrix_act[a]=matrix_act[a-1];
+            }
+            punto++;
+            printf("%f", punto);
+        }
+    }
+}
+
+void tetris() {
+    bajar.attach(&bajaf, 0.1);
+    init_display();
+    borrar();
+    while(1){
+            figuras();
+            buscar_fila();
+            cont=0; 
+            elimina_linea();
+            while (cont<fila){
+                        movimiento_fig();    
+                        crear_fig(figura,rotacion,columna);
+                        buscar_fila();
+                        print_matrix(matrix_temp);
+                        }          
+            guardar();
+        }
+    }
+    //////////////////////////////////////////////////////////////////////////////////////////////
+    
+    void hacer_carita()
+    {
+    int k;
+    uint8_t carita[8]={0b00000000, 0, 0b00100100,0b00100100,0,0, 0b01000010,0b00111100};
+                for(k=1;k<=8;k++)
+        {
+        sendSPI(k ,carita[k]);}
+        }
+    void inicializar_menu(){
+    sendSPI(0x0c,1);
+    sendSPI(0x0b,7);
+    sendSPI(0x09,0);
+    sendSPI(0x0A,0x0E);
+    int j=0;
+    for (j=0;j<4;j++){   
+        hacer_carita();
+        wait (0.2);
+        borraraa();
+        wait (0.2);
+    }  
+    }
+    
+void eleccion_tetris()
+{
+    int k;
+    uint8_t elec[8]={0b00000000, 0,0, 0b00000000,0b11010011,0b11011010,0b00001010, 0};
+                for(k=1;k<=8;k++)
+        {
+        sendSPI(k ,elec[k]);}
+       /* reada();
+        if(vx>0.6){
+        borraraa();
+        carro_juego();}
+        }*/
+        }
+     
+void eleccion_carrito()
+{
+        int k;
+    uint8_t elec1[8]={0b00000000, 0,0,0b00111000,0b01111100,0b00101000, 0, 0b11111111};
+                for(k=1;k<=8;k++)
+        {
+        sendSPI(k ,elec1[k]);}
+        /*reada();
+        if(vx>0.6){
+        borraraa();
+        tetris();}*/
+        }
+    
+    int main() 
+{   int game=0;
+    int pant=1;
+    borraraa();
+    inicializar_menu();
+    //eleccion_tetris();
+    while(1)
+    {
+    game=0;
+    reada();
+    if(vy<0.48)  
+    game=1;
+    if(vy>0.58)  
+    game=2;
+    
+    switch(game)
+    {
+        case 1:
+        pant++;
+        if(pant%2!=0)
+        {borraraa(); 
+        eleccion_tetris();
+        if(vx>0.6){
+        borraraa();
+        carro_juego();}
+        }        
+        if(pant%2==0)
+        {borraraa();
+        eleccion_carrito();
+        if(vx>0.6){
+        borraraa();
+        tetris();}
+        }
+        break;
+        
+        case 2:
+        pant++;
+        if(pant%2!=0)
+        {borraraa();
+        eleccion_tetris();
+        if(vx>0.6){
+        borraraa();
+        carro_juego();}
+        }
+        if(pant%2==0)
+        {   borraraa();
+            eleccion_carrito();
+        if(vx>0.6){
+        borraraa();
+        tetris();}
+        }
+        break;
+        }
+        //printf(" pantalla %d \n", pant);
+        wait(0.5);
+        //printf("entra a %d \n", game);
+        //wait(1);
+        //printf(" vx %f \n", vx);
+        
+    }
+    }
+        
+    
+    /*
+    wait(1);
+    borraraa();
+    eleccion_carrito();
+    wait(1);*/ 
+    
diff -r 000000000000 -r aa4d235c4151 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sun Nov 18 01:43:14 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/e95d10626187
\ No newline at end of file