Mateo Morales / Mbed 2 deprecated Tetris_2

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "datos.h"
00003 
00004 Serial pc(SERIAL_TX, SERIAL_RX);
00005 SPI deviceM(PA_7, PA_6, PA_5);
00006 DigitalOut ssel (PA_4);
00007 
00008 
00009 #define  uint8_t unsigned char
00010 uint8_t screen[8]={0,0,0,0,0,0,0,0};
00011 uint8_t screen2[8]={0,0,0,0,0,0,0,0};
00012 uint8_t verifica;
00013 uint8_t mascara;
00014 int velocidad=70;
00015 int segundo=1;
00016 
00017 ///////////////////////////////////////////////////////////////////////////////
00018 void sendSPI(uint8_t d1, uint8_t d2)// envio de datos al max
00019 {
00020     deviceM.unlock();
00021     ssel=0;
00022     deviceM.write(d1); 
00023     deviceM.write(d2);  
00024     ssel=1;
00025     deviceM.lock();
00026 };
00027 ///////////////////////////////////////////////////////////////////////////////
00028 void borrar()    // Borrar todos los datos de la matriz
00029 {
00030    int j;
00031      for(j=1;j<9;j++)
00032      {
00033       sendSPI(j,0);
00034       wait_ms(1);
00035      }
00036 }
00037 ///////////////////////////////////////////////////////////////////////////////
00038 void enviar()   // Encargado de enviar la matriz completa
00039 {
00040    int i;
00041  
00042       for(i=0;i<8;i++)
00043       {
00044        sendSPI(i+1,screen[i]);      
00045       }    
00046 }   
00047 ///////////////////////////////////////////////////////////////////////////////
00048 void ver()      //  Informe de datos "no se usa "
00049 {
00050  int i;
00051        for(i=0;i<8;i++)
00052        {
00053          pc.printf("posicion %d ",i);
00054          pc.printf("=  %d \n",screen[i]);     
00055        }      
00056 }  
00057 ///////////////////////////////////////////////////////////////////////////////
00058 void escribir()   // Guarda y compara los datos entrantes a la matriz y los que ya estaban
00059 {
00060 int i;
00061  
00062      for(i=0;i<tamano;i++)
00063      {
00064          screen2[posicion-i]=(start[posicion-i] & 128);
00065          start[posicion-i]=start[posicion-i] << 1;
00066      }   
00067      
00068      //pc.printf("1 \n");
00069      //ver();
00070      
00071      
00072      for(i=0;i<tamano;i++)
00073      {
00074          screen[posicion-i]=((((screen[posicion-i]>>1) & ~(mascara-1)) | (screen[posicion-i] & (mascara-1))) | screen2[posicion-i] ) | (screen[posicion-i] & mascara) | (screen[posicion-i] & mascara*segundo);
00075      }    
00076      
00077      //pc.printf("2 \n");
00078      //ver();
00079      enviar();
00080 }    
00081 ///////////////////////////////////////////////////////////////////////////////
00082 int ubicacion()            //Limita el ingreso de posicion no mayor a 7
00083 {
00084     int a;
00085     if((posicion_original+tamano) <= 8 && (posicion_original+tamano) >= 0  )
00086     {
00087       a=1;
00088     }
00089     else
00090     {
00091       //pc.printf("Error de posicion \n");
00092       //pc.printf("Posicion original %d \n",posicion_original);
00093       //pc.printf("tamano  %d \n",tamano);
00094       a=0;
00095     }    
00096     return a;
00097 }
00098 ///////////////////////////////////////////////////////////////////////////////
00099 void analisis()  // Verifica la siguiente fila para saber si se puede desplazar 
00100 {
00101 int i;
00102 uint8_t a;
00103        
00104        for(i=0;i<tamano;i++)
00105        {
00106             a=screen[posicion-i] & mascara;
00107          // pc.printf("verificacion siguiente fila = %d \n ",a);
00108             if(mascara==a)
00109             {
00110              i=tamano;
00111              verifica=1;
00112             }  
00113             else
00114             {
00115              verifica=0;     
00116             }
00117        }    
00118 }     
00119 ////////////////////////////////////////////////////////////////////////////////
00120 void analisis2()   // Prueba 
00121 {
00122     int i;
00123     uint8_t a;
00124        
00125        for(i=0;i<tamano;i++)
00126        {
00127             a=screen[posicion-i] & mascara;
00128             a= a & ((screen[posicion-i]>>1) & ~(mascara - 1));  
00129             pc.printf("verificacion siguiente fila = %d \n ",a);
00130             if(a!=0)
00131             {
00132              i=tamano;
00133              verifica=1;
00134              segundo=1;
00135              if(verificar2==1)
00136              {
00137                  verificar2=0;
00138                  verifica=0;
00139                  segundo=2;
00140              }   
00141             }  
00142             else
00143             {
00144              segundo=1;
00145              verifica=0;     
00146             }
00147        }    
00148     
00149 }
00150 ///////////////////////////////////////////////////////////////////////////////
00151 void play ()  // Funcion encargada de determianr el estado de la mascara
00152 {
00153  int a=1;
00154   mascara=128;
00155   //pc.printf("Posicion original 1 %d \n",posicion_original);
00156   a=ubicacion();
00157     while(a==1)
00158     {
00159      analisis2();
00160           
00161         if (verifica==1 || mascara==0)
00162         {
00163          a=0;
00164          //pc.printf("SI  \n");
00165         }
00166         else 
00167         {
00168          //pc.printf("NO  \n");
00169          escribir();  
00170          mascara=mascara/2; 
00171          wait_ms(velocidad);
00172          //pc.printf("_____________________\n\n");
00173         }
00174     }            
00175 }
00176 
00177 ///////////////////////////////////////////////////////////////////////////////
00178           
00179 int main() { // fucnion principal 
00180 
00181         sendSPI(0x0c,1);
00182         sendSPI(0x0F,1);
00183         wait (1);
00184                     
00185         sendSPI(0x0F,0);
00186         wait (1);
00187         sendSPI(0xB,0x7);
00188         borrar();
00189                     
00190         int n;
00191         int giro, inicio , fin;
00192           while(1){
00193            
00194            inicio=pc.getc();
00195            //pc.printf("Ingrese el numero de la figura \n");
00196            n = pc.getc();  
00197            //pc.printf("figura  %d \n ",n);
00198                                        
00199            //pc.printf("Ingrese el numero de angulo de giro \n");
00200            giro = pc.getc();
00201            //pc.printf("giro %d \n ",giro);
00202                        
00203            //pc.printf("Ingrese la posicion  \n");
00204            posicion = pc.getc();
00205            //pc.printf("posicion %d \n ",posicion);  
00206             
00207             fin=pc.getc();           
00208            wait(0.2);
00209                        
00210                        if((inicio==60) && (fin==62))
00211                        {
00212                        
00213                        switch(n)
00214                        {
00215                          case 0: a(giro); play(); break;  
00216                                                   
00217                          case 1: b(giro); play(); break;  
00218                          
00219                          case 2: c(giro); play(); break;  
00220                          
00221                          case 3: d(giro); play(); break;  
00222                          
00223                          case 4: e(giro); play(); break;  
00224                          
00225                          case 5: f(giro); play(); break;  
00226                          
00227                          case 6: g(giro); play(); break;  
00228                           
00229                         default: pc.printf("Error en figura \n");                           
00230                       }
00231                      }      
00232          }                
00233 }