Version Final

Dependencies:   Led7Seg mbed tsi_sensor

Committer:
NIcolasFernandezSanz
Date:
Mon Jun 17 21:34:12 2019 +0000
Revision:
2:7a98b5f73665
Parent:
1:ec5d430be5a2
VersionFinal;

Who changed what in which revision?

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