Version Final
Dependencies: Led7Seg mbed tsi_sensor
main.cpp@0:6cc6c33ebb7e, 2019-06-16 (annotated)
- Committer:
- NIcolasFernandezSanz
- Date:
- Sun Jun 16 00:37:27 2019 +0000
- Revision:
- 0:6cc6c33ebb7e
- Child:
- 1:ec5d430be5a2
V1(Funcionando)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 1 | /*Incluyo las Librerias*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 2 | #include "mbed.h" |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 3 | #include "tsi_sensor.h" |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 4 | #include "Led7Seg.h" |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 5 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 6 | /* Declaraciones pertinentes al TSI */ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 7 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 8 | #define ELEC0 9 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 9 | #define ELEC1 10 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 10 | #elif defined (TARGET_KL05Z) |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 11 | #define ELEC0 9 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 12 | #define ELEC1 8 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 13 | #else |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 14 | #error TARGET NOT DEFINED |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 15 | #endif |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 16 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 17 | TSIAnalogSlider tsi(ELEC0, ELEC1, 40); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 18 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 19 | /*Maquina de estados Principal*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 20 | #define ESTADO_INICIO 0 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 21 | #define ESTADO_RESET 1 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 22 | #define ESTADO_FASE1 2 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 23 | #define ESTADO_FASE2 3 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 24 | #define ESTADO_FASE3 4 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 25 | #define ESTADO_FASE4 5 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 26 | #define ESTADO_PERDER 6 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 27 | #define ESTADO_GANAR 7 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 28 | #define ESTADO_ESPERAR 8 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 29 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 30 | /*Maquina de estados de los displays*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 31 | #define Unidades 0 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 32 | #define Decenas 1 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 33 | #define Espera 3 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 34 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 35 | int ac = 0; //Acumulador de la maquina de displays |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 36 | int ED = 0; //Variable de estado de la maquina de displays |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 37 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 38 | Led7Seg disp(D9,D10,D2,D3,D4,D5,D6,1); //Instancio el display |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 39 | unsigned char u = 0, d = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 40 | /*Seteo las habilitaciones*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 41 | DigitalOut H1(D8); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 42 | DigitalOut H2(D7); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 43 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 44 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 45 | #define CANTCABLES 4 //Cantidad de cables con los que funcionara el sistema |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 46 | #define TIEMPO 60 //Cantidad de segundos que tengo para desactivar la secuencia |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 47 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 48 | /*Declaracion LEDs*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 49 | DigitalOut Rojo(LED1); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 50 | DigitalOut Verde(LED2); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 51 | DigitalOut Azul(LED3); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 52 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 53 | /*Declaraciones Entradas...*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 54 | DigitalIn C1(PTB0); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 55 | DigitalIn C2(PTB1); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 56 | DigitalIn C3(PTB2); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 57 | DigitalIn C4(PTB3); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 58 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 59 | /*Instancio los Timmer*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 60 | Ticker ti; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 61 | Ticker D; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 62 | Ticker BC; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 63 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 64 | int estado = ESTADO_INICIO, tespera = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 65 | int semilla = 0, tiempo = 0, cp = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 66 | int sec[CANTCABLES+1] = {0}; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 67 | bool loop1 = 1, loop2 = 1, parpadeo = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 68 | int pos = 1, ant = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 69 | bool estadop = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 70 | float tsii = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 71 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 72 | int tmo = TIEMPO; //Variable de la cuenta regresiva |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 73 | bool entmo = 0; //Habilitacion de la cuenta regresiva.. |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 74 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 75 | /*Prototipos funciones*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 76 | void leds(int num); //Controlador del LEd |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 77 | void bombita (); //Maquina de estados principal |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 78 | void temporizar(); //Funcion relacionada al Timmer |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 79 | bool isPart(int numero, int vector[]); //Me notifica si un numero forma parte de un vector |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 80 | int cables(); //Me devuelve un num binario en resultado a todos los cables |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 81 | char desc(); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 82 | void Displays(unsigned char num, bool blink); //Maquina de estados de manejo de los displays |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 83 | void tim_D(void); //Timmer de los displays |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 84 | void seg(void); //Timmer cuenta regresiva |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 85 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 86 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 87 | int main() |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 88 | { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 89 | /*Inicializo los Ticker*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 90 | ti.attach(&temporizar, 0.1); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 91 | D.attach(&tim_D,0.001); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 92 | BC.attach(&seg,1); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 93 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 94 | /*Seteo los Pull Ups INTERNOS para los cables*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 95 | C1.mode(PullUp); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 96 | C2.mode(PullUp); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 97 | C3.mode(PullUp); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 98 | C4.mode(PullUp); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 99 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 100 | /*Mensaje de inicio...*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 101 | leds(0b111); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 102 | printf("Toque el TOUCH para comenzar: \r\n"); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 103 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 104 | while (true) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 105 | //Ejecuto la maquina de estados principal.. |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 106 | bombita(); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 107 | //Ejecuto la maquina de estados de los displays |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 108 | Displays(tmo,parpadeo); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 109 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 110 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 111 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 112 | void bombita () |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 113 | { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 114 | int i = 1, g = 1, u = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 115 | switch(estado) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 116 | default: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 117 | case ESTADO_INICIO: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 118 | tiempo = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 119 | parpadeo = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 120 | entmo = 0; //No descuento ahora... |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 121 | /*Me fijo si apretaron el tsi*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 122 | tsii = tsi.readPercentage(); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 123 | if((tsii < 0.99)&&(tsii > 0.01)) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 124 | if (cables() == 0b0000) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 125 | leds(0b000); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 126 | estado = ESTADO_RESET; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 127 | printf("Comencemos: \r\n\n"); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 128 | } else { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 129 | if(loop1) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 130 | printf("CONECTE TODOS LOS CABLES >:(\r\n\n"); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 131 | loop1 = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 132 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 133 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 134 | } else { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 135 | loop1 = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 136 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 137 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 138 | case ESTADO_RESET: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 139 | //Reinicio la secuencia |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 140 | srand (semilla); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 141 | memset(sec, 0, sizeof(sec)); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 142 | while(i <= 4) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 143 | u = rand() % 4 + 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 144 | if(!(isPart(u,sec))) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 145 | sec[i] = u; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 146 | i++; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 147 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 148 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 149 | printf("La secuencia es: CABLE %d - CABLE %d - CABLE %d - CABLE %d \r\n\n", sec[1], sec[2], sec[3], sec[4]); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 150 | entmo = 1; //Empieza la cuenta regresiva... |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 151 | estado = ESTADO_FASE1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 152 | /*Reinicio el tmo*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 153 | tmo = TIEMPO; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 154 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 155 | case ESTADO_FASE1: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 156 | //Paso 1 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 157 | pos = estado - 1 ; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 158 | g = desc(); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 159 | if(g == sec[pos]) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 160 | //Pase de nivel |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 161 | estado = ESTADO_FASE2; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 162 | printf("MUY BIEN ZAFASTE POR AHORA :(\r\n\n"); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 163 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 164 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 165 | if((g != sec[pos] && g != 0) || tmo == 0) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 166 | //Perdiste |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 167 | estado = ESTADO_PERDER; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 168 | entmo = 0; //No descuento ahora... |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 169 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 170 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 171 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 172 | case ESTADO_FASE2: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 173 | //Paso 2 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 174 | pos = estado - 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 175 | g = desc(); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 176 | if(g == sec[pos]) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 177 | //Pase de nivel |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 178 | estado = ESTADO_FASE3; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 179 | printf("ULTIMA OPORTUNIDAD PARA EXPLOTARLA >:) >:)\r\n\n"); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 180 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 181 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 182 | if((g != sec[pos] && g != 0) || tmo == 0) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 183 | //Perdiste |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 184 | estado = ESTADO_PERDER; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 185 | entmo = 0; //No descuento ahora... |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 186 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 187 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 188 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 189 | case ESTADO_FASE3: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 190 | pos = estado - 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 191 | g = desc(); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 192 | if(g == sec[pos]) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 193 | //Pase de nivel |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 194 | estado = ESTADO_FASE4; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 195 | printf("SE TE ACABA EL TIEMPO\r\n\n"); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 196 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 197 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 198 | if((g != sec[pos] && g != 0) || tmo == 0) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 199 | //Perdiste |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 200 | estado = ESTADO_PERDER; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 201 | entmo = 0; //No descuento ahora... |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 202 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 203 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 204 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 205 | case ESTADO_FASE4: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 206 | pos = estado - 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 207 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 208 | if(tmo == 0){ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 209 | //Perdiste |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 210 | entmo = 0; //No descuento ahora... |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 211 | estado = ESTADO_PERDER; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 212 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 213 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 214 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 215 | if(cables() == 0b1111) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 216 | //Gane! |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 217 | entmo = 0; //No descuento ahora... |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 218 | estado = ESTADO_GANAR; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 219 | printf("GANASTEE!! :)\r\n\n"); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 220 | printf("Reconecte los cables para volver a jugar\r\n"); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 221 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 222 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 223 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 224 | case ESTADO_PERDER: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 225 | //Perdiste |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 226 | if(loop2) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 227 | leds(4); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 228 | printf("BOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOM!\r\n"); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 229 | printf("Perdiste bro :)\r\n\n"); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 230 | printf("Reconecte los cables para volver a jugar\r\n"); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 231 | parpadeo = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 232 | loop2 = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 233 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 234 | if(tiempo == 5) |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 235 | leds(0b100); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 236 | if(tiempo == 10) |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 237 | { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 238 | leds(0b000); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 239 | tiempo = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 240 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 241 | //Si me reconectan todos los cables vuelvo al inicio... |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 242 | if(cables() == 0b0000) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 243 | estado = ESTADO_ESPERAR; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 244 | tespera = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 245 | loop2 = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 246 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 247 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 248 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 249 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 250 | case ESTADO_GANAR: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 251 | //Ganastee |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 252 | leds(0b010); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 253 | //Hacer parpadear disply |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 254 | parpadeo = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 255 | //Si me conectan todos los cables reinicio... |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 256 | if(cables() == 0b0000) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 257 | estado = 8; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 258 | tespera = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 259 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 260 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 261 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 262 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 263 | case ESTADO_ESPERAR: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 264 | //Espero un toque para reiniciar y avisoo.. |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 265 | leds(0b111); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 266 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 267 | if(tespera > 20) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 268 | tmo = TIEMPO; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 269 | printf("Reset! Toque el TOUCH para iniciar\r\n\n"); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 270 | semilla = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 271 | estado = ESTADO_INICIO; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 272 | tespera = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 273 | semilla = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 274 | tiempo = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 275 | cp = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 276 | loop1 = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 277 | loop2 = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 278 | parpadeo = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 279 | pos = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 280 | ant = 0b0000; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 281 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 282 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 283 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 284 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 285 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 286 | void leds(int num) |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 287 | { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 288 | switch(num) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 289 | case 0: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 290 | Rojo = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 291 | Verde = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 292 | Azul = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 293 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 294 | case 4: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 295 | Rojo = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 296 | Verde = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 297 | Azul = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 298 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 299 | case 2: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 300 | Rojo = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 301 | Verde = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 302 | Azul = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 303 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 304 | case 1: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 305 | Rojo = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 306 | Verde = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 307 | Azul = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 308 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 309 | case 7: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 310 | Rojo = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 311 | Verde = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 312 | Azul = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 313 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 314 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 315 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 316 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 317 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 318 | int cables() |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 319 | { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 320 | return (C1 | C2 << 1 | C3 << 2 | C4 << 3); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 321 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 322 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 323 | bool isPart(int numero, int vector[]) |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 324 | { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 325 | int c = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 326 | for(c = 1; c <= 4; c ++) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 327 | if(numero == vector[c]) |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 328 | return 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 329 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 330 | return 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 331 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 332 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 333 | char desc() |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 334 | { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 335 | static int validacion = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 336 | int ant1 = cables(); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 337 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 338 | //Cable 1 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 339 | if(((ant & 0001) != C1) && validacion != 1) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 340 | validacion = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 341 | return 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 342 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 343 | //Cable 2 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 344 | if((((ant >> 1) & 0001) != C2) && validacion != 2) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 345 | validacion = 2; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 346 | return 2; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 347 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 348 | //Cable 3 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 349 | if((((ant >> 2) & 0001) != C3) && validacion != 3) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 350 | validacion = 3; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 351 | return 3; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 352 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 353 | //Cable 4 |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 354 | if((((ant >> 3) & 0001) != C4) && validacion != 4) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 355 | validacion = 4; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 356 | return 4; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 357 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 358 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 359 | ant = ant1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 360 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 361 | return 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 362 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 363 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 364 | void temporizar() |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 365 | { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 366 | //Funcion de parpadeo |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 367 | if(parpadeo) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 368 | cp ++; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 369 | if(cp > 10) { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 370 | estadop = !estadop; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 371 | cp = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 372 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 373 | } else { |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 374 | //Apago todo lo que parpadea de forma definitiva |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 375 | estadop = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 376 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 377 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 378 | tiempo ++; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 379 | semilla++; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 380 | tespera++; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 381 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 382 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 383 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 384 | void Displays(unsigned char num, bool blink){ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 385 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 386 | /*Si supero lo maximo que puedo mostrar parpadeo y pongo el max*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 387 | if(num > 99){ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 388 | num = 99; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 389 | blink = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 390 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 391 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 392 | /*Maquina de estados*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 393 | switch(ED){ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 394 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 395 | /*Calculo y coloco las unidades*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 396 | case Unidades: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 397 | u = num % 10; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 398 | disp.write(u); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 399 | H1 = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 400 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 401 | if(ac >= 15){ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 402 | H1 = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 403 | ED = Decenas; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 404 | ac = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 405 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 406 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 407 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 408 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 409 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 410 | /*Calculo y coloco las decenas*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 411 | case Decenas: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 412 | d = int(num/10) ; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 413 | disp.write(d); |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 414 | H2 = 1; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 415 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 416 | /*Transicion comun*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 417 | if(ac >= 15 && blink == 0){ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 418 | H2 = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 419 | ED = Unidades; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 420 | ac = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 421 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 422 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 423 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 424 | /*Transicion al estado de espera para blink*/ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 425 | if(ac >= 15 && blink){ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 426 | H2 = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 427 | ED = Espera; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 428 | ac = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 429 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 430 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 431 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 432 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 433 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 434 | case Espera: |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 435 | if(ac >= 200){ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 436 | ac = 0; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 437 | ED = Unidades; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 438 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 439 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 440 | break; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 441 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 442 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 443 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 444 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 445 | void tim_D(void){ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 446 | ac++; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 447 | } |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 448 | |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 449 | void seg(void){ |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 450 | if(tmo > 0 && entmo ) |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 451 | tmo--; |
NIcolasFernandezSanz | 0:6cc6c33ebb7e | 452 | } |