Dependencies:   mbed

Fork of matriz by Natalia Garavito

Committer:
Mateom0104
Date:
Wed Oct 17 23:23:22 2018 +0000
Revision:
2:d70bfc78f62d
Parent:
1:899567984090
arreglo 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NataliaGaravito 0:830a26e0a86c 1 #include "mbed.h"
NataliaGaravito 1:899567984090 2 #include "datos.h"
NataliaGaravito 1:899567984090 3
NataliaGaravito 1:899567984090 4 Serial pc(SERIAL_TX, SERIAL_RX);
NataliaGaravito 1:899567984090 5 SPI deviceM(PA_7,PA_6, PA_5);
NataliaGaravito 1:899567984090 6 DigitalOut ssel (PA_4);
Mateom0104 2:d70bfc78f62d 7 //InterruptIn girop(PF_1);
Mateom0104 2:d70bfc78f62d 8 //InterruptIn posicionmas(PF_0);
Mateom0104 2:d70bfc78f62d 9 //InterruptIn posicionmenos(PA_8);
Mateom0104 2:d70bfc78f62d 10 void Rx_interrupt();
NataliaGaravito 1:899567984090 11
NataliaGaravito 1:899567984090 12 #define uint8_t unsigned char
NataliaGaravito 1:899567984090 13 uint8_t screen[8]={0,0,0,0,0,0,0,0};
NataliaGaravito 1:899567984090 14 uint8_t screen2[8]={0,0,0,0,0,0,0,0};
NataliaGaravito 1:899567984090 15 uint8_t verifica;
NataliaGaravito 1:899567984090 16 uint8_t mascara,mascarax;
NataliaGaravito 1:899567984090 17 int velocidad, pieza,giro;
NataliaGaravito 1:899567984090 18 uint8_t cambio;
NataliaGaravito 0:830a26e0a86c 19
NataliaGaravito 1:899567984090 20 ///////////////////////////////////////////////////////////////////////////////
NataliaGaravito 1:899567984090 21 void sendSPI(uint8_t d1, uint8_t d2)// envio de datos al max
NataliaGaravito 0:830a26e0a86c 22 {
NataliaGaravito 0:830a26e0a86c 23 deviceM.unlock();
NataliaGaravito 0:830a26e0a86c 24 ssel=0;
NataliaGaravito 0:830a26e0a86c 25 deviceM.write(d1);
NataliaGaravito 0:830a26e0a86c 26 deviceM.write(d2);
NataliaGaravito 0:830a26e0a86c 27 ssel=1;
NataliaGaravito 0:830a26e0a86c 28 deviceM.lock();
NataliaGaravito 0:830a26e0a86c 29 };
NataliaGaravito 0:830a26e0a86c 30
NataliaGaravito 1:899567984090 31 ///////////////////////////////////////////////////////////////////////////////
NataliaGaravito 1:899567984090 32 void borrar() // Borrar todos los datos de la matriz
NataliaGaravito 0:830a26e0a86c 33 {
NataliaGaravito 1:899567984090 34 int j;
NataliaGaravito 1:899567984090 35 for(j=1;j<9;j++)
NataliaGaravito 1:899567984090 36 {
NataliaGaravito 1:899567984090 37 sendSPI(j,0);
NataliaGaravito 1:899567984090 38 wait_ms(1);
NataliaGaravito 1:899567984090 39 }
NataliaGaravito 1:899567984090 40 }
NataliaGaravito 1:899567984090 41 ///////////////////////////////////////////////////////////////////////////////
NataliaGaravito 1:899567984090 42 void escribir() // Guarda y compara los datos entrantes a la matriz y los que ya estaban
NataliaGaravito 1:899567984090 43 {
NataliaGaravito 1:899567984090 44 int i,j;
NataliaGaravito 0:830a26e0a86c 45
NataliaGaravito 1:899567984090 46 for(i=0;i<tamano;i++)
NataliaGaravito 1:899567984090 47 {
NataliaGaravito 1:899567984090 48 screen2[posicion-i]=(start[posicion-i] & 128);
NataliaGaravito 1:899567984090 49 start[posicion-i]=start[posicion-i] << 1;
NataliaGaravito 1:899567984090 50 }
NataliaGaravito 1:899567984090 51
NataliaGaravito 1:899567984090 52 for(i=0;i<tamano;i++)
NataliaGaravito 1:899567984090 53 {
NataliaGaravito 1:899567984090 54 screen[posicion-i]=((((screen[posicion-i]>>1) & ~(mascara-1)) | (screen[posicion-i] & (mascara-1))) | screen2[posicion-i] ) | (screen[posicion-i] & (mascara));
NataliaGaravito 1:899567984090 55 }
NataliaGaravito 1:899567984090 56 //enviar
NataliaGaravito 1:899567984090 57 for(j=0;j<8;j++)
NataliaGaravito 1:899567984090 58 {
NataliaGaravito 1:899567984090 59 sendSPI(j+1,screen[j]);
NataliaGaravito 1:899567984090 60 //pc.printf(" posicion %d",j);
NataliaGaravito 1:899567984090 61 //pc.printf("--> %d \n",screen[j]);
NataliaGaravito 1:899567984090 62 }
NataliaGaravito 1:899567984090 63 //pc.printf("----------\n");
NataliaGaravito 1:899567984090 64 }
NataliaGaravito 1:899567984090 65 ///////////////////////////////////////////////////////////////////////////////
NataliaGaravito 1:899567984090 66 int ubicacion() //Limita el ingreso de posicion no mayor a 7
NataliaGaravito 1:899567984090 67 {
NataliaGaravito 1:899567984090 68 int a;
NataliaGaravito 1:899567984090 69 if((posicion_original+tamano) <= 8 && (posicion_original+tamano) >= 0 )
NataliaGaravito 1:899567984090 70 {
NataliaGaravito 1:899567984090 71 a=1;
NataliaGaravito 1:899567984090 72 }
NataliaGaravito 1:899567984090 73 else
NataliaGaravito 1:899567984090 74 {
NataliaGaravito 1:899567984090 75 a=0;
NataliaGaravito 1:899567984090 76 }
NataliaGaravito 1:899567984090 77 return a;
NataliaGaravito 0:830a26e0a86c 78 }
NataliaGaravito 1:899567984090 79 ///////////////////////////////////////////////////////////////////////////////
NataliaGaravito 1:899567984090 80 void analisis() // Verifica la siguiente fila para saber si se puede desplazar
NataliaGaravito 0:830a26e0a86c 81 {
NataliaGaravito 1:899567984090 82 int i;
NataliaGaravito 1:899567984090 83 uint8_t a;
NataliaGaravito 0:830a26e0a86c 84
NataliaGaravito 1:899567984090 85 for(i=0;i<tamano;i++)
NataliaGaravito 1:899567984090 86 {
NataliaGaravito 1:899567984090 87 a=screen[posicion-i] & mascara;
NataliaGaravito 1:899567984090 88 a= a & ((screen[posicion-i]>>1) & ~(mascara-1));
NataliaGaravito 1:899567984090 89
NataliaGaravito 1:899567984090 90 if(mascara==a)
NataliaGaravito 1:899567984090 91 {
NataliaGaravito 1:899567984090 92 i=tamano;
NataliaGaravito 1:899567984090 93 verifica=1;
NataliaGaravito 1:899567984090 94 }
NataliaGaravito 1:899567984090 95 else
NataliaGaravito 1:899567984090 96 {
NataliaGaravito 1:899567984090 97 verifica=0;
NataliaGaravito 0:830a26e0a86c 98 }
NataliaGaravito 1:899567984090 99 }
NataliaGaravito 1:899567984090 100 }
NataliaGaravito 1:899567984090 101 //////////////////////////////////////////////////////////////////////////////
NataliaGaravito 1:899567984090 102 void nuevo () //pide nuevamente los datos de la pieza con los cambios de giro o posicion
NataliaGaravito 1:899567984090 103 {
NataliaGaravito 1:899567984090 104 int k;
NataliaGaravito 1:899567984090 105
NataliaGaravito 1:899567984090 106 for(k=0;k<tamano;k++)//borra la pieza que habia
NataliaGaravito 1:899567984090 107 {
NataliaGaravito 1:899567984090 108 screen[posicion-k]=screen[posicion-k]&(mascara-1);
NataliaGaravito 1:899567984090 109 }
NataliaGaravito 1:899567984090 110 mascara=128;//se coloca 128 para que baje completa la pieza
NataliaGaravito 1:899567984090 111 tamano=0;
NataliaGaravito 1:899567984090 112 posicion=posicion_original;
NataliaGaravito 1:899567984090 113
NataliaGaravito 1:899567984090 114 switch(pieza)//vuelve a colocar los datos de la pieza con los cambios
NataliaGaravito 1:899567984090 115 {
NataliaGaravito 1:899567984090 116 case 0: a(giro); break;
NataliaGaravito 1:899567984090 117 case 1: b(giro); break;
NataliaGaravito 1:899567984090 118 case 2: c(giro); break;
NataliaGaravito 1:899567984090 119 case 3: d(giro); break;
NataliaGaravito 1:899567984090 120 case 4: e(giro); break;
NataliaGaravito 1:899567984090 121 case 5: f(giro); break;
NataliaGaravito 1:899567984090 122 case 6: g(giro); break;
NataliaGaravito 1:899567984090 123 default: pc.printf("Error en figura \n");
NataliaGaravito 1:899567984090 124 }
NataliaGaravito 1:899567984090 125
NataliaGaravito 1:899567984090 126 }
NataliaGaravito 1:899567984090 127 //////////////////////////////////////////////////////////////////////////////
NataliaGaravito 1:899567984090 128 int analisis2()//INTENTO DE RESTRINGIR EL GIRO
NataliaGaravito 1:899567984090 129 {
NataliaGaravito 1:899567984090 130 int b;
NataliaGaravito 1:899567984090 131
NataliaGaravito 1:899567984090 132 if(mascara<=((screen[posicion-1])+1) || mascara<=((screen[posicion+tamano])+1))
NataliaGaravito 1:899567984090 133 {
NataliaGaravito 1:899567984090 134 b=0;
NataliaGaravito 1:899567984090 135 }
NataliaGaravito 1:899567984090 136 else
NataliaGaravito 1:899567984090 137 {
NataliaGaravito 1:899567984090 138 b=1;
NataliaGaravito 1:899567984090 139 }
NataliaGaravito 1:899567984090 140
NataliaGaravito 1:899567984090 141 return b;
NataliaGaravito 1:899567984090 142 }
NataliaGaravito 1:899567984090 143 //////////////////////////////////////////////////////////////////////////////
NataliaGaravito 1:899567984090 144 void giros() //interrupcion cuando se oprime el boton de giro
NataliaGaravito 1:899567984090 145 {
NataliaGaravito 1:899567984090 146 int girox,posicionx;
NataliaGaravito 1:899567984090 147 int a=1;
NataliaGaravito 1:899567984090 148 int b=1;
NataliaGaravito 1:899567984090 149
NataliaGaravito 1:899567984090 150 cambio=1;//entra al cambio de velocidad para la visualizacion dinamica
NataliaGaravito 1:899567984090 151 mascarax=mascara; //guarda la posicion de donde estaba la pieza que es hasta donde se debe hacer la visualizacion
NataliaGaravito 1:899567984090 152 girox=giro;
NataliaGaravito 1:899567984090 153 posicionx=posicion_original;
NataliaGaravito 1:899567984090 154
NataliaGaravito 1:899567984090 155 giro=giro+1;
NataliaGaravito 1:899567984090 156 if(giro>=4) giro=00;//limita el giro
NataliaGaravito 1:899567984090 157 b=analisis2();//LA IDEA ES QUE AQUI ANALICE SI PUEDE GIRARSE
NataliaGaravito 1:899567984090 158 nuevo();//se pide esta funcion para que antes de hacer el analisis de ubicacion coloque los datos nuevos teniendo en cuenta que si sa cambia el giro cambia el tamano
NataliaGaravito 1:899567984090 159 a=ubicacion();
NataliaGaravito 1:899567984090 160 if (a==0 | b==0)///cuando esta fuera de los limites vuelve a mandar los mismos datos de la pieza que estaba
NataliaGaravito 1:899567984090 161 {
NataliaGaravito 1:899567984090 162 giro=girox;
NataliaGaravito 1:899567984090 163 posicion_original=posicionx;
NataliaGaravito 1:899567984090 164 }
NataliaGaravito 1:899567984090 165 nuevo(); //se pide esta funcion nuevamente porque en dado caso de que no este en lo limites se vuelvan a enviar los mismos datos
NataliaGaravito 1:899567984090 166
NataliaGaravito 1:899567984090 167 wait_ms(700);
NataliaGaravito 0:830a26e0a86c 168 }
NataliaGaravito 1:899567984090 169 //////////////////////////////////////////////////////////////////////////////
NataliaGaravito 1:899567984090 170 void pmenos() //interrupcion de poscion menos
NataliaGaravito 1:899567984090 171 {
NataliaGaravito 1:899567984090 172 int girox,posicionx;
NataliaGaravito 1:899567984090 173 int a=1;
NataliaGaravito 1:899567984090 174 int b=1;
NataliaGaravito 1:899567984090 175
NataliaGaravito 1:899567984090 176 cambio=1;//entra al cambio de velocidad para la visualizacion dinamica
NataliaGaravito 1:899567984090 177 mascarax=mascara; //guarda la posicion de donde estaba la pieza que es hasta donde se debe hacer la visualizacion
NataliaGaravito 1:899567984090 178 girox=giro;
NataliaGaravito 1:899567984090 179 posicionx=posicion_original;
NataliaGaravito 0:830a26e0a86c 180
NataliaGaravito 1:899567984090 181 posicion_original=posicion_original-1;
NataliaGaravito 1:899567984090 182 b=analisis2();//LA IDEA ES QUE AQUI ANALICE SI PUEDE CORRERSE
NataliaGaravito 1:899567984090 183 a=ubicacion();
NataliaGaravito 1:899567984090 184 if (a==0 | b==0)//cuando esta fuera de los limites vuelve a mandar los mismos datos de la pieza que estaba
NataliaGaravito 1:899567984090 185 {
NataliaGaravito 1:899567984090 186 giro=girox;
NataliaGaravito 1:899567984090 187 posicion_original=posicionx;
NataliaGaravito 1:899567984090 188 }
NataliaGaravito 1:899567984090 189 nuevo();// solo se solicita una vez esta funcion ya que lo unico que varia es la posicion
NataliaGaravito 1:899567984090 190 wait_ms(500);
NataliaGaravito 1:899567984090 191 }
NataliaGaravito 1:899567984090 192 //////////////////////////////////////////////////////////////////////////////
NataliaGaravito 1:899567984090 193 void pmas() //interrupcion posicion mas
NataliaGaravito 1:899567984090 194 {
NataliaGaravito 1:899567984090 195 int girox,posicionx;
NataliaGaravito 1:899567984090 196 int a=1;
NataliaGaravito 1:899567984090 197 int b=1;
NataliaGaravito 1:899567984090 198
NataliaGaravito 1:899567984090 199 cambio=1;//entra al cambio de velocidad para la visualizacion dinamica
NataliaGaravito 1:899567984090 200 mascarax=mascara; //guarda la posicion de donde estaba la pieza que es hasta donde se debe hacer la visualizacion
NataliaGaravito 1:899567984090 201 girox=giro;
NataliaGaravito 1:899567984090 202 posicionx=posicion_original;
NataliaGaravito 1:899567984090 203
NataliaGaravito 1:899567984090 204 posicion_original=posicion_original+1;
NataliaGaravito 1:899567984090 205 b=analisis2();//LA IDEA ES QUE AQUI ANALICE SI PUEDE CORRERSE
NataliaGaravito 1:899567984090 206 a=ubicacion();
NataliaGaravito 1:899567984090 207
NataliaGaravito 1:899567984090 208 if (a==0 | b==0)//cuando esta fuera de los limites vuelve a mandar los mismos datos de la pieza que estaba
NataliaGaravito 1:899567984090 209 {
NataliaGaravito 1:899567984090 210 giro=girox;
NataliaGaravito 1:899567984090 211 posicion_original=posicionx;
NataliaGaravito 1:899567984090 212 }
NataliaGaravito 1:899567984090 213 nuevo();
NataliaGaravito 1:899567984090 214 wait_ms(500);
NataliaGaravito 1:899567984090 215 }
NataliaGaravito 1:899567984090 216 //////////////////////////////////////////////////////////////////////////////
NataliaGaravito 1:899567984090 217 void play () // Funcion encargada de determinar el estado de la mascara
NataliaGaravito 1:899567984090 218 {
NataliaGaravito 1:899567984090 219 cambio=0;
NataliaGaravito 1:899567984090 220 int a=1;
NataliaGaravito 1:899567984090 221 mascara=128;
NataliaGaravito 1:899567984090 222 velocidad=1;
NataliaGaravito 1:899567984090 223 a=ubicacion();
NataliaGaravito 0:830a26e0a86c 224
NataliaGaravito 1:899567984090 225 while(a==1)
NataliaGaravito 1:899567984090 226 {
NataliaGaravito 1:899567984090 227 analisis();
NataliaGaravito 1:899567984090 228
NataliaGaravito 1:899567984090 229 if (verifica==1)a=0;
NataliaGaravito 1:899567984090 230 else
NataliaGaravito 1:899567984090 231 {
NataliaGaravito 1:899567984090 232
NataliaGaravito 1:899567984090 233 if(cambio==1)//cambio de velocidad para poder hacer visualizacion dinamica cada vez que se presiona un pulsador
NataliaGaravito 1:899567984090 234 {
NataliaGaravito 1:899567984090 235 if(mascarax!=mascara)velocidad=0;//mientras cae a la posicion que estaba va a tener esta velocidad
NataliaGaravito 1:899567984090 236 else
NataliaGaravito 1:899567984090 237 {
NataliaGaravito 1:899567984090 238 velocidad=1;
NataliaGaravito 1:899567984090 239 cambio=0;
NataliaGaravito 1:899567984090 240 }
NataliaGaravito 1:899567984090 241 }
NataliaGaravito 1:899567984090 242 else velocidad=1;
NataliaGaravito 1:899567984090 243
Mateom0104 2:d70bfc78f62d 244 // girop.rise(&giros);//interrupcion giro
Mateom0104 2:d70bfc78f62d 245 //posicionmenos.rise(&pmenos);//interrupcion posicion menos
Mateom0104 2:d70bfc78f62d 246 //posicionmas.rise(&pmas);//interrupcion posicion mas
NataliaGaravito 1:899567984090 247
NataliaGaravito 1:899567984090 248 escribir();
NataliaGaravito 1:899567984090 249 mascara=mascara/2;
NataliaGaravito 1:899567984090 250 wait(velocidad);
NataliaGaravito 1:899567984090 251 }
NataliaGaravito 1:899567984090 252 }
NataliaGaravito 0:830a26e0a86c 253 }
NataliaGaravito 1:899567984090 254 ///////////////////////////////////////////////////////////////////////////////
NataliaGaravito 1:899567984090 255 int main() { // fucnion principal
NataliaGaravito 1:899567984090 256
Mateom0104 2:d70bfc78f62d 257 pc.baud(9600);
Mateom0104 2:d70bfc78f62d 258 pc.attach(&Rx_interrupt, Serial::RxIrq);
Mateom0104 2:d70bfc78f62d 259
NataliaGaravito 1:899567984090 260 sendSPI(0x0c,1);
NataliaGaravito 1:899567984090 261 sendSPI(0x0F,1);
NataliaGaravito 1:899567984090 262 wait (1);
NataliaGaravito 1:899567984090 263
NataliaGaravito 1:899567984090 264 sendSPI(0x0F,0);
NataliaGaravito 1:899567984090 265 wait (1);
NataliaGaravito 1:899567984090 266 sendSPI(0xB,0x7);
NataliaGaravito 1:899567984090 267 borrar();
NataliaGaravito 1:899567984090 268 int inicio,fin;
NataliaGaravito 1:899567984090 269
NataliaGaravito 1:899567984090 270 while(1){
NataliaGaravito 1:899567984090 271 //pide los datos por el serial
Mateom0104 2:d70bfc78f62d 272 inicio=60;
Mateom0104 2:d70bfc78f62d 273 pieza=10;
Mateom0104 2:d70bfc78f62d 274
Mateom0104 2:d70bfc78f62d 275
Mateom0104 2:d70bfc78f62d 276 while( pieza>6)
Mateom0104 2:d70bfc78f62d 277 {
Mateom0104 2:d70bfc78f62d 278 pieza=rand ()% 16;
Mateom0104 2:d70bfc78f62d 279 pc.printf("%d ",pieza);
Mateom0104 2:d70bfc78f62d 280 }
Mateom0104 2:d70bfc78f62d 281 posicion=3;
Mateom0104 2:d70bfc78f62d 282 giro = 0;
Mateom0104 2:d70bfc78f62d 283
Mateom0104 2:d70bfc78f62d 284 fin=62;
NataliaGaravito 1:899567984090 285
NataliaGaravito 1:899567984090 286 if((inicio==60) && (fin==62))
NataliaGaravito 1:899567984090 287 {
NataliaGaravito 1:899567984090 288 switch(pieza)
NataliaGaravito 1:899567984090 289 {
NataliaGaravito 1:899567984090 290 case 0: a(giro); play(); break;
NataliaGaravito 1:899567984090 291 case 1: b(giro); play(); break;
NataliaGaravito 1:899567984090 292 case 2: c(giro); play(); break;
NataliaGaravito 1:899567984090 293 case 3: d(giro); play(); break;
NataliaGaravito 1:899567984090 294 case 4: e(giro); play(); break;
NataliaGaravito 1:899567984090 295 case 5: f(giro); play(); break;
NataliaGaravito 1:899567984090 296 case 6: g(giro); play(); break;
NataliaGaravito 1:899567984090 297 default: pc.printf("Error en figura \n");
NataliaGaravito 1:899567984090 298 }
NataliaGaravito 1:899567984090 299 }
NataliaGaravito 1:899567984090 300 }
Mateom0104 2:d70bfc78f62d 301 }
Mateom0104 2:d70bfc78f62d 302
Mateom0104 2:d70bfc78f62d 303
Mateom0104 2:d70bfc78f62d 304 void Rx_interrupt() {
Mateom0104 2:d70bfc78f62d 305
Mateom0104 2:d70bfc78f62d 306 char d = pc.getc();
Mateom0104 2:d70bfc78f62d 307 pc.printf("numero %d\n",d);
Mateom0104 2:d70bfc78f62d 308
Mateom0104 2:d70bfc78f62d 309
Mateom0104 2:d70bfc78f62d 310 switch(d)
Mateom0104 2:d70bfc78f62d 311 {
Mateom0104 2:d70bfc78f62d 312 case 97: pmenos(); break;
Mateom0104 2:d70bfc78f62d 313 case 100: pmas(); break;
Mateom0104 2:d70bfc78f62d 314 case 119: giros(); break;
Mateom0104 2:d70bfc78f62d 315 default: pc.printf("Error \n");
Mateom0104 2:d70bfc78f62d 316
Mateom0104 2:d70bfc78f62d 317 }
Mateom0104 2:d70bfc78f62d 318
Mateom0104 2:d70bfc78f62d 319 return;
Mateom0104 2:d70bfc78f62d 320 }