Version Final

Dependencies:   Led7Seg mbed tsi_sensor

Committer:
NIcolasFernandezSanz
Date:
Sun Jun 16 01:18:28 2019 +0000
Revision:
1:ec5d430be5a2
Parent:
0:6cc6c33ebb7e
FERNANDEZ-CLERICI;

Who changed what in which revision?

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