bien spi no se queda pegado

Dependencies:   mbed

Committer:
djinn77
Date:
Fri Sep 14 10:14:07 2018 +0000
Revision:
15:6ef1e4f473ed
Parent:
14:38fecafccf5b
Child:
16:6a4776a1357e
Correccion final letra Z

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 14:38fecafccf5b 30 // Toma el vector 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 12:50e2c8c6bf8c 33 int enable=1;
djinn77 12:50e2c8c6bf8c 34 while(i <8 && enable){ //se encarga de desplazar los bits dentro del vector
djinn77 12:50e2c8c6bf8c 35 int j=1; // inicia el contador j en 1
djinn77 12:50e2c8c6bf8c 36
djinn77 12:50e2c8c6bf8c 37 while(j<=8){ //se encarga de seleccionar que posicion del vector imprimira
djinn77 9:0cf4c5f7a1d8 38
djinn77 12:50e2c8c6bf8c 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 14:38fecafccf5b 40 //wait(0.1); // Activar este wait para pruebas de desplazamiento y captura de los datos
djinn77 11:2dc0f84c600a 41
djinn77 12:50e2c8c6bf8c 42 if(i==7 || (memoria[j-1]&(imprimir[j-1]>>i+1))!=0){ //Detiene el desplazamiento cuando los bits tocan fondo,
djinn77 14:38fecafccf5b 43 enable=0;// desabilitador del ciclo while
djinn77 14:38fecafccf5b 44 for(int k=0; k<8;k++){ // Almacena todos lo datos del vector en la posicion que corrimiento en la memoria
djinn77 14:38fecafccf5b 45 memoria[k]= memoria[k]|(imprimir[k]>>i);
djinn77 14:38fecafccf5b 46
djinn77 14:38fecafccf5b 47 }
djinn77 14:38fecafccf5b 48
djinn77 12:50e2c8c6bf8c 49 }
djinn77 12:50e2c8c6bf8c 50 j++;
djinn77 12:50e2c8c6bf8c 51 }
djinn77 14:38fecafccf5b 52 wait(0.3); // espera para tomar el otro valor de lectura
djinn77 4:1d1a3b0021d5 53 i++;
djinn77 4:1d1a3b0021d5 54 }
djinn77 12:50e2c8c6bf8c 55
djinn77 1:d99b6299bad8 56 }
djinn77 12:50e2c8c6bf8c 57
djinn77 7:5677ded8ff2a 58 void desplazar(uint16_t* datos, char des){ // tomar la figura y la desplaza segun la posicion ingresada inicialmente
djinn77 1:d99b6299bad8 59
djinn77 7:5677ded8ff2a 60 uint16_t desplazamiento[8]={0}; // Inicia un vector auxiliar con solo Ceros
djinn77 1:d99b6299bad8 61 int j= 0;
djinn77 1:d99b6299bad8 62
djinn77 7:5677ded8ff2a 63 for(int i=des; i<(des+3);i++){ // Inicia un vector auxiliar con solo Ceros
djinn77 7:5677ded8ff2a 64 desplazamiento[i]=datos[j]; // Alamcena los nuevos datos tomados en el vector
djinn77 1:d99b6299bad8 65 j++;
djinn77 1:d99b6299bad8 66 }
djinn77 7:5677ded8ff2a 67 captura_matriz(desplazamiento); //Envia el Vector desplazado la funcion de captura de matriz
djinn77 1:d99b6299bad8 68 }
djinn77 1:d99b6299bad8 69
djinn77 10:d4d4b9e9ed92 70 void read(char pos, char figura, char giro){
djinn77 10:d4d4b9e9ed92 71
djinn77 7:5677ded8ff2a 72 switch(figura){ //Este switch escoje la figura con que trabajaar
djinn77 1:d99b6299bad8 73 case 0: // L
djinn77 7:5677ded8ff2a 74 switch(giro){ //Este switch rota la figura a trabajar
djinn77 1:d99b6299bad8 75 case 0:
djinn77 7:5677ded8ff2a 76 desplazar(PZA_LD,pos); //LLAMA A LA FUNCION DESPLAZAMIENTO Y PONE LA POSICION
djinn77 1:d99b6299bad8 77 case 1:
djinn77 2:f9d289ee6b30 78 desplazar(PZA_LDN,pos);
djinn77 1:d99b6299bad8 79
djinn77 1:d99b6299bad8 80 break;
djinn77 1:d99b6299bad8 81 case 2:
djinn77 2:f9d289ee6b30 82 desplazar(PZA_LDO,pos);
djinn77 1:d99b6299bad8 83
djinn77 1:d99b6299bad8 84 break;
djinn77 1:d99b6299bad8 85 case 3:
djinn77 2:f9d289ee6b30 86 desplazar(PZA_LDD, pos);
djinn77 1:d99b6299bad8 87
djinn77 1:d99b6299bad8 88 break;
djinn77 0:4b2603e81763 89 }
djinn77 0:4b2603e81763 90 break;
djinn77 2:f9d289ee6b30 91 case 1://T
djinn77 2:f9d289ee6b30 92 switch(giro){
djinn77 2:f9d289ee6b30 93 case 0:
djinn77 2:f9d289ee6b30 94 desplazar(PZA_T, pos);
djinn77 2:f9d289ee6b30 95 break;
djinn77 2:f9d289ee6b30 96 case 1:
djinn77 2:f9d289ee6b30 97 desplazar(PZA_TN, pos);
djinn77 2:f9d289ee6b30 98 break;
djinn77 2:f9d289ee6b30 99 case 2:
djinn77 2:f9d289ee6b30 100 desplazar(PZA_TO, pos);
djinn77 2:f9d289ee6b30 101 break;
djinn77 2:f9d289ee6b30 102 case 3:
djinn77 2:f9d289ee6b30 103 desplazar(PZA_TD, pos);
djinn77 2:f9d289ee6b30 104 break;
djinn77 0:4b2603e81763 105 }
djinn77 0:4b2603e81763 106
djinn77 0:4b2603e81763 107 break;
djinn77 2:f9d289ee6b30 108 case 2://I
djinn77 2:f9d289ee6b30 109 switch(giro){
djinn77 2:f9d289ee6b30 110 case 0: case 2:
djinn77 2:f9d289ee6b30 111 desplazar(PZA_I, pos);
djinn77 2:f9d289ee6b30 112 break;
djinn77 2:f9d289ee6b30 113 case 1: case 3:
djinn77 2:f9d289ee6b30 114 desplazar(PZA_IR, pos);
djinn77 2:f9d289ee6b30 115 break;
djinn77 0:4b2603e81763 116 }
djinn77 0:4b2603e81763 117 break;
djinn77 2:f9d289ee6b30 118 case 3://Cuadrado
djinn77 2:f9d289ee6b30 119 switch(giro){
djinn77 2:f9d289ee6b30 120 case 1: case 2: case 3: case 4:
djinn77 2:f9d289ee6b30 121 desplazar(PZA_C,pos);
djinn77 2:f9d289ee6b30 122 break;
djinn77 0:4b2603e81763 123 }
djinn77 2:f9d289ee6b30 124 break;
djinn77 13:d7549cfe854d 125 case 4: //Z
djinn77 2:f9d289ee6b30 126 switch(giro){
djinn77 2:f9d289ee6b30 127 case 0:
djinn77 2:f9d289ee6b30 128 desplazar(PZA_Z,pos);
djinn77 2:f9d289ee6b30 129 break;
djinn77 2:f9d289ee6b30 130 case 1:
djinn77 2:f9d289ee6b30 131 desplazar(PZA_ZN,pos);
djinn77 2:f9d289ee6b30 132 break;
djinn77 2:f9d289ee6b30 133 case 2:
djinn77 2:f9d289ee6b30 134 desplazar(PZA_ZO,pos);
djinn77 2:f9d289ee6b30 135 break;
djinn77 2:f9d289ee6b30 136 case 3:
djinn77 2:f9d289ee6b30 137 desplazar(PZA_ZD, pos);
djinn77 2:f9d289ee6b30 138 break;
djinn77 2:f9d289ee6b30 139 }
djinn77 0:4b2603e81763 140
djinn77 0:4b2603e81763 141 break;
djinn77 15:6ef1e4f473ed 142 default:
djinn77 15:6ef1e4f473ed 143 desplazar(VACIO, pos);
djinn77 15:6ef1e4f473ed 144 break;
djinn77 0:4b2603e81763 145 }
djinn77 0:4b2603e81763 146 }
djinn77 10:d4d4b9e9ed92 147
djinn77 10:d4d4b9e9ed92 148 void captura_datos(){
djinn77 12:50e2c8c6bf8c 149
djinn77 10:d4d4b9e9ed92 150 pc.baud(38400); //Inicializa la velocidad de comunicacion
djinn77 12:50e2c8c6bf8c 151 char inicio=0;
djinn77 10:d4d4b9e9ed92 152 char pos= 0;
djinn77 10:d4d4b9e9ed92 153 char figura= 0;
djinn77 10:d4d4b9e9ed92 154 char giro= 0;
djinn77 12:50e2c8c6bf8c 155 char final=0;
djinn77 12:50e2c8c6bf8c 156 do{
djinn77 14:38fecafccf5b 157 debuging("\n Ingrese el inicio del comando. ");
djinn77 12:50e2c8c6bf8c 158 inicio=pc.getc();
djinn77 10:d4d4b9e9ed92 159 debuging("\n Ingrese el posicion. ");
djinn77 10:d4d4b9e9ed92 160 pos=pc.getc();
djinn77 10:d4d4b9e9ed92 161 debuging("\n Seleccione la Figura. ");
djinn77 10:d4d4b9e9ed92 162 figura=pc.getc();
djinn77 10:d4d4b9e9ed92 163 debuging("\n Seleccione la rotacion. ");
djinn77 12:50e2c8c6bf8c 164 giro=pc.getc();
djinn77 14:38fecafccf5b 165 debuging("\n Ingrese el final del comando. ");
djinn77 12:50e2c8c6bf8c 166 final=pc.getc();
djinn77 14:38fecafccf5b 167
djinn77 14:38fecafccf5b 168 if(inicio != '<'){
djinn77 14:38fecafccf5b 169
djinn77 14:38fecafccf5b 170 debuging("\n Error al inicio del comando. ");
djinn77 14:38fecafccf5b 171 }
djinn77 14:38fecafccf5b 172
djinn77 14:38fecafccf5b 173 if(final!= '>'){
djinn77 14:38fecafccf5b 174
djinn77 14:38fecafccf5b 175 debuging("\n Error al final del comando. ");
djinn77 14:38fecafccf5b 176 }
djinn77 12:50e2c8c6bf8c 177 }while(inicio!= '<' || final != '>');
djinn77 12:50e2c8c6bf8c 178
djinn77 10:d4d4b9e9ed92 179
djinn77 10:d4d4b9e9ed92 180 read(pos,figura,giro);
djinn77 10:d4d4b9e9ed92 181
djinn77 10:d4d4b9e9ed92 182 }
djinn77 10:d4d4b9e9ed92 183
djinn77 7:5677ded8ff2a 184 void inicializar(){ //INICIALIZA LA MATRIZ
djinn77 0:4b2603e81763 185
djinn77 7:5677ded8ff2a 186 sendSPI(0x0c,1);
djinn77 0:4b2603e81763 187 sendSPI(0x0b,7);
djinn77 7:5677ded8ff2a 188 sendSPI(0x09,0); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ
djinn77 7:5677ded8ff2a 189 sendSPI(0x0A,0x0f); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ
djinn77 0:4b2603e81763 190 int i;
djinn77 0:4b2603e81763 191 for (i=0;i<2;i++){
djinn77 0:4b2603e81763 192 sendSPI(0x0F,1);
djinn77 0:4b2603e81763 193 wait (0.5);
djinn77 0:4b2603e81763 194 sendSPI(0x0f,0);
djinn77 0:4b2603e81763 195 wait (0.5);
djinn77 0:4b2603e81763 196 }
djinn77 0:4b2603e81763 197
djinn77 5:106def451c41 198 for (int j= 1; j<=8;j++){ // limpia la pantalla al encenderce o reiniarcea asi
djinn77 5:106def451c41 199 //no quedan leds encendidos cuando se ejecute el programa nuevamente
djinn77 5:106def451c41 200
djinn77 7:5677ded8ff2a 201 sendSPI(j, 0x00); //pone cada columna y vecto en blanco al inicializar
djinn77 5:106def451c41 202 }
djinn77 0:4b2603e81763 203 }
djinn77 0:4b2603e81763 204
djinn77 0:4b2603e81763 205
djinn77 0:4b2603e81763 206 int main() {
djinn77 7:5677ded8ff2a 207 inicializar(); // Inicializa el programa para establecer los modos de trabajo liminosidad
djinn77 0:4b2603e81763 208 while(1){
djinn77 10:d4d4b9e9ed92 209 captura_datos(); // Inicia la lectura de la informacion
djinn77 0:4b2603e81763 210 }
djinn77 7:5677ded8ff2a 211
djinn77 0:4b2603e81763 212 }