bien spi no se queda pegado

Dependencies:   mbed

Committer:
djinn77
Date:
Wed Sep 12 20:50:25 2018 +0000
Revision:
8:e5a5b39dd8e8
Parent:
7:5677ded8ff2a
Child:
9:0cf4c5f7a1d8
comento

Who changed what in which revision?

UserRevisionLine numberNew contents of line
djinn77 0:4b2603e81763 1 #include "mbed.h"
djinn77 1:d99b6299bad8 2 #include "piezas.h"
djinn77 1:d99b6299bad8 3 //#define DEBUG 1
djinn77 0:4b2603e81763 4
djinn77 7:5677ded8ff2a 5 Serial pc(USBTX,USBRX);
djinn77 7:5677ded8ff2a 6 SPI deviceM(PB_15, PB_14, PB_13); //SE DEFINE EL LED QUE ACTIVARA EL DISPOSITIVO
djinn77 0:4b2603e81763 7 DigitalOut ssel (PB_12);
djinn77 0:4b2603e81763 8
djinn77 3:b77f80e91118 9 int memoria[8]={0};
djinn77 0:4b2603e81763 10
djinn77 0:4b2603e81763 11 void debuging(char*s,...){
djinn77 0:4b2603e81763 12
djinn77 0:4b2603e81763 13 #if DEBUG
djinn77 0:4b2603e81763 14 pc.printf(s);
djinn77 0:4b2603e81763 15 #endif
djinn77 0:4b2603e81763 16
djinn77 0:4b2603e81763 17 }
djinn77 0:4b2603e81763 18
djinn77 7:5677ded8ff2a 19 // FUNCION EL CUAL ENVIA EL DATO JUNTO CON LA DIRECCION DE LA COLUMNA CORRESPONDIENTE AL PRIMER DISPOSITIVO
djinn77 0:4b2603e81763 20 void sendSPI(uint8_t d1, uint8_t d2)
djinn77 0:4b2603e81763 21 {
djinn77 0:4b2603e81763 22 deviceM.unlock();
djinn77 7:5677ded8ff2a 23 ssel=0; // SELECCIONA EL PRIMER DISPOSOTIVO
djinn77 7:5677ded8ff2a 24 deviceM.write(d1); // ESCRIBE EL ADDRESS
djinn77 7:5677ded8ff2a 25 deviceM.write(d2); // ESCRIBE EL DATA
djinn77 0:4b2603e81763 26 ssel=1;
djinn77 0:4b2603e81763 27 deviceM.lock();
djinn77 0:4b2603e81763 28 };
djinn77 1:d99b6299bad8 29
djinn77 7:5677ded8ff2a 30 // Toma el vecor reorganizado , lo imprime y lo almacena
djinn77 1:d99b6299bad8 31 void captura_matriz(uint16_t* imprimir){
djinn77 7:5677ded8ff2a 32 int i=0; // inicia el contador i en 0
djinn77 6:c80ec2cdfb9e 33
djinn77 7:5677ded8ff2a 34 while(i <8){ //se encarga de desplazar los bits dentro del vector
djinn77 7:5677ded8ff2a 35 int j=1; // inicia el contador j en 1
djinn77 7:5677ded8ff2a 36
djinn77 7:5677ded8ff2a 37 while(j<=8){ //se encarga de seleccionar que posicion del vector imprimira
djinn77 7:5677ded8ff2a 38
djinn77 7:5677ded8ff2a 39 sendSPI(j, memoria[j-1]|(imprimir[j-1]>>i)); //Imprime el resultado de aplicar OR a la memoria y al desplamamiento de imprimir
djinn77 5:106def451c41 40
djinn77 7:5677ded8ff2a 41 if(i==7||(memoria[j-1]&(imprimir[j-1]>>i+1))!=0){ //Detiene el desplazamiento cuando los bits tocan fondo //AQUI esta el error
djinn77 6:c80ec2cdfb9e 42
djinn77 8:e5a5b39dd8e8 43 memoria[j-1]= memoria[j-1]|(imprimir[j-1]>>i); //Almacena el nuevo valor de la operacion OR en la memoria
djinn77 6:c80ec2cdfb9e 44
djinn77 6:c80ec2cdfb9e 45 }
djinn77 6:c80ec2cdfb9e 46 j++;
djinn77 6:c80ec2cdfb9e 47 }
djinn77 7:5677ded8ff2a 48 wait(1.0); // espera para tomar el otro valor de lectura
djinn77 4:1d1a3b0021d5 49 i++;
djinn77 4:1d1a3b0021d5 50 }
djinn77 7:5677ded8ff2a 51
djinn77 1:d99b6299bad8 52 }
djinn77 1:d99b6299bad8 53
djinn77 1:d99b6299bad8 54
djinn77 7:5677ded8ff2a 55 void desplazar(uint16_t* datos, char des){ // tomar la figura y la desplaza segun la posicion ingresada inicialmente
djinn77 1:d99b6299bad8 56
djinn77 7:5677ded8ff2a 57 uint16_t desplazamiento[8]={0}; // Inicia un vector auxiliar con solo Ceros
djinn77 1:d99b6299bad8 58 int j= 0;
djinn77 1:d99b6299bad8 59
djinn77 7:5677ded8ff2a 60 for(int i=des; i<(des+3);i++){ // Inicia un vector auxiliar con solo Ceros
djinn77 7:5677ded8ff2a 61 desplazamiento[i]=datos[j]; // Alamcena los nuevos datos tomados en el vector
djinn77 1:d99b6299bad8 62 j++;
djinn77 1:d99b6299bad8 63 }
djinn77 7:5677ded8ff2a 64 captura_matriz(desplazamiento); //Envia el Vector desplazado la funcion de captura de matriz
djinn77 1:d99b6299bad8 65 }
djinn77 1:d99b6299bad8 66
djinn77 1:d99b6299bad8 67 void read(){
djinn77 0:4b2603e81763 68
djinn77 7:5677ded8ff2a 69 pc.baud(38400); //Inicializa la velocidad de comunicacion
djinn77 3:b77f80e91118 70
djinn77 0:4b2603e81763 71 char pos= 0;
djinn77 0:4b2603e81763 72 char figura= 0;
djinn77 0:4b2603e81763 73 char giro= 0;
djinn77 7:5677ded8ff2a 74
djinn77 0:4b2603e81763 75 debuging("\n Ingrese el posicion. ");
djinn77 0:4b2603e81763 76 pos=pc.getc();
djinn77 0:4b2603e81763 77 debuging("\n Seleccione la Figura. ");
djinn77 0:4b2603e81763 78 figura=pc.getc();
djinn77 0:4b2603e81763 79 debuging("\n Seleccione la rotacion. ");
djinn77 0:4b2603e81763 80 giro=pc.getc();
djinn77 0:4b2603e81763 81
djinn77 0:4b2603e81763 82
djinn77 7:5677ded8ff2a 83 switch(figura){ //Este switch escoje la figura con que trabajaar
djinn77 1:d99b6299bad8 84 case 0: // L
djinn77 7:5677ded8ff2a 85 switch(giro){ //Este switch rota la figura a trabajar
djinn77 1:d99b6299bad8 86 case 0:
djinn77 7:5677ded8ff2a 87 desplazar(PZA_LD,pos); //LLAMA A LA FUNCION DESPLAZAMIENTO Y PONE LA POSICION
djinn77 1:d99b6299bad8 88 case 1:
djinn77 2:f9d289ee6b30 89 desplazar(PZA_LDN,pos);
djinn77 1:d99b6299bad8 90
djinn77 1:d99b6299bad8 91 break;
djinn77 1:d99b6299bad8 92 case 2:
djinn77 2:f9d289ee6b30 93 desplazar(PZA_LDO,pos);
djinn77 1:d99b6299bad8 94
djinn77 1:d99b6299bad8 95 break;
djinn77 1:d99b6299bad8 96 case 3:
djinn77 2:f9d289ee6b30 97 desplazar(PZA_LDD, pos);
djinn77 1:d99b6299bad8 98
djinn77 1:d99b6299bad8 99 break;
djinn77 0:4b2603e81763 100 }
djinn77 0:4b2603e81763 101 break;
djinn77 2:f9d289ee6b30 102 case 1://T
djinn77 2:f9d289ee6b30 103 switch(giro){
djinn77 2:f9d289ee6b30 104 case 0:
djinn77 2:f9d289ee6b30 105 desplazar(PZA_T, pos);
djinn77 2:f9d289ee6b30 106 break;
djinn77 2:f9d289ee6b30 107 case 1:
djinn77 2:f9d289ee6b30 108 desplazar(PZA_TN, pos);
djinn77 2:f9d289ee6b30 109 break;
djinn77 2:f9d289ee6b30 110 case 2:
djinn77 2:f9d289ee6b30 111 desplazar(PZA_TO, pos);
djinn77 2:f9d289ee6b30 112 break;
djinn77 2:f9d289ee6b30 113 case 3:
djinn77 2:f9d289ee6b30 114 desplazar(PZA_TD, pos);
djinn77 2:f9d289ee6b30 115 break;
djinn77 0:4b2603e81763 116 }
djinn77 0:4b2603e81763 117
djinn77 0:4b2603e81763 118 break;
djinn77 2:f9d289ee6b30 119 case 2://I
djinn77 2:f9d289ee6b30 120 switch(giro){
djinn77 2:f9d289ee6b30 121 case 0: case 2:
djinn77 2:f9d289ee6b30 122 desplazar(PZA_I, pos);
djinn77 2:f9d289ee6b30 123 break;
djinn77 2:f9d289ee6b30 124 case 1: case 3:
djinn77 2:f9d289ee6b30 125 desplazar(PZA_IR, pos);
djinn77 2:f9d289ee6b30 126 break;
djinn77 0:4b2603e81763 127 }
djinn77 0:4b2603e81763 128 break;
djinn77 2:f9d289ee6b30 129 case 3://Cuadrado
djinn77 2:f9d289ee6b30 130 switch(giro){
djinn77 2:f9d289ee6b30 131 case 1: case 2: case 3: case 4:
djinn77 2:f9d289ee6b30 132 desplazar(PZA_C,pos);
djinn77 2:f9d289ee6b30 133 break;
djinn77 0:4b2603e81763 134 }
djinn77 2:f9d289ee6b30 135 break;
djinn77 2:f9d289ee6b30 136 case 5: //Z
djinn77 2:f9d289ee6b30 137 switch(giro){
djinn77 2:f9d289ee6b30 138 case 0:
djinn77 2:f9d289ee6b30 139 desplazar(PZA_Z,pos);
djinn77 2:f9d289ee6b30 140 break;
djinn77 2:f9d289ee6b30 141 case 1:
djinn77 2:f9d289ee6b30 142 desplazar(PZA_ZN,pos);
djinn77 2:f9d289ee6b30 143 break;
djinn77 2:f9d289ee6b30 144 case 2:
djinn77 2:f9d289ee6b30 145 desplazar(PZA_ZO,pos);
djinn77 2:f9d289ee6b30 146 break;
djinn77 2:f9d289ee6b30 147 case 3:
djinn77 2:f9d289ee6b30 148 desplazar(PZA_ZD, pos);
djinn77 2:f9d289ee6b30 149 break;
djinn77 2:f9d289ee6b30 150 }
djinn77 0:4b2603e81763 151
djinn77 0:4b2603e81763 152 break;
djinn77 2:f9d289ee6b30 153
djinn77 0:4b2603e81763 154 }
djinn77 0:4b2603e81763 155 }
djinn77 1:d99b6299bad8 156
djinn77 7:5677ded8ff2a 157 void inicializar(){ //INICIALIZA LA MATRIZ
djinn77 0:4b2603e81763 158
djinn77 7:5677ded8ff2a 159 sendSPI(0x0c,1);
djinn77 0:4b2603e81763 160 sendSPI(0x0b,7);
djinn77 7:5677ded8ff2a 161 sendSPI(0x09,0); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ
djinn77 7:5677ded8ff2a 162 sendSPI(0x0A,0x0f); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ
djinn77 0:4b2603e81763 163 int i;
djinn77 0:4b2603e81763 164 for (i=0;i<2;i++){
djinn77 0:4b2603e81763 165 sendSPI(0x0F,1);
djinn77 0:4b2603e81763 166 wait (0.5);
djinn77 0:4b2603e81763 167 sendSPI(0x0f,0);
djinn77 0:4b2603e81763 168 wait (0.5);
djinn77 0:4b2603e81763 169 }
djinn77 0:4b2603e81763 170
djinn77 5:106def451c41 171 for (int j= 1; j<=8;j++){ // limpia la pantalla al encenderce o reiniarcea asi
djinn77 5:106def451c41 172 //no quedan leds encendidos cuando se ejecute el programa nuevamente
djinn77 5:106def451c41 173
djinn77 7:5677ded8ff2a 174 sendSPI(j, 0x00); //pone cada columna y vecto en blanco al inicializar
djinn77 5:106def451c41 175 }
djinn77 0:4b2603e81763 176 }
djinn77 0:4b2603e81763 177
djinn77 0:4b2603e81763 178
djinn77 0:4b2603e81763 179 int main() {
djinn77 7:5677ded8ff2a 180 inicializar(); // Inicializa el programa para establecer los modos de trabajo liminosidad
djinn77 0:4b2603e81763 181 while(1){
djinn77 7:5677ded8ff2a 182 read(); // Inicia la lectura de la informacion
djinn77 0:4b2603e81763 183 }
djinn77 7:5677ded8ff2a 184
djinn77 0:4b2603e81763 185 }