Juego de Simon

Dependencies:   mbed

Committer:
tzuran
Date:
Wed May 29 22:07:07 2019 +0000
Revision:
0:89c9fef3ff83
Version final

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tzuran 0:89c9fef3ff83 1 #include "mbed.h"
tzuran 0:89c9fef3ff83 2 #include "math.h"
tzuran 0:89c9fef3ff83 3
tzuran 0:89c9fef3ff83 4
tzuran 0:89c9fef3ff83 5 // TIEMPOS INICIALES DEL SIMON
tzuran 0:89c9fef3ff83 6 int button_time_out = 5000;
tzuran 0:89c9fef3ff83 7 int time_led_on = 500;
tzuran 0:89c9fef3ff83 8 int time_led_off = 500;
tzuran 0:89c9fef3ff83 9
tzuran 0:89c9fef3ff83 10 // SALIDA LED RGB
tzuran 0:89c9fef3ff83 11 DigitalOut r(LED_RED);
tzuran 0:89c9fef3ff83 12 DigitalOut g(LED_GREEN);
tzuran 0:89c9fef3ff83 13 DigitalOut b(LED_BLUE);
tzuran 0:89c9fef3ff83 14
tzuran 0:89c9fef3ff83 15 // LECTURA DE RUIDO SRAND
tzuran 0:89c9fef3ff83 16 AnalogIn ain(A0);
tzuran 0:89c9fef3ff83 17
tzuran 0:89c9fef3ff83 18 // ENTRADA DE BOTONES
tzuran 0:89c9fef3ff83 19 DigitalIn boton_r(PTC1);
tzuran 0:89c9fef3ff83 20 DigitalIn boton_g(PTC2);
tzuran 0:89c9fef3ff83 21 DigitalIn boton_b(PTB3);
tzuran 0:89c9fef3ff83 22 DigitalIn boton_y(PTB2);
tzuran 0:89c9fef3ff83 23
tzuran 0:89c9fef3ff83 24 // TICKERS
tzuran 0:89c9fef3ff83 25 Ticker cont;
tzuran 0:89c9fef3ff83 26 Ticker muestreo_botones;
tzuran 0:89c9fef3ff83 27
tzuran 0:89c9fef3ff83 28 int aleatorio(int min, int max); // FUNCION QUE DEVUELVE UN NUMERO ALEATORIO ENTRE min Y max
tzuran 0:89c9fef3ff83 29
tzuran 0:89c9fef3ff83 30 void color(int c); // FUNCION QUE PRENDE EL LED RGB EN UN COLOR SEGUN EL NUMERO c DE ENTRADA
tzuran 0:89c9fef3ff83 31
tzuran 0:89c9fef3ff83 32 // PULSAR BOTONES
tzuran 0:89c9fef3ff83 33 int botones();
tzuran 0:89c9fef3ff83 34 char botones_sr = 0; //0b0000 - YBGR
tzuran 0:89c9fef3ff83 35 void entrada_botones();
tzuran 0:89c9fef3ff83 36
tzuran 0:89c9fef3ff83 37 // CONTADOR (1mS)
tzuran 0:89c9fef3ff83 38 unsigned int cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 39 void contador();
tzuran 0:89c9fef3ff83 40
tzuran 0:89c9fef3ff83 41 // SECUENCIA
tzuran 0:89c9fef3ff83 42 char secuencia[25] = {0}; // VECTOR QUE CONTIENE LA SECUENCIA DE COLORES
tzuran 0:89c9fef3ff83 43 int cuenta_secuencia = 0; // VARIABLE QUE INDICA CUAN LARGA ES LA SECUENCIA (aumenta cada nivel)
tzuran 0:89c9fef3ff83 44
tzuran 0:89c9fef3ff83 45 // MAQUINA DE ESTADOS GENERAL
tzuran 0:89c9fef3ff83 46 enum ME_GENERAL_ESTADOS {INICIO1, MOSTRAR, APRETAR, STOP1, GANASTE, DELAY1, DELAY2};
tzuran 0:89c9fef3ff83 47 ME_GENERAL_ESTADOS ME_GENERAL_ESTADO;
tzuran 0:89c9fef3ff83 48 int mostrando = 0;
tzuran 0:89c9fef3ff83 49 int equivocado = 0;
tzuran 0:89c9fef3ff83 50 int apretando = 0;
tzuran 0:89c9fef3ff83 51 int ganar = 0;
tzuran 0:89c9fef3ff83 52 void ME_GENERAL();
tzuran 0:89c9fef3ff83 53
tzuran 0:89c9fef3ff83 54 // MAQUINA DE ESTADOS MOSTRAR
tzuran 0:89c9fef3ff83 55 enum ME_MOSTRAR_ESTADOS {INICIO2, ON, OFF};
tzuran 0:89c9fef3ff83 56 ME_MOSTRAR_ESTADOS ME_MOSTRAR_ESTADO;
tzuran 0:89c9fef3ff83 57 int mostrando_secuencia = 0;
tzuran 0:89c9fef3ff83 58 void ME_MOSTRAR();
tzuran 0:89c9fef3ff83 59
tzuran 0:89c9fef3ff83 60 // MAQUINA DE ESTADOS APRETAR
tzuran 0:89c9fef3ff83 61 enum ME_APRETAR_ESTADOS {INICIO3, ESPERO_BOTON, DELAY, DELAY3};
tzuran 0:89c9fef3ff83 62 ME_APRETAR_ESTADOS ME_APRETAR_ESTADO;
tzuran 0:89c9fef3ff83 63 int esperando_secuencia = 0;
tzuran 0:89c9fef3ff83 64 int esperando_boton = 0;
tzuran 0:89c9fef3ff83 65 void ME_APRETAR();
tzuran 0:89c9fef3ff83 66 int boton_apretado = 0;
tzuran 0:89c9fef3ff83 67
tzuran 0:89c9fef3ff83 68 int main()
tzuran 0:89c9fef3ff83 69 {
tzuran 0:89c9fef3ff83 70 srand(int(ain * 1000)); // SE USA EL RUIDO LEIDO
tzuran 0:89c9fef3ff83 71
tzuran 0:89c9fef3ff83 72 cont.attach(&contador, 0.001f); // CONTADOR 1ms
tzuran 0:89c9fef3ff83 73 muestreo_botones.attach(&entrada_botones, 0.01); // MUESTREO DE BOTONES 10ms
tzuran 0:89c9fef3ff83 74
tzuran 0:89c9fef3ff83 75 //ESTADOS INICIALES MAQUINAS DE ESTADO
tzuran 0:89c9fef3ff83 76
tzuran 0:89c9fef3ff83 77 ME_GENERAL_ESTADO = INICIO1;
tzuran 0:89c9fef3ff83 78 ME_MOSTRAR_ESTADO = INICIO2;
tzuran 0:89c9fef3ff83 79 ME_APRETAR_ESTADO = INICIO3;
tzuran 0:89c9fef3ff83 80
tzuran 0:89c9fef3ff83 81 //PULLUPS PARA LAS ENTRADAS
tzuran 0:89c9fef3ff83 82
tzuran 0:89c9fef3ff83 83 boton_r.mode(PullUp);
tzuran 0:89c9fef3ff83 84 boton_g.mode(PullUp);
tzuran 0:89c9fef3ff83 85 boton_b.mode(PullUp);
tzuran 0:89c9fef3ff83 86 boton_y.mode(PullUp);
tzuran 0:89c9fef3ff83 87
tzuran 0:89c9fef3ff83 88 while (true) {
tzuran 0:89c9fef3ff83 89 ME_GENERAL();
tzuran 0:89c9fef3ff83 90 ME_MOSTRAR();
tzuran 0:89c9fef3ff83 91 ME_APRETAR();
tzuran 0:89c9fef3ff83 92 }
tzuran 0:89c9fef3ff83 93 }
tzuran 0:89c9fef3ff83 94
tzuran 0:89c9fef3ff83 95 int aleatorio(int min, int max)
tzuran 0:89c9fef3ff83 96 {
tzuran 0:89c9fef3ff83 97 return rand() % (max - min + 1) + min;
tzuran 0:89c9fef3ff83 98 }
tzuran 0:89c9fef3ff83 99
tzuran 0:89c9fef3ff83 100 void color(int c)
tzuran 0:89c9fef3ff83 101 {
tzuran 0:89c9fef3ff83 102 switch(c) {
tzuran 0:89c9fef3ff83 103 case 0: //APAGADO
tzuran 0:89c9fef3ff83 104 r = 1;
tzuran 0:89c9fef3ff83 105 g = 1;
tzuran 0:89c9fef3ff83 106 b = 1;
tzuran 0:89c9fef3ff83 107 break;
tzuran 0:89c9fef3ff83 108 case 1: //ROJO
tzuran 0:89c9fef3ff83 109 r = 0;
tzuran 0:89c9fef3ff83 110 g = 1;
tzuran 0:89c9fef3ff83 111 b = 1;
tzuran 0:89c9fef3ff83 112 break;
tzuran 0:89c9fef3ff83 113 case 2: //VERDE
tzuran 0:89c9fef3ff83 114 r = 1;
tzuran 0:89c9fef3ff83 115 g = 0;
tzuran 0:89c9fef3ff83 116 b = 1;
tzuran 0:89c9fef3ff83 117 break;
tzuran 0:89c9fef3ff83 118 case 3: //AZUL
tzuran 0:89c9fef3ff83 119 r = 1;
tzuran 0:89c9fef3ff83 120 g = 1;
tzuran 0:89c9fef3ff83 121 b = 0;
tzuran 0:89c9fef3ff83 122 break;
tzuran 0:89c9fef3ff83 123 case 4: //AMARILLO
tzuran 0:89c9fef3ff83 124 r = 0;
tzuran 0:89c9fef3ff83 125 g = 0;
tzuran 0:89c9fef3ff83 126 b = 1;
tzuran 0:89c9fef3ff83 127 break;
tzuran 0:89c9fef3ff83 128 case 5: //BLANCO
tzuran 0:89c9fef3ff83 129 r = 0;
tzuran 0:89c9fef3ff83 130 g = 0;
tzuran 0:89c9fef3ff83 131 b = 0;
tzuran 0:89c9fef3ff83 132 break;
tzuran 0:89c9fef3ff83 133 }
tzuran 0:89c9fef3ff83 134 }
tzuran 0:89c9fef3ff83 135
tzuran 0:89c9fef3ff83 136 int botones() // LECTURA DE LA VARIABLE botones_sr
tzuran 0:89c9fef3ff83 137 {
tzuran 0:89c9fef3ff83 138 if((botones_sr & 0x01) != 0)
tzuran 0:89c9fef3ff83 139 return 1;
tzuran 0:89c9fef3ff83 140 else if((botones_sr & 0x02) != 0)
tzuran 0:89c9fef3ff83 141 return 2;
tzuran 0:89c9fef3ff83 142 else if((botones_sr & 0x04) != 0)
tzuran 0:89c9fef3ff83 143 return 3;
tzuran 0:89c9fef3ff83 144 else if((botones_sr & 0x08) != 0)
tzuran 0:89c9fef3ff83 145 return 4;
tzuran 0:89c9fef3ff83 146 else
tzuran 0:89c9fef3ff83 147 return 0;
tzuran 0:89c9fef3ff83 148 }
tzuran 0:89c9fef3ff83 149
tzuran 0:89c9fef3ff83 150 void contador()
tzuran 0:89c9fef3ff83 151 {
tzuran 0:89c9fef3ff83 152 cntTimeOut_1++;
tzuran 0:89c9fef3ff83 153 if(cntTimeOut_1 > 30000) // VALOR MAXIMO PARA QUE NUNCA SE PASE DEL LIMITE DEL INT
tzuran 0:89c9fef3ff83 154 cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 155 }
tzuran 0:89c9fef3ff83 156
tzuran 0:89c9fef3ff83 157 void ME_GENERAL()
tzuran 0:89c9fef3ff83 158 {
tzuran 0:89c9fef3ff83 159 switch(ME_GENERAL_ESTADO) {
tzuran 0:89c9fef3ff83 160 default:
tzuran 0:89c9fef3ff83 161 ME_GENERAL_ESTADO = INICIO1;
tzuran 0:89c9fef3ff83 162 break;
tzuran 0:89c9fef3ff83 163 case INICIO1:
tzuran 0:89c9fef3ff83 164 color(0);
tzuran 0:89c9fef3ff83 165 //SI SE APRIETA UN BOTON SE INICIA EL MOSTRADO DE SECUENCIA
tzuran 0:89c9fef3ff83 166 if(botones() != 0) {
tzuran 0:89c9fef3ff83 167 ME_GENERAL_ESTADO = MOSTRAR;
tzuran 0:89c9fef3ff83 168 mostrando = 1;
tzuran 0:89c9fef3ff83 169 cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 170 }
tzuran 0:89c9fef3ff83 171 break;
tzuran 0:89c9fef3ff83 172 case MOSTRAR:
tzuran 0:89c9fef3ff83 173 if(mostrando == 0) {
tzuran 0:89c9fef3ff83 174 ME_GENERAL_ESTADO = APRETAR;
tzuran 0:89c9fef3ff83 175 apretando = 1;
tzuran 0:89c9fef3ff83 176 }
tzuran 0:89c9fef3ff83 177 break;
tzuran 0:89c9fef3ff83 178 case APRETAR:
tzuran 0:89c9fef3ff83 179 if(apretando == 0) {
tzuran 0:89c9fef3ff83 180 if(equivocado == 0) {
tzuran 0:89c9fef3ff83 181 if(ganar == 0) {
tzuran 0:89c9fef3ff83 182 ME_GENERAL_ESTADO = MOSTRAR;
tzuran 0:89c9fef3ff83 183 mostrando = 1;
tzuran 0:89c9fef3ff83 184 // ACORTADO DE TIEMPOS
tzuran 0:89c9fef3ff83 185 button_time_out -= 100;
tzuran 0:89c9fef3ff83 186 time_led_on -= 10;
tzuran 0:89c9fef3ff83 187 time_led_off -= 10;
tzuran 0:89c9fef3ff83 188 } else {
tzuran 0:89c9fef3ff83 189 ME_GENERAL_ESTADO = GANASTE;
tzuran 0:89c9fef3ff83 190 cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 191 }
tzuran 0:89c9fef3ff83 192 }
tzuran 0:89c9fef3ff83 193 if(equivocado == 1) {
tzuran 0:89c9fef3ff83 194 ME_GENERAL_ESTADO = STOP1;
tzuran 0:89c9fef3ff83 195 cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 196 }
tzuran 0:89c9fef3ff83 197 }
tzuran 0:89c9fef3ff83 198 break;
tzuran 0:89c9fef3ff83 199 case STOP1:
tzuran 0:89c9fef3ff83 200 r = 0;
tzuran 0:89c9fef3ff83 201 g = 1;
tzuran 0:89c9fef3ff83 202 b = 0;
tzuran 0:89c9fef3ff83 203 if(cntTimeOut_1 >= 1000) {
tzuran 0:89c9fef3ff83 204 ME_GENERAL_ESTADO = DELAY1;
tzuran 0:89c9fef3ff83 205 }
tzuran 0:89c9fef3ff83 206 break;
tzuran 0:89c9fef3ff83 207 case GANASTE:
tzuran 0:89c9fef3ff83 208 r = 1;
tzuran 0:89c9fef3ff83 209 g = 0;
tzuran 0:89c9fef3ff83 210 b = 0;
tzuran 0:89c9fef3ff83 211 if(cntTimeOut_1 >= 1000) {
tzuran 0:89c9fef3ff83 212 ME_GENERAL_ESTADO = DELAY1;
tzuran 0:89c9fef3ff83 213 }
tzuran 0:89c9fef3ff83 214 break;
tzuran 0:89c9fef3ff83 215 case DELAY1:
tzuran 0:89c9fef3ff83 216 if(botones() != 0) {
tzuran 0:89c9fef3ff83 217 ME_GENERAL_ESTADO = DELAY2;
tzuran 0:89c9fef3ff83 218 cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 219 }
tzuran 0:89c9fef3ff83 220 break;
tzuran 0:89c9fef3ff83 221 case DELAY2:
tzuran 0:89c9fef3ff83 222 color(0);
tzuran 0:89c9fef3ff83 223 if(cntTimeOut_1 >= 1000) {
tzuran 0:89c9fef3ff83 224 ME_GENERAL_ESTADO = MOSTRAR;
tzuran 0:89c9fef3ff83 225
tzuran 0:89c9fef3ff83 226 //REINICIO VARIABLES DE PARTIDA
tzuran 0:89c9fef3ff83 227 mostrando = 1;
tzuran 0:89c9fef3ff83 228 cuenta_secuencia = 0;
tzuran 0:89c9fef3ff83 229 button_time_out = 5000;
tzuran 0:89c9fef3ff83 230 time_led_on = 500;
tzuran 0:89c9fef3ff83 231 time_led_off = 500;
tzuran 0:89c9fef3ff83 232 }
tzuran 0:89c9fef3ff83 233 break;
tzuran 0:89c9fef3ff83 234 }
tzuran 0:89c9fef3ff83 235 }
tzuran 0:89c9fef3ff83 236
tzuran 0:89c9fef3ff83 237 void ME_MOSTRAR()
tzuran 0:89c9fef3ff83 238 {
tzuran 0:89c9fef3ff83 239 switch(ME_MOSTRAR_ESTADO) {
tzuran 0:89c9fef3ff83 240 default:
tzuran 0:89c9fef3ff83 241 ME_MOSTRAR_ESTADO = INICIO2;
tzuran 0:89c9fef3ff83 242 break;
tzuran 0:89c9fef3ff83 243 case INICIO2:
tzuran 0:89c9fef3ff83 244 if(mostrando == 1) {
tzuran 0:89c9fef3ff83 245 // AGREGADO DE COLOR A LA SECUENCIA
tzuran 0:89c9fef3ff83 246 secuencia[cuenta_secuencia] = aleatorio(1, 4);
tzuran 0:89c9fef3ff83 247 cuenta_secuencia++;
tzuran 0:89c9fef3ff83 248 if(cuenta_secuencia == 25) {
tzuran 0:89c9fef3ff83 249 mostrando = 0;
tzuran 0:89c9fef3ff83 250 apretando = 0;
tzuran 0:89c9fef3ff83 251 ganar = 1;
tzuran 0:89c9fef3ff83 252 break;
tzuran 0:89c9fef3ff83 253 } else {
tzuran 0:89c9fef3ff83 254 mostrando_secuencia = 0;
tzuran 0:89c9fef3ff83 255 cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 256 ME_MOSTRAR_ESTADO = ON;
tzuran 0:89c9fef3ff83 257 }
tzuran 0:89c9fef3ff83 258 }
tzuran 0:89c9fef3ff83 259 break;
tzuran 0:89c9fef3ff83 260 case ON:
tzuran 0:89c9fef3ff83 261 color(secuencia[mostrando_secuencia]);
tzuran 0:89c9fef3ff83 262 if(cntTimeOut_1 >= time_led_on) {
tzuran 0:89c9fef3ff83 263 ME_MOSTRAR_ESTADO = OFF;
tzuran 0:89c9fef3ff83 264 cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 265 }
tzuran 0:89c9fef3ff83 266 break;
tzuran 0:89c9fef3ff83 267 case OFF:
tzuran 0:89c9fef3ff83 268 color(0);
tzuran 0:89c9fef3ff83 269 if(cntTimeOut_1 >= time_led_off) {
tzuran 0:89c9fef3ff83 270 if(mostrando_secuencia < (cuenta_secuencia-1)) {
tzuran 0:89c9fef3ff83 271 mostrando_secuencia++;
tzuran 0:89c9fef3ff83 272 ME_MOSTRAR_ESTADO = ON;
tzuran 0:89c9fef3ff83 273 cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 274 } else {
tzuran 0:89c9fef3ff83 275 mostrando = 0;
tzuran 0:89c9fef3ff83 276 ME_MOSTRAR_ESTADO = INICIO2;
tzuran 0:89c9fef3ff83 277 cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 278 }
tzuran 0:89c9fef3ff83 279 }
tzuran 0:89c9fef3ff83 280 break;
tzuran 0:89c9fef3ff83 281 }
tzuran 0:89c9fef3ff83 282 }
tzuran 0:89c9fef3ff83 283
tzuran 0:89c9fef3ff83 284 void ME_APRETAR()
tzuran 0:89c9fef3ff83 285 {
tzuran 0:89c9fef3ff83 286 switch(ME_APRETAR_ESTADO) {
tzuran 0:89c9fef3ff83 287 default:
tzuran 0:89c9fef3ff83 288 ME_APRETAR_ESTADO = INICIO3;
tzuran 0:89c9fef3ff83 289 break;
tzuran 0:89c9fef3ff83 290 case INICIO3:
tzuran 0:89c9fef3ff83 291 if(apretando == 1) {
tzuran 0:89c9fef3ff83 292 esperando_boton = 0;
tzuran 0:89c9fef3ff83 293 ME_APRETAR_ESTADO = ESPERO_BOTON;
tzuran 0:89c9fef3ff83 294 cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 295 }
tzuran 0:89c9fef3ff83 296 break;
tzuran 0:89c9fef3ff83 297 case ESPERO_BOTON:
tzuran 0:89c9fef3ff83 298 boton_apretado = botones();
tzuran 0:89c9fef3ff83 299 color(0);
tzuran 0:89c9fef3ff83 300 if(cntTimeOut_1 >= button_time_out) {
tzuran 0:89c9fef3ff83 301 equivocado = 1;
tzuran 0:89c9fef3ff83 302 apretando = 0;
tzuran 0:89c9fef3ff83 303 ME_APRETAR_ESTADO = INICIO3;
tzuran 0:89c9fef3ff83 304 }
tzuran 0:89c9fef3ff83 305
tzuran 0:89c9fef3ff83 306 if(boton_apretado != 0) {
tzuran 0:89c9fef3ff83 307 if(secuencia[esperando_boton] == boton_apretado) {
tzuran 0:89c9fef3ff83 308 cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 309 ME_APRETAR_ESTADO = DELAY;
tzuran 0:89c9fef3ff83 310 } else {
tzuran 0:89c9fef3ff83 311 equivocado = 1;
tzuran 0:89c9fef3ff83 312 apretando = 0;
tzuran 0:89c9fef3ff83 313 ME_APRETAR_ESTADO = INICIO3;
tzuran 0:89c9fef3ff83 314 }
tzuran 0:89c9fef3ff83 315 }
tzuran 0:89c9fef3ff83 316 break;
tzuran 0:89c9fef3ff83 317 case DELAY:
tzuran 0:89c9fef3ff83 318 color(boton_apretado);
tzuran 0:89c9fef3ff83 319 if(cntTimeOut_1 >= 250) {
tzuran 0:89c9fef3ff83 320 ME_APRETAR_ESTADO = DELAY3;
tzuran 0:89c9fef3ff83 321 cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 322 }
tzuran 0:89c9fef3ff83 323 break;
tzuran 0:89c9fef3ff83 324 case DELAY3:
tzuran 0:89c9fef3ff83 325 color(0);
tzuran 0:89c9fef3ff83 326 if(cntTimeOut_1 >= 250 && esperando_boton < (cuenta_secuencia-1)) {
tzuran 0:89c9fef3ff83 327 esperando_boton++;
tzuran 0:89c9fef3ff83 328 ME_APRETAR_ESTADO = ESPERO_BOTON;
tzuran 0:89c9fef3ff83 329 cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 330 } else if(cntTimeOut_1 >= 250 && esperando_boton >= (cuenta_secuencia-1)) {
tzuran 0:89c9fef3ff83 331 ME_APRETAR_ESTADO = INICIO3;
tzuran 0:89c9fef3ff83 332 equivocado = 0;
tzuran 0:89c9fef3ff83 333 apretando = 0;
tzuran 0:89c9fef3ff83 334 cntTimeOut_1 = 0;
tzuran 0:89c9fef3ff83 335 }
tzuran 0:89c9fef3ff83 336 break;
tzuran 0:89c9fef3ff83 337 }
tzuran 0:89c9fef3ff83 338 }
tzuran 0:89c9fef3ff83 339
tzuran 0:89c9fef3ff83 340 void entrada_botones()
tzuran 0:89c9fef3ff83 341 {
tzuran 0:89c9fef3ff83 342
tzuran 0:89c9fef3ff83 343 static char state1 = 0x00; // VARIABLE BOTON 1
tzuran 0:89c9fef3ff83 344 state1 = state1 >> 1; // SE CORRE UN BIT A LA DERECHA
tzuran 0:89c9fef3ff83 345 if(!boton_r) {
tzuran 0:89c9fef3ff83 346 state1 |= 0x80; // SE LE SUMA UN 1 AL ULTIMO BIT
tzuran 0:89c9fef3ff83 347 }
tzuran 0:89c9fef3ff83 348 if(state1 == 0xFF)
tzuran 0:89c9fef3ff83 349 botones_sr |= 0b00000001; // SE PONE LA SALIDA EN UNO SI DURANTE 80ms SOLO SE LEYERON UNOS
tzuran 0:89c9fef3ff83 350 else if(state1 == 0)
tzuran 0:89c9fef3ff83 351 botones_sr &= 0b11111110; // SE PONE LA SALIDA EN CERO SI DURANTE 80ms SOLO SE LEYERON CEROS
tzuran 0:89c9fef3ff83 352
tzuran 0:89c9fef3ff83 353 static char state2 = 0x00; //SE REPITE LO ANTERIOR PARA OTROS 3 BOTONES
tzuran 0:89c9fef3ff83 354 state2 = state2 >> 1;
tzuran 0:89c9fef3ff83 355 if(!boton_g) {
tzuran 0:89c9fef3ff83 356 state2 |= 0x80;
tzuran 0:89c9fef3ff83 357 }
tzuran 0:89c9fef3ff83 358 if(state2 == 0xFF)
tzuran 0:89c9fef3ff83 359 botones_sr |= 0b00000010;
tzuran 0:89c9fef3ff83 360 else if(state2 == 0)
tzuran 0:89c9fef3ff83 361 botones_sr &= 0b11111101;
tzuran 0:89c9fef3ff83 362
tzuran 0:89c9fef3ff83 363 static char state3 = 0x00;
tzuran 0:89c9fef3ff83 364 state3 = state3 >> 1;
tzuran 0:89c9fef3ff83 365 if(!boton_b) {
tzuran 0:89c9fef3ff83 366 state3 |= 0x80;
tzuran 0:89c9fef3ff83 367 }
tzuran 0:89c9fef3ff83 368 if(state3 == 0xFF)
tzuran 0:89c9fef3ff83 369 botones_sr |= 0b00000100;
tzuran 0:89c9fef3ff83 370 else if(state3 == 0)
tzuran 0:89c9fef3ff83 371 botones_sr &= 0b11111011;
tzuran 0:89c9fef3ff83 372
tzuran 0:89c9fef3ff83 373 static char state4 = 0x00;
tzuran 0:89c9fef3ff83 374 state4 = state4 >> 1;
tzuran 0:89c9fef3ff83 375 if(!boton_y) {
tzuran 0:89c9fef3ff83 376 state4 |= 0x80;
tzuran 0:89c9fef3ff83 377 }
tzuran 0:89c9fef3ff83 378 if(state4 == 0xFF)
tzuran 0:89c9fef3ff83 379 botones_sr |= 0b00001000;
tzuran 0:89c9fef3ff83 380 else if(state4 == 0)
tzuran 0:89c9fef3ff83 381 botones_sr &= 0b11110111;
tzuran 0:89c9fef3ff83 382
tzuran 0:89c9fef3ff83 383 }