Federico D'Andrea
/
BOMBA
EJERCICIO 3 - TERMINADO - SOTELO - D´ANDREA
main.cpp@0:8926c94dcd52, 2019-06-18 (annotated)
- Committer:
- feede_dandrea
- Date:
- Tue Jun 18 13:48:37 2019 +0000
- Revision:
- 0:8926c94dcd52
Ejercicio 3 terminado;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
feede_dandrea | 0:8926c94dcd52 | 1 | //TRABAJO PRACTICO 1 - BOMBA |
feede_dandrea | 0:8926c94dcd52 | 2 | |
feede_dandrea | 0:8926c94dcd52 | 3 | #include "mbed.h" |
feede_dandrea | 0:8926c94dcd52 | 4 | #include <stdlib.h> /* srand, rand */ |
feede_dandrea | 0:8926c94dcd52 | 5 | #include <time.h> /* time */ |
feede_dandrea | 0:8926c94dcd52 | 6 | #include "tsi_sensor.h" |
feede_dandrea | 0:8926c94dcd52 | 7 | |
feede_dandrea | 0:8926c94dcd52 | 8 | |
feede_dandrea | 0:8926c94dcd52 | 9 | /* This defines will be replaced by PinNames soon */ |
feede_dandrea | 0:8926c94dcd52 | 10 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
feede_dandrea | 0:8926c94dcd52 | 11 | #define ELEC0 9 |
feede_dandrea | 0:8926c94dcd52 | 12 | #define ELEC1 10 |
feede_dandrea | 0:8926c94dcd52 | 13 | #elif defined (TARGET_KL05Z) |
feede_dandrea | 0:8926c94dcd52 | 14 | #define ELEC0 9 |
feede_dandrea | 0:8926c94dcd52 | 15 | #define ELEC1 8 |
feede_dandrea | 0:8926c94dcd52 | 16 | #else |
feede_dandrea | 0:8926c94dcd52 | 17 | #error TARGET NOT DEFINED |
feede_dandrea | 0:8926c94dcd52 | 18 | #endif |
feede_dandrea | 0:8926c94dcd52 | 19 | |
feede_dandrea | 0:8926c94dcd52 | 20 | |
feede_dandrea | 0:8926c94dcd52 | 21 | |
feede_dandrea | 0:8926c94dcd52 | 22 | TSIAnalogSlider tsi(ELEC0, ELEC1, 40); |
feede_dandrea | 0:8926c94dcd52 | 23 | |
feede_dandrea | 0:8926c94dcd52 | 24 | |
feede_dandrea | 0:8926c94dcd52 | 25 | DigitalOut rojo(LED_RED); |
feede_dandrea | 0:8926c94dcd52 | 26 | DigitalOut verde(LED_GREEN); |
feede_dandrea | 0:8926c94dcd52 | 27 | DigitalOut azul(LED_BLUE); |
feede_dandrea | 0:8926c94dcd52 | 28 | |
feede_dandrea | 0:8926c94dcd52 | 29 | DigitalIn cable_1(PTD3); |
feede_dandrea | 0:8926c94dcd52 | 30 | DigitalIn cable_2(PTD2); |
feede_dandrea | 0:8926c94dcd52 | 31 | DigitalIn cable_3(PTD0); |
feede_dandrea | 0:8926c94dcd52 | 32 | DigitalIn cable_4(PTD5); |
feede_dandrea | 0:8926c94dcd52 | 33 | |
feede_dandrea | 0:8926c94dcd52 | 34 | AnalogIn aleatorio(PTB0); |
feede_dandrea | 0:8926c94dcd52 | 35 | |
feede_dandrea | 0:8926c94dcd52 | 36 | DigitalOut unidad_0(PTE20); //Menos significativo unidad |
feede_dandrea | 0:8926c94dcd52 | 37 | DigitalOut unidad_1(PTB1); |
feede_dandrea | 0:8926c94dcd52 | 38 | DigitalOut unidad_2(PTB2); |
feede_dandrea | 0:8926c94dcd52 | 39 | DigitalOut unidad_3(PTB3); //Mas significativo unidad |
feede_dandrea | 0:8926c94dcd52 | 40 | DigitalOut decena_1(PTC2); //Mas significativo decena |
feede_dandrea | 0:8926c94dcd52 | 41 | DigitalOut decena_0(PTC1); //Menos significativo decena |
feede_dandrea | 0:8926c94dcd52 | 42 | DigitalOut decena_3(PTE30); //Se pone en "1" para que en los display no muestre nada |
feede_dandrea | 0:8926c94dcd52 | 43 | |
feede_dandrea | 0:8926c94dcd52 | 44 | char cables[3]; |
feede_dandrea | 0:8926c94dcd52 | 45 | |
feede_dandrea | 0:8926c94dcd52 | 46 | Ticker resultado; |
feede_dandrea | 0:8926c94dcd52 | 47 | |
feede_dandrea | 0:8926c94dcd52 | 48 | |
feede_dandrea | 0:8926c94dcd52 | 49 | Ticker gameplay; |
feede_dandrea | 0:8926c94dcd52 | 50 | enum {INICIO,GENERADOR,DETECCION,CHEQUEO}; |
feede_dandrea | 0:8926c94dcd52 | 51 | enum {COMIENZO,GANASTE,PERDISTE}; |
feede_dandrea | 0:8926c94dcd52 | 52 | int juego_estado=0; |
feede_dandrea | 0:8926c94dcd52 | 53 | |
feede_dandrea | 0:8926c94dcd52 | 54 | |
feede_dandrea | 0:8926c94dcd52 | 55 | Ticker muestra_cables; |
feede_dandrea | 0:8926c94dcd52 | 56 | enum {F,ALEATORIO,LLENADO}; |
feede_dandrea | 0:8926c94dcd52 | 57 | enum {CABLE1,CABLE2,CABLE3,CABLE4}; |
feede_dandrea | 0:8926c94dcd52 | 58 | int generador=0,valor_guardado=0,n_generador=0,valor_generado=0,comienza_juego=0,modo_display=0, n_display=0,tiempo_juego=30; |
feede_dandrea | 0:8926c94dcd52 | 59 | int cable1_ocupado=0,cable2_ocupado=0,cable3_ocupado=0,cable4_ocupado=0,chequeo_cable1=0,chequeo_cable2=0,chequeo_cable3=0,chequeo_cable4=0,game_state=0; |
feede_dandrea | 0:8926c94dcd52 | 60 | int conteo_cables=0; |
feede_dandrea | 0:8926c94dcd52 | 61 | int codigo_generado[3]; |
feede_dandrea | 0:8926c94dcd52 | 62 | int decena=0, unidade=0,apagar=0; |
feede_dandrea | 0:8926c94dcd52 | 63 | |
feede_dandrea | 0:8926c94dcd52 | 64 | Ticker display; |
feede_dandrea | 0:8926c94dcd52 | 65 | enum {APAGADO,ENCENDIDO}; |
feede_dandrea | 0:8926c94dcd52 | 66 | enum {PARPADEO,CUENTA_REGRESIVA,ESTATICO}; |
feede_dandrea | 0:8926c94dcd52 | 67 | |
feede_dandrea | 0:8926c94dcd52 | 68 | |
feede_dandrea | 0:8926c94dcd52 | 69 | void display_mostrar(int decenas, int unidades,int apagar) //esta funcion se encarga de controlar los displays dependiendo a la informacion enviada |
feede_dandrea | 0:8926c94dcd52 | 70 | { |
feede_dandrea | 0:8926c94dcd52 | 71 | if(apagar==0) { |
feede_dandrea | 0:8926c94dcd52 | 72 | if(unidades==0) { |
feede_dandrea | 0:8926c94dcd52 | 73 | unidad_0=0; |
feede_dandrea | 0:8926c94dcd52 | 74 | unidad_1=0; |
feede_dandrea | 0:8926c94dcd52 | 75 | unidad_2=0; |
feede_dandrea | 0:8926c94dcd52 | 76 | unidad_3=0; |
feede_dandrea | 0:8926c94dcd52 | 77 | } |
feede_dandrea | 0:8926c94dcd52 | 78 | if(unidades==1) { |
feede_dandrea | 0:8926c94dcd52 | 79 | unidad_0=1; |
feede_dandrea | 0:8926c94dcd52 | 80 | unidad_1=0; |
feede_dandrea | 0:8926c94dcd52 | 81 | unidad_2=0; |
feede_dandrea | 0:8926c94dcd52 | 82 | unidad_3=0; |
feede_dandrea | 0:8926c94dcd52 | 83 | } |
feede_dandrea | 0:8926c94dcd52 | 84 | if(unidades==2) { |
feede_dandrea | 0:8926c94dcd52 | 85 | unidad_0=0; |
feede_dandrea | 0:8926c94dcd52 | 86 | unidad_1=1; |
feede_dandrea | 0:8926c94dcd52 | 87 | unidad_2=0; |
feede_dandrea | 0:8926c94dcd52 | 88 | unidad_3=0; |
feede_dandrea | 0:8926c94dcd52 | 89 | } |
feede_dandrea | 0:8926c94dcd52 | 90 | if(unidades==3) { |
feede_dandrea | 0:8926c94dcd52 | 91 | unidad_0=1; |
feede_dandrea | 0:8926c94dcd52 | 92 | unidad_1=1; |
feede_dandrea | 0:8926c94dcd52 | 93 | unidad_2=0; |
feede_dandrea | 0:8926c94dcd52 | 94 | unidad_3=0; |
feede_dandrea | 0:8926c94dcd52 | 95 | } |
feede_dandrea | 0:8926c94dcd52 | 96 | if(unidades==4) { |
feede_dandrea | 0:8926c94dcd52 | 97 | unidad_0=0; |
feede_dandrea | 0:8926c94dcd52 | 98 | unidad_1=0; |
feede_dandrea | 0:8926c94dcd52 | 99 | unidad_2=1; |
feede_dandrea | 0:8926c94dcd52 | 100 | unidad_3=0; |
feede_dandrea | 0:8926c94dcd52 | 101 | } |
feede_dandrea | 0:8926c94dcd52 | 102 | if(unidades==5) { |
feede_dandrea | 0:8926c94dcd52 | 103 | unidad_0=1; |
feede_dandrea | 0:8926c94dcd52 | 104 | unidad_1=0; |
feede_dandrea | 0:8926c94dcd52 | 105 | unidad_2=1; |
feede_dandrea | 0:8926c94dcd52 | 106 | unidad_3=0; |
feede_dandrea | 0:8926c94dcd52 | 107 | } |
feede_dandrea | 0:8926c94dcd52 | 108 | if(unidades==6) { |
feede_dandrea | 0:8926c94dcd52 | 109 | unidad_0=0; |
feede_dandrea | 0:8926c94dcd52 | 110 | unidad_1=1; |
feede_dandrea | 0:8926c94dcd52 | 111 | unidad_2=1; |
feede_dandrea | 0:8926c94dcd52 | 112 | unidad_3=0; |
feede_dandrea | 0:8926c94dcd52 | 113 | } |
feede_dandrea | 0:8926c94dcd52 | 114 | if(unidades==7) { |
feede_dandrea | 0:8926c94dcd52 | 115 | unidad_0=1; |
feede_dandrea | 0:8926c94dcd52 | 116 | unidad_1=1; |
feede_dandrea | 0:8926c94dcd52 | 117 | unidad_2=1; |
feede_dandrea | 0:8926c94dcd52 | 118 | unidad_3=0; |
feede_dandrea | 0:8926c94dcd52 | 119 | } |
feede_dandrea | 0:8926c94dcd52 | 120 | if(unidades==8) { |
feede_dandrea | 0:8926c94dcd52 | 121 | unidad_0=0; |
feede_dandrea | 0:8926c94dcd52 | 122 | unidad_1=0; |
feede_dandrea | 0:8926c94dcd52 | 123 | unidad_2=0; |
feede_dandrea | 0:8926c94dcd52 | 124 | unidad_3=1; |
feede_dandrea | 0:8926c94dcd52 | 125 | } |
feede_dandrea | 0:8926c94dcd52 | 126 | if(unidades==9) { |
feede_dandrea | 0:8926c94dcd52 | 127 | unidad_0=1; |
feede_dandrea | 0:8926c94dcd52 | 128 | unidad_1=0; |
feede_dandrea | 0:8926c94dcd52 | 129 | unidad_2=0; |
feede_dandrea | 0:8926c94dcd52 | 130 | unidad_3=1; |
feede_dandrea | 0:8926c94dcd52 | 131 | } |
feede_dandrea | 0:8926c94dcd52 | 132 | if(decenas==0) { |
feede_dandrea | 0:8926c94dcd52 | 133 | decena_0=0; |
feede_dandrea | 0:8926c94dcd52 | 134 | decena_1=0; |
feede_dandrea | 0:8926c94dcd52 | 135 | decena_3=0; |
feede_dandrea | 0:8926c94dcd52 | 136 | |
feede_dandrea | 0:8926c94dcd52 | 137 | } |
feede_dandrea | 0:8926c94dcd52 | 138 | if(decenas==1) { |
feede_dandrea | 0:8926c94dcd52 | 139 | decena_0=1; |
feede_dandrea | 0:8926c94dcd52 | 140 | decena_1=0; |
feede_dandrea | 0:8926c94dcd52 | 141 | decena_3=0; |
feede_dandrea | 0:8926c94dcd52 | 142 | } |
feede_dandrea | 0:8926c94dcd52 | 143 | if(decenas==2) { |
feede_dandrea | 0:8926c94dcd52 | 144 | decena_0=0; |
feede_dandrea | 0:8926c94dcd52 | 145 | decena_1=1; |
feede_dandrea | 0:8926c94dcd52 | 146 | decena_3=0; |
feede_dandrea | 0:8926c94dcd52 | 147 | } |
feede_dandrea | 0:8926c94dcd52 | 148 | if(decenas==3) { |
feede_dandrea | 0:8926c94dcd52 | 149 | decena_0=1; |
feede_dandrea | 0:8926c94dcd52 | 150 | decena_1=1; |
feede_dandrea | 0:8926c94dcd52 | 151 | decena_3=0; |
feede_dandrea | 0:8926c94dcd52 | 152 | } |
feede_dandrea | 0:8926c94dcd52 | 153 | } else { |
feede_dandrea | 0:8926c94dcd52 | 154 | decena_0=1; |
feede_dandrea | 0:8926c94dcd52 | 155 | decena_1=1; |
feede_dandrea | 0:8926c94dcd52 | 156 | decena_3=1; |
feede_dandrea | 0:8926c94dcd52 | 157 | unidad_0=1; |
feede_dandrea | 0:8926c94dcd52 | 158 | unidad_1=1; |
feede_dandrea | 0:8926c94dcd52 | 159 | unidad_2=1; |
feede_dandrea | 0:8926c94dcd52 | 160 | unidad_3=1; |
feede_dandrea | 0:8926c94dcd52 | 161 | } |
feede_dandrea | 0:8926c94dcd52 | 162 | } |
feede_dandrea | 0:8926c94dcd52 | 163 | |
feede_dandrea | 0:8926c94dcd52 | 164 | void generador_aleatorio() //esta funcion genera los valores aleatorios |
feede_dandrea | 0:8926c94dcd52 | 165 | { |
feede_dandrea | 0:8926c94dcd52 | 166 | switch(generador) { |
feede_dandrea | 0:8926c94dcd52 | 167 | case COMIENZO: |
feede_dandrea | 0:8926c94dcd52 | 168 | srand(int(aleatorio * 1000)); //leemos la entrada de una pata analogica para obtener un valor entero unico y poder generar valores aleatorios |
feede_dandrea | 0:8926c94dcd52 | 169 | if(n_generador<4) { //se repeite la secuencia hasta que se obtiene el orden aleatorio de los cables |
feede_dandrea | 0:8926c94dcd52 | 170 | generador=ALEATORIO; |
feede_dandrea | 0:8926c94dcd52 | 171 | } |
feede_dandrea | 0:8926c94dcd52 | 172 | break; |
feede_dandrea | 0:8926c94dcd52 | 173 | |
feede_dandrea | 0:8926c94dcd52 | 174 | case ALEATORIO: |
feede_dandrea | 0:8926c94dcd52 | 175 | valor_generado=rand()%4; //genera el valor aleatorio |
feede_dandrea | 0:8926c94dcd52 | 176 | generador=LLENADO; |
feede_dandrea | 0:8926c94dcd52 | 177 | break; |
feede_dandrea | 0:8926c94dcd52 | 178 | |
feede_dandrea | 0:8926c94dcd52 | 179 | case LLENADO: //agarra el valor aleatorio generado y lo asigna en el vector siempre y cuando no se haya repetido, de lo contrario lo ignora y genera otro |
feede_dandrea | 0:8926c94dcd52 | 180 | valor_guardado=valor_generado; |
feede_dandrea | 0:8926c94dcd52 | 181 | if((cable1_ocupado==0)||(cable2_ocupado==0)||(cable3_ocupado==0)||(cable4_ocupado==0)) {//se entra siempre y cuando falte algun cable que asignar |
feede_dandrea | 0:8926c94dcd52 | 182 | if((valor_guardado==CABLE1)&&(cable1_ocupado==0)) { //solo se ingresa una vez, por ende el valor de cable es unico y asi susesivamente |
feede_dandrea | 0:8926c94dcd52 | 183 | cables[n_generador]=0; |
feede_dandrea | 0:8926c94dcd52 | 184 | printf(" CABLE %d \r\n",(valor_guardado+1)); |
feede_dandrea | 0:8926c94dcd52 | 185 | cable1_ocupado=1; |
feede_dandrea | 0:8926c94dcd52 | 186 | n_generador++; |
feede_dandrea | 0:8926c94dcd52 | 187 | } |
feede_dandrea | 0:8926c94dcd52 | 188 | |
feede_dandrea | 0:8926c94dcd52 | 189 | if((valor_guardado==CABLE2)&&(cable2_ocupado==0)) { |
feede_dandrea | 0:8926c94dcd52 | 190 | cables[n_generador]=1; |
feede_dandrea | 0:8926c94dcd52 | 191 | printf(" CABLE %d \r\n",(valor_guardado+1)); |
feede_dandrea | 0:8926c94dcd52 | 192 | cable2_ocupado=1; |
feede_dandrea | 0:8926c94dcd52 | 193 | n_generador++; |
feede_dandrea | 0:8926c94dcd52 | 194 | } |
feede_dandrea | 0:8926c94dcd52 | 195 | |
feede_dandrea | 0:8926c94dcd52 | 196 | if((valor_guardado==CABLE3)&&(cable3_ocupado==0)) { |
feede_dandrea | 0:8926c94dcd52 | 197 | cables[n_generador]=2; |
feede_dandrea | 0:8926c94dcd52 | 198 | printf(" CABLE %d \r\n",(valor_guardado+1)); |
feede_dandrea | 0:8926c94dcd52 | 199 | cable3_ocupado=1; |
feede_dandrea | 0:8926c94dcd52 | 200 | n_generador++; |
feede_dandrea | 0:8926c94dcd52 | 201 | } |
feede_dandrea | 0:8926c94dcd52 | 202 | |
feede_dandrea | 0:8926c94dcd52 | 203 | if((valor_guardado==CABLE4)&&(cable4_ocupado==0)) { |
feede_dandrea | 0:8926c94dcd52 | 204 | cables[n_generador]=3; |
feede_dandrea | 0:8926c94dcd52 | 205 | printf(" CABLE %d \r\n",(valor_guardado+1)); |
feede_dandrea | 0:8926c94dcd52 | 206 | cable4_ocupado=1; |
feede_dandrea | 0:8926c94dcd52 | 207 | n_generador++; |
feede_dandrea | 0:8926c94dcd52 | 208 | } |
feede_dandrea | 0:8926c94dcd52 | 209 | generador = ALEATORIO; |
feede_dandrea | 0:8926c94dcd52 | 210 | } else {//una vez completado los 4 cables sigue el juego |
feede_dandrea | 0:8926c94dcd52 | 211 | n_generador=4; |
feede_dandrea | 0:8926c94dcd52 | 212 | juego_estado=DETECCION; |
feede_dandrea | 0:8926c94dcd52 | 213 | generador= INICIO; |
feede_dandrea | 0:8926c94dcd52 | 214 | } |
feede_dandrea | 0:8926c94dcd52 | 215 | |
feede_dandrea | 0:8926c94dcd52 | 216 | break; |
feede_dandrea | 0:8926c94dcd52 | 217 | } |
feede_dandrea | 0:8926c94dcd52 | 218 | } |
feede_dandrea | 0:8926c94dcd52 | 219 | |
feede_dandrea | 0:8926c94dcd52 | 220 | void display_funcion() //se encarga de hacer la cuenta regresiva automatica del display y del parpadeo, esta funcion esta corriendo permanentemente cada un segundo |
feede_dandrea | 0:8926c94dcd52 | 221 | { |
feede_dandrea | 0:8926c94dcd52 | 222 | switch (modo_display) { |
feede_dandrea | 0:8926c94dcd52 | 223 | case CUENTA_REGRESIVA: //descuenta el tiempo y calcula los valores para obtener decenas y unidades separadas |
feede_dandrea | 0:8926c94dcd52 | 224 | decena=tiempo_juego/10; |
feede_dandrea | 0:8926c94dcd52 | 225 | unidade=tiempo_juego-(decena*10); |
feede_dandrea | 0:8926c94dcd52 | 226 | apagar=0; |
feede_dandrea | 0:8926c94dcd52 | 227 | display_mostrar(decena,unidade,apagar);//llammos a la funcion display_mostrar que se encarga de mostrar los numeros, se los asignamos separados |
feede_dandrea | 0:8926c94dcd52 | 228 | printf("Tiempo %d\n\r",tiempo_juego); |
feede_dandrea | 0:8926c94dcd52 | 229 | tiempo_juego--;//descuenta el tiempo |
feede_dandrea | 0:8926c94dcd52 | 230 | if(tiempo_juego==0) {//si llega a cero pierde de todas formas |
feede_dandrea | 0:8926c94dcd52 | 231 | decena=tiempo_juego/10; |
feede_dandrea | 0:8926c94dcd52 | 232 | unidade=tiempo_juego-(decena*10); |
feede_dandrea | 0:8926c94dcd52 | 233 | game_state=PERDISTE; |
feede_dandrea | 0:8926c94dcd52 | 234 | modo_display=PARPADEO; |
feede_dandrea | 0:8926c94dcd52 | 235 | } |
feede_dandrea | 0:8926c94dcd52 | 236 | break; |
feede_dandrea | 0:8926c94dcd52 | 237 | |
feede_dandrea | 0:8926c94dcd52 | 238 | case PARPADEO: //si alguien gana o pierde se activa el parpadeo |
feede_dandrea | 0:8926c94dcd52 | 239 | if(n_display%2==0) {//para poder hcer el efecto de parpadeo incrementamos una funcion y en numeros pares muesta y en impares se apaga |
feede_dandrea | 0:8926c94dcd52 | 240 | display_mostrar(decena,unidade,1); |
feede_dandrea | 0:8926c94dcd52 | 241 | if(game_state==PERDISTE) { |
feede_dandrea | 0:8926c94dcd52 | 242 | rojo=0; |
feede_dandrea | 0:8926c94dcd52 | 243 | } |
feede_dandrea | 0:8926c94dcd52 | 244 | } else { |
feede_dandrea | 0:8926c94dcd52 | 245 | display_mostrar(decena,unidade,0); |
feede_dandrea | 0:8926c94dcd52 | 246 | if(game_state==PERDISTE) { |
feede_dandrea | 0:8926c94dcd52 | 247 | rojo=1; |
feede_dandrea | 0:8926c94dcd52 | 248 | } |
feede_dandrea | 0:8926c94dcd52 | 249 | } |
feede_dandrea | 0:8926c94dcd52 | 250 | //printf("Tiempo %d\n\r",tiempo_juego); |
feede_dandrea | 0:8926c94dcd52 | 251 | n_display++; |
feede_dandrea | 0:8926c94dcd52 | 252 | break; |
feede_dandrea | 0:8926c94dcd52 | 253 | |
feede_dandrea | 0:8926c94dcd52 | 254 | } |
feede_dandrea | 0:8926c94dcd52 | 255 | |
feede_dandrea | 0:8926c94dcd52 | 256 | } |
feede_dandrea | 0:8926c94dcd52 | 257 | |
feede_dandrea | 0:8926c94dcd52 | 258 | void juego() |
feede_dandrea | 0:8926c94dcd52 | 259 | { |
feede_dandrea | 0:8926c94dcd52 | 260 | switch (juego_estado) {//la funcion dell juergo base |
feede_dandrea | 0:8926c94dcd52 | 261 | case INICIO: |
feede_dandrea | 0:8926c94dcd52 | 262 | if(game_state==PERDISTE) {//si se pierde se activa el parpadeo, al perder ademas titila el led rojo |
feede_dandrea | 0:8926c94dcd52 | 263 | modo_display=PARPADEO; |
feede_dandrea | 0:8926c94dcd52 | 264 | comienza_juego=0;//esto permite que se resetee el juego desde el TSI |
feede_dandrea | 0:8926c94dcd52 | 265 | } |
feede_dandrea | 0:8926c94dcd52 | 266 | if(game_state==GANASTE) {//si se gana se activa el parpadeo |
feede_dandrea | 0:8926c94dcd52 | 267 | modo_display=PARPADEO; |
feede_dandrea | 0:8926c94dcd52 | 268 | comienza_juego=0;//esto permite que se resetee el juego desde el TSI |
feede_dandrea | 0:8926c94dcd52 | 269 | verde=0;//al ganar el led verde es fijo |
feede_dandrea | 0:8926c94dcd52 | 270 | } |
feede_dandrea | 0:8926c94dcd52 | 271 | if(game_state==COMIENZO) {//comienza el juego |
feede_dandrea | 0:8926c94dcd52 | 272 | printf(" COMIENZA EL JUEGO \r\n\n"); |
feede_dandrea | 0:8926c94dcd52 | 273 | printf("Secuencia : \r\n"); |
feede_dandrea | 0:8926c94dcd52 | 274 | juego_estado=GENERADOR; |
feede_dandrea | 0:8926c94dcd52 | 275 | } |
feede_dandrea | 0:8926c94dcd52 | 276 | break; |
feede_dandrea | 0:8926c94dcd52 | 277 | |
feede_dandrea | 0:8926c94dcd52 | 278 | case GENERADOR: |
feede_dandrea | 0:8926c94dcd52 | 279 | generador_aleatorio();//llamada a la funcion, a generar los cables aleatorios |
feede_dandrea | 0:8926c94dcd52 | 280 | tiempo_juego=30;//se setea un tiempo maximo de 30 segundos |
feede_dandrea | 0:8926c94dcd52 | 281 | modo_display=CUENTA_REGRESIVA;//se activa la cuenta regresiva |
feede_dandrea | 0:8926c94dcd52 | 282 | display.attach(&display_funcion, 1);//se llama al a funcion cada un segundo |
feede_dandrea | 0:8926c94dcd52 | 283 | break; |
feede_dandrea | 0:8926c94dcd52 | 284 | |
feede_dandrea | 0:8926c94dcd52 | 285 | case DETECCION://comienza a detectar los cables |
feede_dandrea | 0:8926c94dcd52 | 286 | if((cable_1==1)&&(chequeo_cable1==0)) { //los cables se sacan una vez por lo tanto solo se puede entrar una vez en este estado, y al primer error se pierde |
feede_dandrea | 0:8926c94dcd52 | 287 | if(cables[conteo_cables]==0) { |
feede_dandrea | 0:8926c94dcd52 | 288 | conteo_cables++;//es correcto y se incrementa la variable para buscar el siguiente cable |
feede_dandrea | 0:8926c94dcd52 | 289 | printf("CABLE 1 SACADO CON EXITO \r\n\n"); |
feede_dandrea | 0:8926c94dcd52 | 290 | chequeo_cable1=1; |
feede_dandrea | 0:8926c94dcd52 | 291 | } else { |
feede_dandrea | 0:8926c94dcd52 | 292 | game_state=PERDISTE; |
feede_dandrea | 0:8926c94dcd52 | 293 | printf("KBOOOM!. HAZ PERDIDO. EL CABLE 1 NO ERA, LO 100TO HEE HEE\n\r"); |
feede_dandrea | 0:8926c94dcd52 | 294 | juego_estado=INICIO; |
feede_dandrea | 0:8926c94dcd52 | 295 | } |
feede_dandrea | 0:8926c94dcd52 | 296 | } |
feede_dandrea | 0:8926c94dcd52 | 297 | if((cable_2==1)&&(chequeo_cable2==0)) { //los cables se sacan una vez por lo tanto solo se puede entrar una vez en este estado, y al primer error se pierde |
feede_dandrea | 0:8926c94dcd52 | 298 | if(cables[conteo_cables]==1) { |
feede_dandrea | 0:8926c94dcd52 | 299 | conteo_cables++;//es correcto y se incrementa la variable para buscar el siguiente cable |
feede_dandrea | 0:8926c94dcd52 | 300 | printf("CABLE 2 SACADO CON EXITO \r\n\n"); |
feede_dandrea | 0:8926c94dcd52 | 301 | chequeo_cable2=1; |
feede_dandrea | 0:8926c94dcd52 | 302 | } else { |
feede_dandrea | 0:8926c94dcd52 | 303 | game_state=PERDISTE; |
feede_dandrea | 0:8926c94dcd52 | 304 | printf("KBOOOM!. HAZ PERDIDO. EL CABLE 2 NO ERA, LO 100TO HEE HEE\n\r"); |
feede_dandrea | 0:8926c94dcd52 | 305 | juego_estado=INICIO; |
feede_dandrea | 0:8926c94dcd52 | 306 | } |
feede_dandrea | 0:8926c94dcd52 | 307 | } |
feede_dandrea | 0:8926c94dcd52 | 308 | if((cable_3==1)&&(chequeo_cable3==0)) { //los cables se sacan una vez por lo tanto solo se puede entrar una vez en este estado, y al primer error se pierde |
feede_dandrea | 0:8926c94dcd52 | 309 | if(cables[conteo_cables]==2) { |
feede_dandrea | 0:8926c94dcd52 | 310 | conteo_cables++;//es correcto y se incrementa la variable para buscar el siguiente cable |
feede_dandrea | 0:8926c94dcd52 | 311 | printf("CABLE 3 SACADO CON EXITO \r\n\n"); |
feede_dandrea | 0:8926c94dcd52 | 312 | chequeo_cable3=1; |
feede_dandrea | 0:8926c94dcd52 | 313 | } else { |
feede_dandrea | 0:8926c94dcd52 | 314 | game_state=PERDISTE; |
feede_dandrea | 0:8926c94dcd52 | 315 | printf("KBOOOM!. HAZ PERDIDO. EL CABLE 3 NO ERA, LO 100TO HEE HEE\n\r"); |
feede_dandrea | 0:8926c94dcd52 | 316 | juego_estado=INICIO; |
feede_dandrea | 0:8926c94dcd52 | 317 | } |
feede_dandrea | 0:8926c94dcd52 | 318 | } |
feede_dandrea | 0:8926c94dcd52 | 319 | if((cable_4==1)&&(chequeo_cable4==0)) { //los cables se sacan una vez por lo tanto solo se puede entrar una vez en este estado, y al primer error se pierde |
feede_dandrea | 0:8926c94dcd52 | 320 | if(cables[conteo_cables]==3) { |
feede_dandrea | 0:8926c94dcd52 | 321 | conteo_cables++;//es correcto y se incrementa la variable para buscar el siguiente cable |
feede_dandrea | 0:8926c94dcd52 | 322 | printf("CABLE 4 SACADO CON EXITO \r\n\n"); |
feede_dandrea | 0:8926c94dcd52 | 323 | chequeo_cable4=1; |
feede_dandrea | 0:8926c94dcd52 | 324 | } else { |
feede_dandrea | 0:8926c94dcd52 | 325 | game_state=PERDISTE; |
feede_dandrea | 0:8926c94dcd52 | 326 | printf("KBOOOM!. HAZ PERDIDO. EL CABLE 4 NO ERA, LO 100TO HEE HEE\n\r"); |
feede_dandrea | 0:8926c94dcd52 | 327 | juego_estado=INICIO; |
feede_dandrea | 0:8926c94dcd52 | 328 | } |
feede_dandrea | 0:8926c94dcd52 | 329 | } |
feede_dandrea | 0:8926c94dcd52 | 330 | if((chequeo_cable1==1)&&(chequeo_cable2==1)&&(chequeo_cable3==1)&&(chequeo_cable4==1)) { |
feede_dandrea | 0:8926c94dcd52 | 331 | game_state=GANASTE;//cuando los 4 quedan deshabilitados es cuando el jugador gana |
feede_dandrea | 0:8926c94dcd52 | 332 | juego_estado=INICIO; |
feede_dandrea | 0:8926c94dcd52 | 333 | } |
feede_dandrea | 0:8926c94dcd52 | 334 | break; |
feede_dandrea | 0:8926c94dcd52 | 335 | } |
feede_dandrea | 0:8926c94dcd52 | 336 | |
feede_dandrea | 0:8926c94dcd52 | 337 | } |
feede_dandrea | 0:8926c94dcd52 | 338 | |
feede_dandrea | 0:8926c94dcd52 | 339 | int main() |
feede_dandrea | 0:8926c94dcd52 | 340 | { |
feede_dandrea | 0:8926c94dcd52 | 341 | rojo=1; |
feede_dandrea | 0:8926c94dcd52 | 342 | verde=1; |
feede_dandrea | 0:8926c94dcd52 | 343 | azul=1;//apago todos los leds |
feede_dandrea | 0:8926c94dcd52 | 344 | juego_estado=INICIO;//inicializo el juego |
feede_dandrea | 0:8926c94dcd52 | 345 | while(1) { |
feede_dandrea | 0:8926c94dcd52 | 346 | float v = tsi.readPercentage(); |
feede_dandrea | 0:8926c94dcd52 | 347 | if(comienza_juego==1) {//una vez que esta variable este en 1 el juego queda corriendo, de lo contrario espera a que se deslice con el dedo en el TSI para comenzar. |
feede_dandrea | 0:8926c94dcd52 | 348 | juego(); |
feede_dandrea | 0:8926c94dcd52 | 349 | } else { |
feede_dandrea | 0:8926c94dcd52 | 350 | if((v>(float)0.1)&&(v<(float)0.3)) {//efecto de los colores |
feede_dandrea | 0:8926c94dcd52 | 351 | comienza_juego=0; |
feede_dandrea | 0:8926c94dcd52 | 352 | rojo=0; |
feede_dandrea | 0:8926c94dcd52 | 353 | verde=1; |
feede_dandrea | 0:8926c94dcd52 | 354 | azul=1; |
feede_dandrea | 0:8926c94dcd52 | 355 | } else if((v>(float)0.3)&&(v<(float)0.6)) {//efecto de los colores |
feede_dandrea | 0:8926c94dcd52 | 356 | rojo=1; |
feede_dandrea | 0:8926c94dcd52 | 357 | verde=0; |
feede_dandrea | 0:8926c94dcd52 | 358 | azul=1; |
feede_dandrea | 0:8926c94dcd52 | 359 | } else if((v>(float)0.6)&&(v<(float)0.9)) {//efecto de los colores |
feede_dandrea | 0:8926c94dcd52 | 360 | rojo=1; |
feede_dandrea | 0:8926c94dcd52 | 361 | verde=1; |
feede_dandrea | 0:8926c94dcd52 | 362 | azul=0; |
feede_dandrea | 0:8926c94dcd52 | 363 | } else if((v>=(float)0.9)) {//se resetean las variables para poder iniciar el juego de forma limpia incluso cuando se lo resetee al ganar o perder |
feede_dandrea | 0:8926c94dcd52 | 364 | rojo=1; |
feede_dandrea | 0:8926c94dcd52 | 365 | verde=1; |
feede_dandrea | 0:8926c94dcd52 | 366 | azul=1; |
feede_dandrea | 0:8926c94dcd52 | 367 | display.detach(); |
feede_dandrea | 0:8926c94dcd52 | 368 | n_generador=0; |
feede_dandrea | 0:8926c94dcd52 | 369 | chequeo_cable1=0; |
feede_dandrea | 0:8926c94dcd52 | 370 | chequeo_cable2=0; |
feede_dandrea | 0:8926c94dcd52 | 371 | chequeo_cable3=0; |
feede_dandrea | 0:8926c94dcd52 | 372 | chequeo_cable4=0; |
feede_dandrea | 0:8926c94dcd52 | 373 | cable1_ocupado=0; |
feede_dandrea | 0:8926c94dcd52 | 374 | cable2_ocupado=0; |
feede_dandrea | 0:8926c94dcd52 | 375 | cable3_ocupado=0; |
feede_dandrea | 0:8926c94dcd52 | 376 | cable4_ocupado=0; |
feede_dandrea | 0:8926c94dcd52 | 377 | conteo_cables=0; |
feede_dandrea | 0:8926c94dcd52 | 378 | generador=COMIENZO;//inicializa el generador |
feede_dandrea | 0:8926c94dcd52 | 379 | game_state=COMIENZO;//inicializa las etapas del juego |
feede_dandrea | 0:8926c94dcd52 | 380 | comienza_juego=1;//habilita el juego corriendo el loop y evita que se pueda volver a usar el TSI hasta que el juego no concluya |
feede_dandrea | 0:8926c94dcd52 | 381 | juego_estado=INICIO;//inicializa el juego |
feede_dandrea | 0:8926c94dcd52 | 382 | } |
feede_dandrea | 0:8926c94dcd52 | 383 | } |
feede_dandrea | 0:8926c94dcd52 | 384 | |
feede_dandrea | 0:8926c94dcd52 | 385 | |
feede_dandrea | 0:8926c94dcd52 | 386 | } |
feede_dandrea | 0:8926c94dcd52 | 387 | } |