Version Final

Dependencies:   Led7Seg mbed tsi_sensor

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?

UserRevisionLine numberNew 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 }