Version mas reciente 2.0. Contiene manejo de joystick, interrupciones y mejoras de algunos bugs

Dependencies:   mbed

Revision:
4:6f2a8091f2a0
Parent:
3:c9c3a56609f9
--- a/Tetrix.cpp	Thu Oct 18 23:55:58 2018 +0000
+++ b/Tetrix.cpp	Sun Nov 11 08:40:45 2018 +0000
@@ -1,16 +1,24 @@
 #include "mbed.h"
 #include "figs.h" 
 
+Ticker bajar;
 SPI deviceM(PB_15, PB_14, PB_13);
 DigitalOut ssel (PB_12);
-Serial command(USBTX,USBRX); 
+Serial command(USBTX,USBRX);
+AnalogIn joy(A0);
+AnalogIn joy1(A1); 
+float vx=0;
+float vy=0;
+DigitalIn cambio(PB_8);
+int cc=0;
+uint8_t movimiento=0;
 
 #define  VEL 100 
 
-uint8_t mat_act [11]={0,0,0,0,0,0,0,0,0,0,0};   
-uint8_t mat_tmp [8]={0,0,0,0,0,0,0,0};    
-uint8_t mat_tmp1[8]={0,0,0,0,0,0,0,0};
-uint8_t fila=1,cont=0,ncolumna=1,grados=1,ficha=0;
+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;
  
 void sendSPI(uint8_t d1, uint8_t d2)
 {
@@ -24,7 +32,7 @@
 
 
 
-void test()
+void init_display()
 {
     sendSPI(0x0c,1);
     sendSPI(0x0b,7);
@@ -34,18 +42,18 @@
     for (j=0;j<4;j++){
         sendSPI(0x0F,1);
         wait (0.2);
-        sendSPI(0x0F,0);
+        sendSPI(0x0f,0);
         wait (0.2);
-    }    
+    }   
 }
 
-void cop_mat(uint8_t a,uint8_t b,uint8_t c,uint8_t* fig,uint8_t columna)
+void copy_matrix(uint8_t a,uint8_t b,uint8_t c,uint8_t* fig,uint8_t columna)
 {       
-        if(((mat_act[cont-2]& *(fig+c)>>columna-1)==0)&&((mat_act[cont-1]& *(fig+b)>>columna-1)==0)&&((mat_act[cont]& *(fig+a)>>columna-1)==0)){
-                    mat_tmp[0]= *(fig+5)>>columna-1;             
-                    mat_tmp[1]= *(fig+a)>>columna-1;            
-                    mat_tmp[2]= *(fig+b)>>columna-1;
-                    mat_tmp[3]= *(fig+c)>>columna-1;
+        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;
         }   
 }
 
@@ -55,27 +63,29 @@
     for(i=0;i<=8;i++)
     {
         sendSPI(i,0);
-        mat_act[i]=0;   
+        matrix_act[i]=0;   
     }
 };
 
-void buscar_fil(){
+void buscar_fila(){
     for (uint8_t i=0;i<9;i++){                     
-        if((mat_act[i]& mat_tmp[3])==0){
+        if((matrix_act[i]& matrix_temp[3])==0){
         fila=i;
         }
-        if((mat_act[i]& mat_tmp[3])!=0){
-        fila=i-1;                                  
+        if(((matrix_act[i]& matrix_temp[3])!=0)&& (i!=9)){
+        fila=i-1;  
+        command.printf("Fila pos 1: %d \n", fila);                                
         i=9;
         }
-        if((mat_act[i]& mat_tmp[2])!=0){           
+        if(((matrix_act[i]& matrix_temp[2])!=0)&& (i!=9)){           
         fila=i;                                   
         i=9;
+        command.printf("Fila pos 2: %d \n", fila);
         }
-        if((mat_act[i]& mat_tmp[1])!=0){
+        if(((matrix_act[i]& matrix_temp[1])!=0)&& (i!=9)){
         fila=i+1;                                 
         i=9;
-        //command.printf("\n4- comparacion mat_act[i]& mat_tmp[0]:\n %d",mat_act[i]& mat_tmp[0]);
+        command.printf("Fila pos 3: %d \n", fila);
         }
     }
     if(fila>8)
@@ -87,167 +97,184 @@
     }
 };
 
-void guardar_mat(){
-        mat_act[fila-3]=mat_tmp1[0];
-        mat_act[fila-2]=mat_tmp1[1];
-        mat_act[fila-1]=mat_tmp1[2];
-        mat_act[fila  ]=mat_tmp1[3];
+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 correr_fig(){
-    
-    uint8_t correr=command.getc();
+void reada()
+{    vx=0;
+     vy=0;
+     vx=joy.read();
+     vy=joy1.read();
+     cc=cambio.read();
+    }
     
-    if(correr==30)  
-    correr=1;
+void bajaf()
+{
+    movimiento=4;}
+void movimiento_fig(){
+    //movimiento=0;
+    /*reada();
+    command.printf("vy = %f \n", vy);
+    command.printf("vx = %f \n", vx);
+    command.printf("cc = %f \n", cambio.read());
+   if(vy<0.2)  
+    movimiento=1;
     
-    if(correr==29)  
-    correr=2;
+   /* if(vy>0.8)  
+    movimiento=4;
     
-    if(correr==28)
-    correr=3;
+    if(vx<0.2)
+    movimiento=3;
     
-    if(correr==31) 
-    correr=0;
+    if(vx>0.80) 
+    movimiento=2;
+    command.printf("movimiento = %d \n", movimiento);
+    */
+    char movimiento1=command.getc();
+     if(movimiento1==30)  
+    movimiento=1;
     
-    switch (correr){
+    if(movimiento1==29)  
+    movimiento=2;
+    
+    if(movimiento1==28)
+    movimiento=3;
+    /*
+    if(movimiento==31) 
+    movimiento=0;*/
+    switch (movimiento){
                 
-                case 0:
+                case 4:
                 cont++;
+                //printf("%f", joy.read());
                 if(cont>8)cont=8;
-                break;                                                    
+                break;                                            
                 
                 case 1:
-                if( (mat_tmp[1]==2) || (mat_tmp[1]==1)|| (mat_tmp[1]==3)) 
-                ncolumna--;
-                grados++;
-                if(grados>4)
-                grados=1;
-                break;                                                    
+                if( (matrix_temp[1]==2) || (matrix_temp[1]==1)|| (matrix_temp[1]==3)) 
+                columna--;
+                rotacion++;
+                if(rotacion>4)
+                rotacion=1;
+                //printf("%f", joy1.read());
+                break; 
                 
-                case 2:
-                if((mat_tmp[2]==7 || mat_tmp[3]==7)||(mat_tmp[2]==3 && mat_tmp[3]==6)) {
+                 case 2:
+                if((matrix_temp[2]==7 || matrix_temp[3]==7)||(matrix_temp[2]==3 && matrix_temp[3]==6)) {
                     command.printf("a");
-                    ncolumna=5;
-                    }
-                if((mat_tmp[1]==2 && mat_tmp[2]==2 && mat_tmp[3]==2)){
-                    command.printf("b");
-                    ncolumna=7;
-                    }
-                if (ncolumna<7){
-                    command.printf("c");
-                    ncolumna++;
+                    columna=6;
                     }
-                break;
-                    /*if( ((mat_tmp[2]==3) && (mat_tmp[3]==6)) || (mat_tmp[2]==7) || (mat_tmp[3]==7)) {
-                            command.printf("c");
-                            ncolumna=6;
-                            }
-                            
-                    if( (mat_tmp[1]==2) &&(mat_tmp[2]==2) && (mat_tmp[3]==2) ) {
-                        command.printf("d");
-                        ncolumna=7;
+                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++;
                     }
-                    */
-                
-                /*if(ncolumna>7)
-                {command.printf("d");
-                ncolumna=7;}*/
-                                                                    //correr a la Derecha;
-                
+                    //printf("%f", joy1.read());
+                break;        
+            
                 case 3:
-                ncolumna--;
-                if(ncolumna<1)
-                ncolumna=1;
-                break;                                                   
-                }
-    
+                columna--;
+                if(columna<1)
+                columna=1;
+                //printf("%f", joy.read());
+                break;                                       
+                                                        
+    }
     }
 
 
-void imp_mat(uint8_t *temp){                                 
-            mat_tmp1[0]=(mat_tmp[0]+ mat_act[cont-3]);
-            mat_tmp1[1]=(mat_tmp[1]+ mat_act[cont-2]);
-            mat_tmp1[2]=(mat_tmp[2]+ mat_act[cont-1]);
-            mat_tmp1[3]=(mat_tmp[3]+ mat_act[cont]);                              
-            sendSPI(cont-3,mat_tmp1[0]);
-            sendSPI(cont-2,mat_tmp1[1]);
-            sendSPI(cont-1,mat_tmp1[2]);
-            sendSPI(cont  ,mat_tmp1[3]);                     //pasa de i+2 a i+1
+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
             wait_ms(VEL);
 }
 
-void dibujar(char type_fig,char grados,char columna)
+void crear_fig(char type_fig,char rotacion,char columna)
 {    
     switch (type_fig){                  
         case 1: if(columna>7)
                 columna=7;
-                cop_mat(5,1,1,PLANT,columna); break;  
+                copy_matrix(5,1,1,PLANT,columna); break;  
         
-        case 2: if(grados==1 || grados==3)              
-                cop_mat(0,0,0,PLANT,columna);
-                if(grados==2 || grados==4)
-                cop_mat(5,5,2,PLANT,columna);         
+        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(grados==1)
-                cop_mat(0,0,1,PLANT,columna);        
-                if(grados==2)
-                cop_mat(5,2,0,PLANT,columna);
-                if(grados==3)
-                cop_mat(1,3,3,PLANT,columna);
-                if(grados==4)
-                cop_mat(5,6,2,PLANT,columna);
+        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(grados==1)
-                cop_mat(5,3,2,PLANT,columna);        
-                if(grados==2)
-                cop_mat(0,1,0,PLANT,columna);
-                if(grados==3)
-                cop_mat(5,2,3,PLANT,columna);
-                if(grados==4)
-                cop_mat(3,1,3,PLANT,columna);
+        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(grados==1 || grados==3)
-                cop_mat(5,4,1,PLANT,columna);   
-                if(grados==2 || grados==4)
-                cop_mat(0,1,3,PLANT,columna);
+        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 fichas(){
-    ficha= rand() % 5+1; 
-    grados= rand() % 4+1;
-    ncolumna= 4; 
+void figuras(){
+    figura= rand() % 5+1; 
+    rotacion= rand() % 4+1;
+    columna= 4; 
     }
     
-void buscar_linea(){
-    for(uint8_t i=0;i<9;i++){
-        if(mat_act[i]==255){
+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,mat_act[a-1]);
+                sendSPI(a,matrix_act[a-1]);
+                matrix_act[a]=matrix_act[a-1];
             }
         }
     }
 }
 
 int main() {
-    test();
+    bajar.attach(&bajaf, 0.1);
+    init_display();
     borrar();
     while(1){
-            fichas();
-            buscar_fil();
-            cont=0;
+            figuras();
+            buscar_fila();
+            cont=0; 
+            elimina_linea(); 
             while (cont<fila){
-                        correr_fig();    
-                        dibujar(ficha,grados,ncolumna);
-                        buscar_fil();
-                        imp_mat(mat_tmp);
-                        }
-            buscar_linea();            
-            guardar_mat();
+                        movimiento_fig();    
+                        crear_fig(figura,rotacion,columna);
+                        buscar_fila();
+                        print_matrix(matrix_temp);
+                        }          
+            guardar();
         }
     }
\ No newline at end of file