Nicolas Gonzalez gil / Mbed 2 deprecated Tetris

Dependencies:   mbed MPU6050

Revision:
0:cf64daf01e11
Child:
2:5faf2fd6c613
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Nov 23 13:21:38 2018 +0000
@@ -0,0 +1,271 @@
+#include "mbed.h"
+#include "MPU6050.h"
+SPI deviceM(PB_15, PB_14, PB_13);
+DigitalOut ssel (PB_12);
+Serial a(USBTX,USBRX);
+
+MPU6050 mpu1(PB_9,PB_8);
+
+
+#define  uint8_t unsigned char
+int Tipofig=0;
+int vcol;
+float Vel=0.8;
+int grado=0;
+float value_accelerox;
+float value_acceleroy;
+int in,out;
+int lim;
+int lim2;
+int m;
+int hhh;
+int col2;
+int rot;
+int pos_x;
+int pos_y;
+int juego=1;
+uint8_t Matr[9]={0,0,0,0,0,0,0,0,0};
+uint8_t F_t[3]={0b11100000,0b01000000,0};
+uint8_t F_s[3]={0b11000000,0b01100000,0};
+uint8_t F_c[3]={0b11000000,0b11000000,0};
+uint8_t F_l[3]={0b11000000,0b10000000,0b10000000};
+uint8_t F_I[3]={0b10000000,0b10000000,0b10000000};
+uint8_t Fig[3]={0,0,0};
+int poscol;
+
+
+
+ 
+void seleccion(uint8_t sc);
+void giro(uint8_t gi);
+void save(uint8_t *vC,uint8_t  col);
+void imprimir();
+void Izq();
+void Der();
+void accelerometro();
+void tetris();
+
+
+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);   
+                    mpu1.setAcceleroRange('MPU6050_ACCELERO_RANGE_4G'); 
+                    borrar();
+    }
+    
+void seleccion(uint8_t sc){
+        switch(sc) {           
+                    case 1: Fig[0]=F_t[0]; Fig[1]=F_t[1];Fig[2]=F_t[2]; break;
+                    case 2: Fig[0]=F_s[0]; Fig[1]=F_s[1];Fig[2]=F_s[2]; break;
+                    case 3: Fig[0]=F_c[0]; Fig[1]=F_c[1];Fig[2]=F_c[2]; break;
+                    case 4: Fig[0]=F_l[0]; Fig[1]=F_l[1];Fig[2]=F_l[2]; break;
+                    case 5: Fig[0]=F_I[0]; Fig[1]=F_I[1];Fig[2]=F_I[2]; break;
+                    default:break;}
+    }      
+
+void giro(uint8_t gi)
+     {  
+     int i;
+     int j;
+     int k;
+     uint8_t vec_aux[3]={0,0,0};
+         switch(gi){
+         case 1:         
+         break;      
+         case 2:
+         for(j=0;j<3;j++){
+            for(i=0;i<3;i++){
+             vec_aux[i]=(((((Fig[j]))<<2-i)&0b10000000)>>j)+vec_aux[i];
+            }
+         }         
+             for(k=0;k<3;k++){Fig[k]=vec_aux[k];}
+                                 
+         break;
+         case 3:
+         for(j=0;j<3;j++){
+            for(i=0;i<3;i++){
+             vec_aux[i]=(((((Fig[2-i]))>>2-j)&0b00100000)<<j)+vec_aux[i];
+            }
+            }
+                   for(k=0;k<3;k++){Fig[k]=vec_aux[k];}
+         break;
+         case 4:
+         for(j=0;j<3;j++){
+            for(i=0;i<3;i++){
+             vec_aux[i]= ( ( ((Fig[j])>>2-i) & (0b00100000) )<<j )+vec_aux[i];
+            }
+          }
+                for(k=0;k<3;k++){Fig[k]=vec_aux[k];}
+         break;
+         default:
+         break;
+         }  
+ 
+     }
+
+
+
+void limite(uint8_t *sc,uint8_t trasladar)
+{
+    int i;
+    int f;
+    uint8_t t;
+    for(i=1;i<=8;i++)
+    {   
+        t=(Fig[0])>>(trasladar-1);
+        if(i>7){f=(*(sc+(8)))&(t);break;}
+        
+        else{f=(*(sc+(i+1)))&(t);}
+              
+        if(f>0){lim=i;break;}    
+        else{lim=8;} 
+    }  
+    a.printf("\n stop de fila \n %d",i);
+    a.printf("\n limite \n %d",lim);
+}
+
+void imprimir(uint8_t  colum)
+{  
+   
+    if(col2>6){col2=6;}
+    
+    uint8_t dat [8];
+    int i;
+    //int verif=0;
+    int aux;
+
+    limite(Matr,colum);
+    
+    for(i=1;i<=lim;i++){
+             accelerometro();
+            a.printf("valor columna %d\n",col2);
+            /* if(verif == pos_x ){aux=1;}
+             else{
+              aux=0;
+                 if(pos_x==3){col2--;if(col2<2){col2=1;}}     
+                 if(pos_x==1){col2++;if(col2>=6){col2=6;}}   
+                  a.printf("chichico\n");
+               }
+             if(aux == 0){verif=pos_x;aux=1;}
+             */
+                 if(pos_x==3){col2--;if(col2<2){col2=1;}}     
+                 if(pos_x==1){col2++;if(col2>=6){col2=6;}}
+                 //if(value_acceleroy>3){grado++;if(grado>4){grado=1;}giro(grado);} 
+             if(i>=1){
+             dat[1]=((Fig[0])>>col2-1) ;
+             dat[2]=((Fig[1])>>col2-1) ;
+             dat[3]=((Fig[2])>>col2-1) ;
+             uint8_t e=~((0b11100000)>>col2-1);
+             Matr[i]=dat[1] | Matr[i];
+             Matr[i-1]=((dat[2] | Matr[i-1])&(dat[2]|e));
+             Matr[i-2]=((dat[3] | Matr[i-2])&(dat[3]|e));
+             if(i>3){Matr[i-3]=Matr[i-3]& e;}
+             sendSPI(i,(Matr[i]));
+             sendSPI(i-1,(Matr[i-1]));
+             sendSPI(i-2,(Matr[i-2]));
+             sendSPI((i-3),(Matr[i-3]));
+             wait(Vel);  
+             }
+    }   
+}
+/*
+void tetris(){
+    while(1){           
+                     
+                        in=a.getc();
+                        Tipofig=a.getc();
+                        //vcol=a.getc();
+                        grado=a.getc();
+                        out=a.getc();
+                        vcol=rand()%7 +1;
+                        if(in==60 && Tipofig<=5  && grado<=4 && out==62){
+                          seleccion(Tipofig);
+                          giro(grado);
+                          imprimir(vcol);
+                        
+                        }
+                        else{
+                            if(juego==2){break;}
+                            break;
+                            }
+                    
+           }
+    }
+*/
+
+
+int main() {
+
+                    inicializar(); 
+ 
+                    while(1){
+                         in=a.getc();
+                        Tipofig=a.getc();
+                        //vcol=a.getc();
+                        grado=a.getc();
+                        out=a.getc();
+                        vcol=rand()%7 +1;
+                        if(in==60 && Tipofig<=5  && grado<=4 && out==62){
+                          seleccion(Tipofig);
+                          giro(grado);
+                          imprimir(vcol);
+                        
+                        }
+                        else{
+                            break;
+                            }
+                    }
+}
+
+
+void accelerometro(){
+    
+     float accelero[3]; 
+     mpu1.getAccelero(accelero);
+     value_accelerox = accelero[1];
+     value_acceleroy = accelero[0];
+         if(value_accelerox>-9 && value_accelerox<-2){//a.printf("valor acelerometro 1 %f\n",value_accelerox);              a.printf("valor1 pos_x %d\n",col2);
+
+           pos_x=1;}
+         if(value_accelerox>-1 && value_accelerox<3){//a.printf("valor acelerometro  2 %f\n",value_accelerox);              a.printf("valor2 pos_x %d\n",col2);
+
+           pos_x=2;}
+         if(value_accelerox>3 && value_accelerox<9){//a.printf("valor acelerometro  3 %f\n",value_accelerox);              a.printf("valor2 pos_x %d\n",col2);
+
+           pos_x=3;}
+           
+         if(value_acceleroy>3){//a.printf("valor acelerometro  3 %f\n",value_acceleroy);              
+           pos_y=1;} 
+    }
+    
+
+
+
+
+
+