Tomas Zuran
/
Simon
Juego de Simon
main.cpp@0:89c9fef3ff83, 2019-05-29 (annotated)
- Committer:
- tzuran
- Date:
- Wed May 29 22:07:07 2019 +0000
- Revision:
- 0:89c9fef3ff83
Version final
Who changed what in which revision?
User | Revision | Line number | New 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 | } |