Yosef Guevara Salamanca
/
carros
juego de carros con obstaculos
carros.cpp@3:97c4f33ed501, 2018-11-21 (annotated)
- Committer:
- djinn77
- Date:
- Wed Nov 21 21:20:59 2018 +0000
- Revision:
- 3:97c4f33ed501
- Parent:
- 2:4ec303de2e24
funcionando;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
djinn77 | 0:f5b1c27566c6 | 1 | #include "mbed.h" |
djinn77 | 0:f5b1c27566c6 | 2 | #include "vehiculos.h" |
djinn77 | 0:f5b1c27566c6 | 3 | |
djinn77 | 0:f5b1c27566c6 | 4 | // Definicion de parametros de comunicacion |
djinn77 | 0:f5b1c27566c6 | 5 | |
djinn77 | 0:f5b1c27566c6 | 6 | Serial pc(USBTX,USBRX); |
djinn77 | 0:f5b1c27566c6 | 7 | SPI deviceM(PB_5, PB_4, PB_3); //D4(gris), Ninguno, D3(azul) |
djinn77 | 0:f5b1c27566c6 | 8 | DigitalOut ssel (PA_4); //A2(morado) |
djinn77 | 1:fe16249d087e | 9 | Ticker tp; |
djinn77 | 3:97c4f33ed501 | 10 | InterruptIn pulsador_abj(D8); // Lee el boton del jostick |
djinn77 | 1:fe16249d087e | 11 | |
djinn77 | 1:fe16249d087e | 12 | int printjugador =1; |
djinn77 | 0:f5b1c27566c6 | 13 | |
djinn77 | 0:f5b1c27566c6 | 14 | // Definiendo Botones |
djinn77 | 1:fe16249d087e | 15 | |
djinn77 | 0:f5b1c27566c6 | 16 | AnalogIn vry(A3); |
djinn77 | 0:f5b1c27566c6 | 17 | AnalogIn vrx(A4); |
djinn77 | 0:f5b1c27566c6 | 18 | DigitalIn sw(A5); |
djinn77 | 0:f5b1c27566c6 | 19 | |
djinn77 | 0:f5b1c27566c6 | 20 | // Definicion de Funciones |
djinn77 | 1:fe16249d087e | 21 | |
djinn77 | 1:fe16249d087e | 22 | void sendSPI(); |
djinn77 | 1:fe16249d087e | 23 | void inicializar_matriz(); |
djinn77 | 1:fe16249d087e | 24 | void desplazar_izq(); |
djinn77 | 1:fe16249d087e | 25 | void desplazar_der(); |
djinn77 | 1:fe16249d087e | 26 | void selec_nivel(); |
djinn77 | 1:fe16249d087e | 27 | void desplazar(); |
djinn77 | 1:fe16249d087e | 28 | void selec(); |
djinn77 | 0:f5b1c27566c6 | 29 | void juego(); |
djinn77 | 1:fe16249d087e | 30 | void printstatus(); |
djinn77 | 1:fe16249d087e | 31 | |
djinn77 | 0:f5b1c27566c6 | 32 | |
djinn77 | 0:f5b1c27566c6 | 33 | // Definicion de Variables |
djinn77 | 0:f5b1c27566c6 | 34 | |
djinn77 | 1:fe16249d087e | 35 | uint16_t* nivel; |
djinn77 | 3:97c4f33ed501 | 36 | uint16_t* fail; |
djinn77 | 1:fe16249d087e | 37 | uint16_t* jugador; |
djinn77 | 1:fe16249d087e | 38 | uint16_t* camino; |
djinn77 | 1:fe16249d087e | 39 | uint8_t enable_abj=1; |
djinn77 | 1:fe16249d087e | 40 | uint8_t enable_der=1; |
djinn77 | 1:fe16249d087e | 41 | uint8_t enable_izq=1; |
djinn77 | 1:fe16249d087e | 42 | uint8_t figura; |
djinn77 | 1:fe16249d087e | 43 | uint8_t pos; |
djinn77 | 1:fe16249d087e | 44 | uint8_t giro; |
djinn77 | 1:fe16249d087e | 45 | uint8_t posicion_fig=3; |
djinn77 | 1:fe16249d087e | 46 | float velocidad = 0.4; |
djinn77 | 0:f5b1c27566c6 | 47 | |
djinn77 | 0:f5b1c27566c6 | 48 | |
djinn77 | 0:f5b1c27566c6 | 49 | void sendSPI(uint8_t d1, uint8_t d2) |
djinn77 | 0:f5b1c27566c6 | 50 | { |
djinn77 | 0:f5b1c27566c6 | 51 | deviceM.unlock(); |
djinn77 | 0:f5b1c27566c6 | 52 | ssel=0; |
djinn77 | 0:f5b1c27566c6 | 53 | deviceM.write(d1); |
djinn77 | 0:f5b1c27566c6 | 54 | deviceM.write(d2); |
djinn77 | 0:f5b1c27566c6 | 55 | ssel=1; |
djinn77 | 0:f5b1c27566c6 | 56 | deviceM.lock(); |
djinn77 | 0:f5b1c27566c6 | 57 | }; |
djinn77 | 0:f5b1c27566c6 | 58 | |
djinn77 | 0:f5b1c27566c6 | 59 | |
djinn77 | 0:f5b1c27566c6 | 60 | void inicializar_matriz(){ |
djinn77 | 0:f5b1c27566c6 | 61 | sendSPI(0x0c,1); |
djinn77 | 0:f5b1c27566c6 | 62 | sendSPI(0x0b,7); |
djinn77 | 0:f5b1c27566c6 | 63 | sendSPI(0x09,0); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ |
djinn77 | 0:f5b1c27566c6 | 64 | sendSPI(0x0A,0x00); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ |
djinn77 | 0:f5b1c27566c6 | 65 | |
djinn77 | 0:f5b1c27566c6 | 66 | int i; |
djinn77 | 0:f5b1c27566c6 | 67 | for (i=0;i<2;i++){ |
djinn77 | 0:f5b1c27566c6 | 68 | sendSPI(0x0F,1); |
djinn77 | 0:f5b1c27566c6 | 69 | wait (0.5); |
djinn77 | 0:f5b1c27566c6 | 70 | sendSPI(0x0F,0); |
djinn77 | 0:f5b1c27566c6 | 71 | wait (0.5); |
djinn77 | 0:f5b1c27566c6 | 72 | } |
djinn77 | 0:f5b1c27566c6 | 73 | |
djinn77 | 0:f5b1c27566c6 | 74 | } |
djinn77 | 0:f5b1c27566c6 | 75 | |
djinn77 | 1:fe16249d087e | 76 | int main() { |
djinn77 | 1:fe16249d087e | 77 | |
djinn77 | 1:fe16249d087e | 78 | pc.baud(38400); |
djinn77 | 1:fe16249d087e | 79 | inicializar_matriz(); |
djinn77 | 1:fe16249d087e | 80 | |
djinn77 | 1:fe16249d087e | 81 | while(1){ |
djinn77 | 0:f5b1c27566c6 | 82 | |
djinn77 | 1:fe16249d087e | 83 | selec(); |
djinn77 | 1:fe16249d087e | 84 | |
djinn77 | 1:fe16249d087e | 85 | } |
djinn77 | 1:fe16249d087e | 86 | |
djinn77 | 1:fe16249d087e | 87 | } |
djinn77 | 1:fe16249d087e | 88 | |
djinn77 | 1:fe16249d087e | 89 | |
djinn77 | 1:fe16249d087e | 90 | |
djinn77 | 1:fe16249d087e | 91 | void selec(){ |
djinn77 | 2:4ec303de2e24 | 92 | |
djinn77 | 1:fe16249d087e | 93 | figura=rand()%4; |
djinn77 | 2:4ec303de2e24 | 94 | |
djinn77 | 1:fe16249d087e | 95 | switch(figura){ //Este switch escoje la figura con que trabajaar |
djinn77 | 1:fe16249d087e | 96 | case 0: // carro derecha |
djinn77 | 1:fe16249d087e | 97 | nivel = CR_DER; |
djinn77 | 1:fe16249d087e | 98 | break; |
djinn77 | 1:fe16249d087e | 99 | case 1: // carro izquierda |
djinn77 | 1:fe16249d087e | 100 | nivel = CR_IZQ; |
djinn77 | 1:fe16249d087e | 101 | break; |
djinn77 | 1:fe16249d087e | 102 | case 2: // caja derecha |
djinn77 | 1:fe16249d087e | 103 | nivel = CJ_DER; |
djinn77 | 1:fe16249d087e | 104 | break; |
djinn77 | 1:fe16249d087e | 105 | case 3: // caja izquierda |
djinn77 | 1:fe16249d087e | 106 | nivel = CJ_IZQ; |
djinn77 | 1:fe16249d087e | 107 | break; |
djinn77 | 1:fe16249d087e | 108 | } |
djinn77 | 1:fe16249d087e | 109 | |
djinn77 | 1:fe16249d087e | 110 | juego(); |
djinn77 | 1:fe16249d087e | 111 | |
djinn77 | 1:fe16249d087e | 112 | } |
djinn77 | 1:fe16249d087e | 113 | |
djinn77 | 3:97c4f33ed501 | 114 | void aum_velocidad_tx(){ |
djinn77 | 3:97c4f33ed501 | 115 | velocidad=0.2; |
djinn77 | 3:97c4f33ed501 | 116 | } |
djinn77 | 3:97c4f33ed501 | 117 | |
djinn77 | 1:fe16249d087e | 118 | void juego(){ |
djinn77 | 1:fe16249d087e | 119 | |
djinn77 | 1:fe16249d087e | 120 | jugador=MICARRO; |
djinn77 | 1:fe16249d087e | 121 | camino= CALLE; |
djinn77 | 3:97c4f33ed501 | 122 | fail=EQUIS; |
djinn77 | 2:4ec303de2e24 | 123 | //tp.attach(&printstatus,0.2); |
djinn77 | 1:fe16249d087e | 124 | enable_abj=1; |
djinn77 | 0:f5b1c27566c6 | 125 | enable_der=1; |
djinn77 | 0:f5b1c27566c6 | 126 | enable_izq=1; |
djinn77 | 1:fe16249d087e | 127 | // Declaracion de Variables de lectura del jostick |
djinn77 | 1:fe16249d087e | 128 | float meas_vx; |
djinn77 | 2:4ec303de2e24 | 129 | int i=0; |
djinn77 | 3:97c4f33ed501 | 130 | |
djinn77 | 2:4ec303de2e24 | 131 | while(enable_abj){ |
djinn77 | 2:4ec303de2e24 | 132 | |
djinn77 | 2:4ec303de2e24 | 133 | int j=1; // inicia el contador j en 1 |
djinn77 | 2:4ec303de2e24 | 134 | |
djinn77 | 2:4ec303de2e24 | 135 | while(j<=8){ //se encarga de seleccionar que posicion del vector imprimira |
djinn77 | 2:4ec303de2e24 | 136 | |
djinn77 | 2:4ec303de2e24 | 137 | sendSPI(j, jugador[j-1]|(nivel[j-1]>>i)|camino[j-1]); //Imprime el resultado de aplicar OR a la memoria y al desplamamiento de imprimir |
djinn77 | 2:4ec303de2e24 | 138 | //wait(0.1); // Activar este wait para pruebas de desplazamiento y captura de los datos |
djinn77 | 2:4ec303de2e24 | 139 | |
djinn77 | 3:97c4f33ed501 | 140 | if(i==13){ //Detiene el desplazamiento cuando los bits tocan fondo, |
djinn77 | 2:4ec303de2e24 | 141 | enable_abj=0;// desabilitador del ciclo while |
djinn77 | 2:4ec303de2e24 | 142 | } |
djinn77 | 3:97c4f33ed501 | 143 | if((jugador[j-1]&(nivel[j-1]>>i))!=0){ |
djinn77 | 3:97c4f33ed501 | 144 | |
djinn77 | 3:97c4f33ed501 | 145 | NVIC_SystemReset(); |
djinn77 | 3:97c4f33ed501 | 146 | |
djinn77 | 3:97c4f33ed501 | 147 | } |
djinn77 | 2:4ec303de2e24 | 148 | j++; |
djinn77 | 2:4ec303de2e24 | 149 | } |
djinn77 | 2:4ec303de2e24 | 150 | wait(velocidad); // espera para tomar el otro valor de lectura |
djinn77 | 2:4ec303de2e24 | 151 | // ----------------------Lectura del jostick----------------------------- |
djinn77 | 2:4ec303de2e24 | 152 | |
djinn77 | 2:4ec303de2e24 | 153 | // Lectura de parametros del jostick |
djinn77 | 2:4ec303de2e24 | 154 | meas_vx = vrx.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje X |
djinn77 | 1:fe16249d087e | 155 | |
djinn77 | 1:fe16249d087e | 156 | if (meas_vx < 1600 && enable_izq) |
djinn77 | 0:f5b1c27566c6 | 157 | desplazar_izq(); |
djinn77 | 1:fe16249d087e | 158 | else if (meas_vx > 1700 && enable_der) |
djinn77 | 0:f5b1c27566c6 | 159 | desplazar_der(); |
djinn77 | 2:4ec303de2e24 | 160 | i++; |
djinn77 | 3:97c4f33ed501 | 161 | pulsador_abj.fall(&aum_velocidad_tx); |
djinn77 | 1:fe16249d087e | 162 | } |
djinn77 | 2:4ec303de2e24 | 163 | } |
djinn77 | 1:fe16249d087e | 164 | |
djinn77 | 1:fe16249d087e | 165 | void desplazar_izq(){ |
djinn77 | 1:fe16249d087e | 166 | |
djinn77 | 1:fe16249d087e | 167 | enable_der=1; |
djinn77 | 1:fe16249d087e | 168 | posicion_fig--; |
djinn77 | 1:fe16249d087e | 169 | |
djinn77 | 1:fe16249d087e | 170 | |
djinn77 | 1:fe16249d087e | 171 | if(posicion_fig==2) |
djinn77 | 1:fe16249d087e | 172 | enable_izq=0; |
djinn77 | 1:fe16249d087e | 173 | |
djinn77 | 1:fe16249d087e | 174 | |
djinn77 | 1:fe16249d087e | 175 | int izq = jugador[0]; |
djinn77 | 1:fe16249d087e | 176 | for(int i= 0; i<8;i++){ |
djinn77 | 1:fe16249d087e | 177 | jugador[i]=jugador[i+1]; |
djinn77 | 1:fe16249d087e | 178 | } |
djinn77 | 1:fe16249d087e | 179 | jugador[7] = izq; |
djinn77 | 1:fe16249d087e | 180 | |
djinn77 | 0:f5b1c27566c6 | 181 | } |
djinn77 | 0:f5b1c27566c6 | 182 | |
djinn77 | 0:f5b1c27566c6 | 183 | void desplazar_der(){ |
djinn77 | 1:fe16249d087e | 184 | |
djinn77 | 1:fe16249d087e | 185 | enable_izq=1; |
djinn77 | 1:fe16249d087e | 186 | posicion_fig++; |
djinn77 | 1:fe16249d087e | 187 | |
djinn77 | 1:fe16249d087e | 188 | if(posicion_fig==5) |
djinn77 | 1:fe16249d087e | 189 | enable_der=0; |
djinn77 | 1:fe16249d087e | 190 | |
djinn77 | 1:fe16249d087e | 191 | int der = jugador[7]; |
djinn77 | 1:fe16249d087e | 192 | for(int i= 7; i>=0;i--){ |
djinn77 | 1:fe16249d087e | 193 | jugador[i]=jugador[i-1]; |
djinn77 | 1:fe16249d087e | 194 | } |
djinn77 | 1:fe16249d087e | 195 | jugador[0] = der; |
djinn77 | 1:fe16249d087e | 196 | |
djinn77 | 0:f5b1c27566c6 | 197 | } |
djinn77 | 1:fe16249d087e | 198 | |
djinn77 | 0:f5b1c27566c6 | 199 | |
djinn77 | 1:fe16249d087e | 200 | void printstatus() |
djinn77 | 1:fe16249d087e | 201 | { |
djinn77 | 1:fe16249d087e | 202 | |
djinn77 | 1:fe16249d087e | 203 | for(int j= 1; j<=8;j++) |
djinn77 | 1:fe16249d087e | 204 | if (printjugador) |
djinn77 | 1:fe16249d087e | 205 | sendSPI(j, nivel[j-1]|jugador[j-1]|camino[j-1]); |
djinn77 | 1:fe16249d087e | 206 | else |
djinn77 | 1:fe16249d087e | 207 | sendSPI(j, nivel[j-1]|camino[j-1]); |
djinn77 | 1:fe16249d087e | 208 | printjugador =!printjugador; |
djinn77 | 2:4ec303de2e24 | 209 | |
djinn77 | 2:4ec303de2e24 | 210 | for ( int i=1;i<13;i++){ |
djinn77 | 2:4ec303de2e24 | 211 | for( int l=0;l<8;l++){ |
djinn77 | 2:4ec303de2e24 | 212 | nivel[l]=nivel[l]<<i; |
djinn77 | 2:4ec303de2e24 | 213 | |
djinn77 | 2:4ec303de2e24 | 214 | } |
djinn77 | 2:4ec303de2e24 | 215 | } |
djinn77 | 2:4ec303de2e24 | 216 | |
djinn77 | 1:fe16249d087e | 217 | } |