Yosef Guevara Salamanca
/
TETS_PC
bien spi no se queda pegado
tetris_pc.cpp
- Committer:
- djinn77
- Date:
- 2018-09-13
- Revision:
- 10:d4d4b9e9ed92
- Parent:
- tets_pc.cpp@ 9:0cf4c5f7a1d8
- Child:
- 11:2dc0f84c600a
File content as of revision 10:d4d4b9e9ed92:
#include "mbed.h" #include "piezas.h" //#define DEBUG 1 Serial pc(USBTX,USBRX); SPI deviceM(PB_15, PB_14, PB_13); //SE DEFINE EL LED QUE ACTIVARA EL DISPOSITIVO DigitalOut ssel (PB_12); int memoria[8]={0}; void debuging(char*s,...){ #if DEBUG pc.printf(s); #endif } // FUNCION EL CUAL ENVIA EL DATO JUNTO CON LA DIRECCION DE LA COLUMNA CORRESPONDIENTE AL PRIMER DISPOSITIVO void sendSPI(uint8_t d1, uint8_t d2) { deviceM.unlock(); ssel=0; // SELECCIONA EL PRIMER DISPOSOTIVO deviceM.write(d1); // ESCRIBE EL ADDRESS deviceM.write(d2); // ESCRIBE EL DATA ssel=1; deviceM.lock(); }; // 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 int j=1; // inicia el contador j en 1 while(j<=8){ //se encarga de seleccionar que posicion del vector imprimira sendSPI(j, memoria[j-1]|(imprimir[j-1]>>i)); //Imprime el resultado de aplicar OR a la memoria y al desplamamiento de imprimir if(i==7|| (memoria[j-1]&(imprimir[j-1]>>i+1))!=0){ //Detiene el desplazamiento cuando los bits tocan fondo //AQUI esta el error memoria[j-1]= memoria[j-1]|(imprimir[j-1]>>i); //Almacena el nuevo valor de la operacion OR en la memoria } j++; } wait(1.0); // espera para tomar el otro valor de lectura i++; } } 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 int j= 0; for(int i=des; i<(des+3);i++){ // Inicia un vector auxiliar con solo Ceros desplazamiento[i]=datos[j]; // Alamcena los nuevos datos tomados en el vector j++; } captura_matriz(desplazamiento); //Envia el Vector desplazado la funcion de captura de matriz } void read(char pos, char figura, char giro){ switch(figura){ //Este switch escoje la figura con que trabajaar case 0: // L switch(giro){ //Este switch rota la figura a trabajar case 0: desplazar(PZA_LD,pos); //LLAMA A LA FUNCION DESPLAZAMIENTO Y PONE LA POSICION case 1: desplazar(PZA_LDN,pos); break; case 2: desplazar(PZA_LDO,pos); break; case 3: desplazar(PZA_LDD, pos); break; } break; case 1://T switch(giro){ case 0: desplazar(PZA_T, pos); break; case 1: desplazar(PZA_TN, pos); break; case 2: desplazar(PZA_TO, pos); break; case 3: desplazar(PZA_TD, pos); break; } break; case 2://I switch(giro){ case 0: case 2: desplazar(PZA_I, pos); break; case 1: case 3: desplazar(PZA_IR, pos); break; } break; case 3://Cuadrado switch(giro){ case 1: case 2: case 3: case 4: desplazar(PZA_C,pos); break; } break; case 5: //Z switch(giro){ case 0: desplazar(PZA_Z,pos); break; case 1: desplazar(PZA_ZN,pos); break; case 2: desplazar(PZA_ZO,pos); break; case 3: desplazar(PZA_ZD, pos); break; } break; } } void captura_datos(){ pc.baud(38400); //Inicializa la velocidad de comunicacion char pos= 0; char figura= 0; char giro= 0; debuging("\n Ingrese el posicion. "); pos=pc.getc(); debuging("\n Seleccione la Figura. "); figura=pc.getc(); debuging("\n Seleccione la rotacion. "); giro=pc.getc(); read(pos,figura,giro); } void inicializar(){ //INICIALIZA LA MATRIZ sendSPI(0x0c,1); sendSPI(0x0b,7); sendSPI(0x09,0); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ sendSPI(0x0A,0x0f); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ int i; for (i=0;i<2;i++){ sendSPI(0x0F,1); wait (0.5); sendSPI(0x0f,0); wait (0.5); } for (int j= 1; j<=8;j++){ // limpia la pantalla al encenderce o reiniarcea asi //no quedan leds encendidos cuando se ejecute el programa nuevamente sendSPI(j, 0x00); //pone cada columna y vecto en blanco al inicializar } } int main() { inicializar(); // Inicializa el programa para establecer los modos de trabajo liminosidad while(1){ captura_datos(); // Inicia la lectura de la informacion } }