Version Final
Dependencies: Led7Seg mbed tsi_sensor
main.cpp@2:7a98b5f73665, 2019-06-17 (annotated)
- Committer:
- NIcolasFernandezSanz
- Date:
- Mon Jun 17 21:34:12 2019 +0000
- Revision:
- 2:7a98b5f73665
- Parent:
- 1:ec5d430be5a2
VersionFinal;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |