Entrega 1 de tetris

Dependencies:   mbed

Revision:
0:d1aba6605d0b
Child:
1:df74ebfc1126
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Sep 13 11:46:46 2018 +0000
@@ -0,0 +1,218 @@
+#include "mbed.h"
+#include "datos.h"
+
+Serial pc(SERIAL_TX, SERIAL_RX);
+SPI deviceM(PA_7, PA_6, PA_5);
+DigitalOut ssel (PA_4);
+
+
+#define  uint8_t unsigned char
+uint8_t screen[8]={0,0,0,0,0,0,0,0};
+uint8_t screen2[8]={0,0,0,0,0,0,0,0};
+uint8_t verifica;
+uint8_t mascara;
+int velocidad=70;
+
+
+///////////////////////////////////////////////////////////////////////////////
+void sendSPI(uint8_t d1, uint8_t d2)// envio de datos al max
+{
+    deviceM.unlock();
+    ssel=0;
+    deviceM.write(d1); 
+    deviceM.write(d2);  
+    ssel=1;
+    deviceM.lock();
+};
+///////////////////////////////////////////////////////////////////////////////
+void borrar()    // Borrar todos los datos de la matriz
+{
+   int j;
+     for(j=1;j<9;j++)
+     {
+      sendSPI(j,0);
+      wait_ms(1);
+     }
+}
+///////////////////////////////////////////////////////////////////////////////
+void enviar()   // Encargado de enviar la matriz completa
+{
+   int i;
+ 
+      for(i=0;i<8;i++)
+      {
+       sendSPI(i+1,screen[i]);      
+      }    
+}   
+///////////////////////////////////////////////////////////////////////////////
+void ver()      //  Informe de datos "no se usa "
+{
+ int i;
+       for(i=0;i<8;i++)
+       {
+         pc.printf("posicion %d ",i);
+         pc.printf("=  %d \n",screen[i]);     
+       }      
+}  
+///////////////////////////////////////////////////////////////////////////////
+void escribir()   // Guarda y compara los datos entrantes a la matriz y los que ya estaban
+{
+int i;
+ 
+     for(i=0;i<tamano;i++)
+     {
+         screen2[posicion-i]=(start[posicion-i] & 128);
+         start[posicion-i]=start[posicion-i] << 1;
+     }   
+     
+     //pc.printf("1 \n");
+     //ver();
+     
+     
+     for(i=0;i<tamano;i++)
+     {
+         screen[posicion-i]=((((screen[posicion-i]>>1) & ~(mascara-1)) | (screen[posicion-i] & (mascara-1))) | screen2[posicion-i] );
+     }    
+     
+     //pc.printf("2 \n");
+     //ver();
+     enviar();
+}    
+///////////////////////////////////////////////////////////////////////////////
+int ubicacion()            //Limita el ingreso de posicion no mayor a 7
+{
+    int a;
+    if((posicion_original+tamano) <= 8 && (posicion_original+tamano) >= 0  )
+    {
+      a=1;
+    }
+    else
+    {
+      //pc.printf("Error de posicion \n");
+      //pc.printf("Posicion original %d \n",posicion_original);
+      //pc.printf("tamano  %d \n",tamano);
+      a=0;
+    }    
+    return a;
+}
+///////////////////////////////////////////////////////////////////////////////
+void analisis()  // Verifica la siguiente fila para saber si se puede desplazar 
+{
+int i;
+uint8_t a;
+       
+       for(i=0;i<tamano;i++)
+       {
+            a=screen[posicion-i] & mascara;
+         // pc.printf("verificacion siguiente fila = %d \n ",a);
+            if(mascara==a)
+            {
+             i=tamano;
+             verifica=1;
+            }  
+            else
+            {
+             verifica=0;     
+            }
+       }    
+}     
+////////////////////////////////////////////////////////////////////////////////
+void analisis2()   // Prueba 
+{
+    int i;
+    uint8_t a;
+       
+       for(i=0;i<tamano;i++)
+       {
+            a=screen[posicion-i] & mascara;
+            a= a & ((screen[posicion-i]>>1) & ~(mascara - 1));  
+            pc.printf("verificacion siguiente fila = %d \n ",a);
+            if(a!=0)
+            {
+             i=tamano;
+             verifica=1;
+            }  
+            else
+            {
+             verifica=0;     
+            }
+       }    
+    
+}
+///////////////////////////////////////////////////////////////////////////////
+void play ()  // Funcion encargada de determianr el estado de la mascara
+{
+ int a=1;
+  mascara=128;
+  //pc.printf("Posicion original 1 %d \n",posicion_original);
+  a=ubicacion();
+    while(a==1)
+    {
+     analisis2();
+          
+        if (verifica==1 || mascara==0)
+        {
+         a=0;
+         //pc.printf("SI  \n");
+        }
+        else 
+        {
+         //pc.printf("NO  \n");
+         escribir();  
+         mascara=mascara/2; 
+         wait_ms(velocidad);
+         //pc.printf("_____________________\n\n");
+        }
+    }            
+}
+
+///////////////////////////////////////////////////////////////////////////////
+          
+int main() { // fucnion principal 
+
+        sendSPI(0x0c,1);
+        sendSPI(0x0F,1);
+        wait (1);
+                    
+        sendSPI(0x0F,0);
+        wait (1);
+        sendSPI(0xB,0x7);
+        borrar();
+                    
+        int n;
+        int giro;
+          while(1){
+           //pc.printf("Ingrese el numero de la figura \n");
+           n = pc.getc();  
+           //pc.printf("figura  %d \n ",n);
+                                       
+           //pc.printf("Ingrese el numero de angulo de giro \n");
+           giro = pc.getc();
+           //pc.printf("giro %d \n ",giro);
+                       
+           //pc.printf("Ingrese la posicion  \n");
+           posicion = pc.getc();
+           //pc.printf("posicion %d \n ",posicion);  
+                       
+           wait(0.2);
+                       
+                       switch(n)
+                       {
+                         case 0: a(giro); play(); break;  
+                                                  
+                         case 1: b(giro); play(); break;  
+                         
+                         case 2: c(giro); play(); break;  
+                         
+                         case 3: d(giro); play(); break;  
+                         
+                         case 4: e(giro); play(); break;  
+                         
+                         case 5: f(giro); play(); break;  
+                         
+                         case 6: g(giro); play(); break;  
+                          
+                        default: pc.printf("Error en figura \n");                           
+                      }  
+         }                
+}