bien spi no se queda pegado

Dependencies:   mbed

Revision:
12:50e2c8c6bf8c
Parent:
11:2dc0f84c600a
Child:
13:d7549cfe854d
--- a/tetris_pc.cpp	Thu Sep 13 08:34:58 2018 +0000
+++ b/tetris_pc.cpp	Thu Sep 13 12:55:48 2018 +0000
@@ -30,52 +30,28 @@
 // Toma el vecor reorganizado , lo imprime y lo almacena
 void captura_matriz(uint16_t* imprimir){
 int i=0; // inicia el contador i en 0
- 
- while(i <8){ //se encarga de desplazar los bits dentro del vector
-
-         sendSPI(1, memoria[0]|(imprimir[0]>>i));
-         sendSPI(2, memoria[1]|(imprimir[1]>>i));
-         sendSPI(3, memoria[2]|(imprimir[2]>>i));
-         sendSPI(4, memoria[3]|(imprimir[3]>>i));
-         sendSPI(5, memoria[4]|(imprimir[4]>>i));
-         sendSPI(6, memoria[5]|(imprimir[5]>>i));
-         sendSPI(7, memoria[6]|(imprimir[6]>>i));
-         sendSPI(8, memoria[7]|(imprimir[7]>>i));
-         
-         
+ int enable=1;
+ while(i <8 && enable){ //se encarga de desplazar los bits dentro del vector
+    int j=1;  // inicia el contador j en 1
+    
+    while(j<=8){ //se encarga de seleccionar que posicion del vector imprimira
          
-         if(i==7 || (memoria[i] &(imprimir[i]>>i+1)!=0)){
-             
-         memoria[0] = memoria[0]|(imprimir[0]>>i);
-         memoria[1] = memoria[1]|(imprimir[1]>>i);
-         memoria[2] = memoria[2]|(imprimir[2]>>i);
-         memoria[3] = memoria[3]|(imprimir[3]>>i);
-         memoria[4] = memoria[4]|(imprimir[4]>>i);
-         memoria[5] = memoria[5]|(imprimir[5]>>i);
-         memoria[6] = memoria[6]|(imprimir[6]>>i);
-         memoria[7] = memoria[7]|(imprimir[7]>>i);
-         break;
- 
-   
-             }
+         sendSPI(j, memoria[j-1]|(imprimir[j-1]>>i));  //Imprime el resultado de aplicar OR a la memoria y al desplamamiento de imprimir
+     
 
-  
-
-      
-     wait(1.0);
+     if(i==7 || (memoria[j-1]&(imprimir[j-1]>>i+1))!=0){  //Detiene el desplazamiento cuando los bits tocan fondo, 
+         
+         memoria[j-1]= memoria[j-1]|(imprimir[j-1]>>i); //Almacena el nuevo valor de la operacion OR en la memoria
+          enable=0;
+         }
+     j++;
+     } 
+     wait(0.5); // espera para tomar el otro valor de lectura
      i++;
      }
-     imprimir[0]=0x00;
-     imprimir[1]=0x00;
-     imprimir[2]=0x00;
-     imprimir[3]=0x00;
-     imprimir[4]=0x00;
-     imprimir[5]=0x00;
-     imprimir[6]=0x00;
-     imprimir[7]=0x00;
+
   }
- 
- 
+
  void desplazar(uint16_t* datos, char des){ // tomar la figura y la desplaza segun la posicion ingresada inicialmente
     
   uint16_t desplazamiento[8]={0};      // Inicia un vector auxiliar con solo Ceros
@@ -165,19 +141,26 @@
      }
 
 void captura_datos(){
-    
+         
          pc.baud(38400); //Inicializa la velocidad de comunicacion
-         
+         char inicio=0;
          char pos= 0;
          char figura= 0;
          char giro= 0;
-         
+         char final=0;
+         do{
+         debuging("\n Ingrese el posicion. ");
+         inicio=pc.getc();    
          debuging("\n Ingrese el posicion. ");
          pos=pc.getc();
          debuging("\n Seleccione la Figura. ");
          figura=pc.getc();
          debuging("\n Seleccione la rotacion. ");
-         giro=pc.getc();
+         giro=pc.getc(); 
+         debuging("\n Ingrese el posicion. ");
+         final=pc.getc();    
+             }while(inicio!= '<' || final != '>');
+       
          
          read(pos,figura,giro);