Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:b24a8232cb00, 2022-06-05 (annotated)
- Committer:
- villani
- Date:
- Sun Jun 05 21:55:47 2022 +0000
- Revision:
- 0:b24a8232cb00
Atrapa la luz nashe
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| villani | 0:b24a8232cb00 | 1 | #include "mbed.h" |
| villani | 0:b24a8232cb00 | 2 | |
| villani | 0:b24a8232cb00 | 3 | Ticker tick; //Definición del ticker |
| villani | 0:b24a8232cb00 | 4 | |
| villani | 0:b24a8232cb00 | 5 | // Entradas y salidas |
| villani | 0:b24a8232cb00 | 6 | |
| villani | 0:b24a8232cb00 | 7 | // Leds indicadores de turno |
| villani | 0:b24a8232cb00 | 8 | DigitalOut LED_JUG_1(PTE30); |
| villani | 0:b24a8232cb00 | 9 | DigitalOut LED_JUG_2(PTE29); |
| villani | 0:b24a8232cb00 | 10 | |
| villani | 0:b24a8232cb00 | 11 | //Control de catodos para la multiplexación |
| villani | 0:b24a8232cb00 | 12 | DigitalOut K_1(PTA13); |
| villani | 0:b24a8232cb00 | 13 | DigitalOut K_2(PTD5); |
| villani | 0:b24a8232cb00 | 14 | |
| villani | 0:b24a8232cb00 | 15 | //Segmentos del los displays |
| villani | 0:b24a8232cb00 | 16 | DigitalOut SEGMENTO_A(PTC12); |
| villani | 0:b24a8232cb00 | 17 | DigitalOut SEGMENTO_B(PTC13); |
| villani | 0:b24a8232cb00 | 18 | DigitalOut SEGMENTO_C(PTC16); |
| villani | 0:b24a8232cb00 | 19 | DigitalOut SEGMENTO_D(PTC17); |
| villani | 0:b24a8232cb00 | 20 | DigitalOut SEGMENTO_E(PTA16); |
| villani | 0:b24a8232cb00 | 21 | DigitalOut SEGMENTO_F(PTA17); |
| villani | 0:b24a8232cb00 | 22 | DigitalOut SEGMENTO_G(PTE31); |
| villani | 0:b24a8232cb00 | 23 | |
| villani | 0:b24a8232cb00 | 24 | //Fila de leds de juego |
| villani | 0:b24a8232cb00 | 25 | BusOut myleds(PTC7,PTC0,PTC3,PTC4,PTC5,PTC6,PTC10,PTC11); //Funcion para vectorizar la salida |
| villani | 0:b24a8232cb00 | 26 | |
| villani | 0:b24a8232cb00 | 27 | //Pulsadores |
| villani | 0:b24a8232cb00 | 28 | BusIn mypuls(PTC8,PTC9); //Funcion para vectorizar la entrada (jugador 1 y 2 respectivamente) |
| villani | 0:b24a8232cb00 | 29 | |
| villani | 0:b24a8232cb00 | 30 | |
| villani | 0:b24a8232cb00 | 31 | // Definicion de estados |
| villani | 0:b24a8232cb00 | 32 | enum{ |
| villani | 0:b24a8232cb00 | 33 | STANDBY = 0, //0 |
| villani | 0:b24a8232cb00 | 34 | TURNO_J1, // 1 |
| villani | 0:b24a8232cb00 | 35 | TURNO_J2, // 2 |
| villani | 0:b24a8232cb00 | 36 | TRANSICION, //3 |
| villani | 0:b24a8232cb00 | 37 | GANADOR //4 |
| villani | 0:b24a8232cb00 | 38 | }; |
| villani | 0:b24a8232cb00 | 39 | |
| villani | 0:b24a8232cb00 | 40 | |
| villani | 0:b24a8232cb00 | 41 | #define BASE_TIEMPO 0.01 // Base de tiempo 10ms |
| villani | 0:b24a8232cb00 | 42 | |
| villani | 0:b24a8232cb00 | 43 | //Declaración de variables universales |
| villani | 0:b24a8232cb00 | 44 | unsigned int t = 0; //Timer de la maquinada de estados |
| villani | 0:b24a8232cb00 | 45 | unsigned int clk = 0; //Timer de multiplexación |
| villani | 0:b24a8232cb00 | 46 | unsigned char tipo_de_transicion = 0; //Define que transición se ejecutará y a que estado pasara despues de pasar por el estado TRANSICION |
| villani | 0:b24a8232cb00 | 47 | static int posicion_leds; //Define que led de juego estara encendido una vez el juego comenzado |
| villani | 0:b24a8232cb00 | 48 | unsigned char direccion; //Define el recorrido de "la luz" |
| villani | 0:b24a8232cb00 | 49 | unsigned char prox_turno; //Define a posicion inicial y dirección de "la luz" |
| villani | 0:b24a8232cb00 | 50 | static int parpadeo = 0; //Define la cantidad de veces que el/los leds parpadean |
| villani | 0:b24a8232cb00 | 51 | unsigned char puntuacion[2] = {0}; |
| villani | 0:b24a8232cb00 | 52 | unsigned char numero_display[10] = {0b1111110,0b0110000,0b1101101,0b1111001,0b0110011,0b1011011,0b1011111,0b1110000,0b1111111,0b1111011}; //Vector con todos los valores binarios necesarios para el control de los displays usando operaciones de bits |
| villani | 0:b24a8232cb00 | 53 | |
| villani | 0:b24a8232cb00 | 54 | //Maquina de estados |
| villani | 0:b24a8232cb00 | 55 | void Input_Pulso(int indice); |
| villani | 0:b24a8232cb00 | 56 | |
| villani | 0:b24a8232cb00 | 57 | //Funcion para el manejo de displays |
| villani | 0:b24a8232cb00 | 58 | void Display(int numero_1, int numero_2); |
| villani | 0:b24a8232cb00 | 59 | |
| villani | 0:b24a8232cb00 | 60 | // Funcion del ticker |
| villani | 0:b24a8232cb00 | 61 | void Interrupcion(void) |
| villani | 0:b24a8232cb00 | 62 | { |
| villani | 0:b24a8232cb00 | 63 | t++; |
| villani | 0:b24a8232cb00 | 64 | clk++; |
| villani | 0:b24a8232cb00 | 65 | } |
| villani | 0:b24a8232cb00 | 66 | |
| villani | 0:b24a8232cb00 | 67 | //Inicialización de comunicación serial |
| villani | 0:b24a8232cb00 | 68 | Serial pc(USBTX, USBRX, 115200); |
| villani | 0:b24a8232cb00 | 69 | |
| villani | 0:b24a8232cb00 | 70 | int main() { |
| villani | 0:b24a8232cb00 | 71 | // Inicializaciones |
| villani | 0:b24a8232cb00 | 72 | mypuls[0].mode(PullNone); |
| villani | 0:b24a8232cb00 | 73 | mypuls[1].mode(PullNone); |
| villani | 0:b24a8232cb00 | 74 | tick.attach(&Interrupcion, BASE_TIEMPO); |
| villani | 0:b24a8232cb00 | 75 | |
| villani | 0:b24a8232cb00 | 76 | //Bucle infinito |
| villani | 0:b24a8232cb00 | 77 | while(1){ |
| villani | 0:b24a8232cb00 | 78 | Input_Pulso(0); |
| villani | 0:b24a8232cb00 | 79 | Display(puntuacion[0], puntuacion[1]); |
| villani | 0:b24a8232cb00 | 80 | } |
| villani | 0:b24a8232cb00 | 81 | } |
| villani | 0:b24a8232cb00 | 82 | |
| villani | 0:b24a8232cb00 | 83 | void Input_Pulso(int indice){ |
| villani | 0:b24a8232cb00 | 84 | static int estado = STANDBY; //Estado inicial |
| villani | 0:b24a8232cb00 | 85 | switch(estado){ |
| villani | 0:b24a8232cb00 | 86 | case STANDBY: |
| villani | 0:b24a8232cb00 | 87 | //Antes de iniciar el juego |
| villani | 0:b24a8232cb00 | 88 | LED_JUG_1 = 1; //Se encienden ambos leds indicadores de turnos |
| villani | 0:b24a8232cb00 | 89 | LED_JUG_2 = 1; |
| villani | 0:b24a8232cb00 | 90 | if(t<100){ //Durante 1s... |
| villani | 0:b24a8232cb00 | 91 | for(int p=0;p<8;p++){ //Los leds de juego pares permaneceran prendidos mientras que los impares apagados |
| villani | 0:b24a8232cb00 | 92 | if(p % 2 == 0) |
| villani | 0:b24a8232cb00 | 93 | myleds[p] = 1; |
| villani | 0:b24a8232cb00 | 94 | else |
| villani | 0:b24a8232cb00 | 95 | myleds[p] = 0; |
| villani | 0:b24a8232cb00 | 96 | } |
| villani | 0:b24a8232cb00 | 97 | } |
| villani | 0:b24a8232cb00 | 98 | if(t>=100 && t<200){ //Durante 1s pasado el anterior... |
| villani | 0:b24a8232cb00 | 99 | for(int p=0;p<8;p++){ //Los leds de juego impares permaneceran prendidos mientras que los pares apagados |
| villani | 0:b24a8232cb00 | 100 | if(p % 2 != 0) |
| villani | 0:b24a8232cb00 | 101 | myleds[p] = 1; |
| villani | 0:b24a8232cb00 | 102 | else |
| villani | 0:b24a8232cb00 | 103 | myleds[p] = 0; |
| villani | 0:b24a8232cb00 | 104 | } |
| villani | 0:b24a8232cb00 | 105 | } |
| villani | 0:b24a8232cb00 | 106 | if(t>=200) //Cada 2s el timer t se resetea |
| villani | 0:b24a8232cb00 | 107 | t=0; |
| villani | 0:b24a8232cb00 | 108 | if(mypuls[0]==1 && mypuls[1]==1){ //Si ambos pulsadores se presionan simutaneamente... |
| villani | 0:b24a8232cb00 | 109 | estado = TRANSICION; //Se cambia el estado dando inicio al juego |
| villani | 0:b24a8232cb00 | 110 | t = 0; //Se resetea el timer t |
| villani | 0:b24a8232cb00 | 111 | tipo_de_transicion = 0; //Se indica que trancición se ejecutara |
| villani | 0:b24a8232cb00 | 112 | for(int p=0;p<8;p++){ //Se apagan todos los leds de juego |
| villani | 0:b24a8232cb00 | 113 | myleds[p] = 0; |
| villani | 0:b24a8232cb00 | 114 | } |
| villani | 0:b24a8232cb00 | 115 | } |
| villani | 0:b24a8232cb00 | 116 | break; |
| villani | 0:b24a8232cb00 | 117 | case TRANSICION: |
| villani | 0:b24a8232cb00 | 118 | //Abarca todas las tranciciones del juego |
| villani | 0:b24a8232cb00 | 119 | if(puntuacion[0]>=5 || puntuacion[1]>=5){ //Primero se revisa si alguno de los dos jugadores ganó |
| villani | 0:b24a8232cb00 | 120 | estado = GANADOR; //Cabio de estado a GANADOR |
| villani | 0:b24a8232cb00 | 121 | if(puntuacion[0] > puntuacion[1]) //Luego se revisa cual de los dos jugadores gano y se comunica serialmente |
| villani | 0:b24a8232cb00 | 122 | pc.printf("EL JUGARDOR 1 GANA!!!!\n"); |
| villani | 0:b24a8232cb00 | 123 | else |
| villani | 0:b24a8232cb00 | 124 | pc.printf("EL JUGARDOR 2 GANA!!!!\n"); |
| villani | 0:b24a8232cb00 | 125 | for(int p=0;p<8;p++){ //Se apagan todos los leds de juego |
| villani | 0:b24a8232cb00 | 126 | myleds[p] = 0; |
| villani | 0:b24a8232cb00 | 127 | } |
| villani | 0:b24a8232cb00 | 128 | |
| villani | 0:b24a8232cb00 | 129 | } |
| villani | 0:b24a8232cb00 | 130 | switch(tipo_de_transicion){ |
| villani | 0:b24a8232cb00 | 131 | case 0: //Transición del estado STANDBY a TURNO_J1 |
| villani | 0:b24a8232cb00 | 132 | //Todos los leds de juego parpaderan lentamente tres veces antes de dar inicio al juego |
| villani | 0:b24a8232cb00 | 133 | if(t<50){ //Los primeros 500ms... |
| villani | 0:b24a8232cb00 | 134 | for(int p=0;p<8;p++){ //Se encienden todos los leds de juego |
| villani | 0:b24a8232cb00 | 135 | myleds[p] = 1; |
| villani | 0:b24a8232cb00 | 136 | } |
| villani | 0:b24a8232cb00 | 137 | } |
| villani | 0:b24a8232cb00 | 138 | else if(t>=50 && t<100){ //Los siguientes 500ms... |
| villani | 0:b24a8232cb00 | 139 | for(int p=0;p<8;p++){ //Se apagan todos los leds de juego |
| villani | 0:b24a8232cb00 | 140 | myleds[p] = 0; |
| villani | 0:b24a8232cb00 | 141 | } |
| villani | 0:b24a8232cb00 | 142 | } |
| villani | 0:b24a8232cb00 | 143 | else if(t>=100 && t<150){ //Los siguientes 500ms... |
| villani | 0:b24a8232cb00 | 144 | for(int p=0;p<8;p++){ //Se encienden todos los leds de juego |
| villani | 0:b24a8232cb00 | 145 | myleds[p] = 1; |
| villani | 0:b24a8232cb00 | 146 | } |
| villani | 0:b24a8232cb00 | 147 | } |
| villani | 0:b24a8232cb00 | 148 | else if(t>=150 && t<200){ //Los siguientes 500ms... |
| villani | 0:b24a8232cb00 | 149 | for(int p=0;p<8;p++){ //Se apagan todos los leds de juego |
| villani | 0:b24a8232cb00 | 150 | myleds[p] = 0; |
| villani | 0:b24a8232cb00 | 151 | } |
| villani | 0:b24a8232cb00 | 152 | } |
| villani | 0:b24a8232cb00 | 153 | else if(t>=200 && t<400){ //El siguiente segundo... |
| villani | 0:b24a8232cb00 | 154 | for(int p=0;p<8;p++){ //Se encienden todos los leds de juego |
| villani | 0:b24a8232cb00 | 155 | myleds[p] = 1; |
| villani | 0:b24a8232cb00 | 156 | } |
| villani | 0:b24a8232cb00 | 157 | } |
| villani | 0:b24a8232cb00 | 158 | else if(t>=400){ //Luego de 4s del ultimo reinicio del timer... |
| villani | 0:b24a8232cb00 | 159 | for(int p=0;p<8;p++){ //Se apagan todos los leds de juego |
| villani | 0:b24a8232cb00 | 160 | myleds[p] = 0; |
| villani | 0:b24a8232cb00 | 161 | } |
| villani | 0:b24a8232cb00 | 162 | t = 0; //Se reinicia el timer t |
| villani | 0:b24a8232cb00 | 163 | estado = TURNO_J1; //Se cambia el estado al turno del jugador 1 |
| villani | 0:b24a8232cb00 | 164 | direccion = 0; //Se ajustan las condiciones iniciales de "la luz" |
| villani | 0:b24a8232cb00 | 165 | posicion_leds = 0; |
| villani | 0:b24a8232cb00 | 166 | LED_JUG_2 = 0; //Se apaga el led de turno 2 mientras que el otro se deja encendido |
| villani | 0:b24a8232cb00 | 167 | } |
| villani | 0:b24a8232cb00 | 168 | break; |
| villani | 0:b24a8232cb00 | 169 | case 1: //Trancición entre los turnos de los jugadores |
| villani | 0:b24a8232cb00 | 170 | //El led de juego que se encontraba encendido al momento de la pulsación del jugador en su turno se pondra a parpadear rapidamente (100ms) por un breve periodo de tiempo antes del siguiente turno |
| villani | 0:b24a8232cb00 | 171 | if(t>10 && parpadeo<15){ |
| villani | 0:b24a8232cb00 | 172 | parpadeo++; |
| villani | 0:b24a8232cb00 | 173 | myleds[posicion_leds]=!myleds[posicion_leds]; |
| villani | 0:b24a8232cb00 | 174 | t = 0; //Se reinicia el timer t |
| villani | 0:b24a8232cb00 | 175 | } |
| villani | 0:b24a8232cb00 | 176 | if(parpadeo>=15){ |
| villani | 0:b24a8232cb00 | 177 | //En función de la variable "proximo_turno" se cambia el estado a "TURNO_J1" o "TURNO_J2" y se ajustan las condiciones iniciales y al estado que se cambiara |
| villani | 0:b24a8232cb00 | 178 | if(prox_turno==0){ |
| villani | 0:b24a8232cb00 | 179 | direccion = 0; |
| villani | 0:b24a8232cb00 | 180 | posicion_leds = 0; |
| villani | 0:b24a8232cb00 | 181 | LED_JUG_1 = 1; |
| villani | 0:b24a8232cb00 | 182 | LED_JUG_2 = 0; |
| villani | 0:b24a8232cb00 | 183 | estado = TURNO_J1; |
| villani | 0:b24a8232cb00 | 184 | } |
| villani | 0:b24a8232cb00 | 185 | else if(prox_turno==1){ |
| villani | 0:b24a8232cb00 | 186 | direccion = 1; |
| villani | 0:b24a8232cb00 | 187 | posicion_leds = 7; |
| villani | 0:b24a8232cb00 | 188 | LED_JUG_1 = 0; |
| villani | 0:b24a8232cb00 | 189 | LED_JUG_2 = 1; |
| villani | 0:b24a8232cb00 | 190 | estado = TURNO_J2; |
| villani | 0:b24a8232cb00 | 191 | } |
| villani | 0:b24a8232cb00 | 192 | parpadeo = 0; //Se resetea la variable |
| villani | 0:b24a8232cb00 | 193 | } |
| villani | 0:b24a8232cb00 | 194 | break; |
| villani | 0:b24a8232cb00 | 195 | default: //No deberia pasar nunca pero esta puesto por las dudas |
| villani | 0:b24a8232cb00 | 196 | tipo_de_transicion = 0; |
| villani | 0:b24a8232cb00 | 197 | break; |
| villani | 0:b24a8232cb00 | 198 | } |
| villani | 0:b24a8232cb00 | 199 | break; |
| villani | 0:b24a8232cb00 | 200 | case TURNO_J1: |
| villani | 0:b24a8232cb00 | 201 | switch(direccion){ //Controla que la variable "posicion_leds" vaya de 0 a 7 y viceversa |
| villani | 0:b24a8232cb00 | 202 | case 0: //Dirección estandar |
| villani | 0:b24a8232cb00 | 203 | if(t >= 5){ //Tiempo en el que tarda un "pasar la luz de un led al siguiente" |
| villani | 0:b24a8232cb00 | 204 | posicion_leds++; |
| villani | 0:b24a8232cb00 | 205 | t = 0; //Se resetea el tiempo |
| villani | 0:b24a8232cb00 | 206 | } |
| villani | 0:b24a8232cb00 | 207 | if(posicion_leds >=7) //Una vez llegando al ultimo led de juego... |
| villani | 0:b24a8232cb00 | 208 | direccion = 1; //Cambio de dirección |
| villani | 0:b24a8232cb00 | 209 | break; |
| villani | 0:b24a8232cb00 | 210 | case 1: //Dirección inversa |
| villani | 0:b24a8232cb00 | 211 | if(t >= 5){ //Tiempo en el que tarda un "pasar la luz de un led al anterior" |
| villani | 0:b24a8232cb00 | 212 | posicion_leds--; |
| villani | 0:b24a8232cb00 | 213 | t = 0; //Se resetea el tiempo |
| villani | 0:b24a8232cb00 | 214 | } |
| villani | 0:b24a8232cb00 | 215 | if(posicion_leds <=0) ///Una vez llegando al primer led de juego... |
| villani | 0:b24a8232cb00 | 216 | direccion = 0; //Cambio de dirrección |
| villani | 0:b24a8232cb00 | 217 | break; |
| villani | 0:b24a8232cb00 | 218 | default: //No deberia pasar nunca pero esta puesto por las dudas |
| villani | 0:b24a8232cb00 | 219 | direccion = 0; |
| villani | 0:b24a8232cb00 | 220 | break; |
| villani | 0:b24a8232cb00 | 221 | } |
| villani | 0:b24a8232cb00 | 222 | for(int p=0;p<8;p++){ //Primero se apagan todos los leds de juego |
| villani | 0:b24a8232cb00 | 223 | myleds[p] = 0; |
| villani | 0:b24a8232cb00 | 224 | } |
| villani | 0:b24a8232cb00 | 225 | myleds[posicion_leds] = 1; //Luego se prende unicamente el led de juego que la variable "posicion_leds" defina |
| villani | 0:b24a8232cb00 | 226 | if(mypuls[0] == 1){ //Pulsación del jugador 1 |
| villani | 0:b24a8232cb00 | 227 | if(posicion_leds==7) //Si el led se juego encendido es el ultimo... |
| villani | 0:b24a8232cb00 | 228 | puntuacion[0]++; //Se logra puntuar |
| villani | 0:b24a8232cb00 | 229 | t = 0; //Se resetea el tiempo |
| villani | 0:b24a8232cb00 | 230 | tipo_de_transicion = 1; //Se indica que trancición de ejecutara |
| villani | 0:b24a8232cb00 | 231 | estado = TRANSICION; //Se cambia el estado |
| villani | 0:b24a8232cb00 | 232 | prox_turno = 1; //Se indica que el proximo turno es del jugador 2 |
| villani | 0:b24a8232cb00 | 233 | pc.printf("JUGARDOR 1:%d JUGADOR 2:%d\n",puntuacion[0],puntuacion[1]); //Se comunica la puntuación por comunicación serial |
| villani | 0:b24a8232cb00 | 234 | } |
| villani | 0:b24a8232cb00 | 235 | break; |
| villani | 0:b24a8232cb00 | 236 | case TURNO_J2: |
| villani | 0:b24a8232cb00 | 237 | switch(direccion){ //Controla que la variable "posicion_leds" vaya de 0 a 7 y viceversa |
| villani | 0:b24a8232cb00 | 238 | case 0: //Dirección estandar |
| villani | 0:b24a8232cb00 | 239 | if(t >= 5){ //Tiempo en el que tarda un "pasar la luz de un led al siguiente" |
| villani | 0:b24a8232cb00 | 240 | posicion_leds++; |
| villani | 0:b24a8232cb00 | 241 | t = 0; //Se resetea el tiempo |
| villani | 0:b24a8232cb00 | 242 | } |
| villani | 0:b24a8232cb00 | 243 | if(posicion_leds >=7) //Una vez llegando al ultimo led de juego... |
| villani | 0:b24a8232cb00 | 244 | direccion = 1; //Cambio de dirección |
| villani | 0:b24a8232cb00 | 245 | break; |
| villani | 0:b24a8232cb00 | 246 | case 1: //Dirección inversa |
| villani | 0:b24a8232cb00 | 247 | if(t >= 5){ //Tiempo en el que tarda un "pasar la luz de un led al anterior" |
| villani | 0:b24a8232cb00 | 248 | posicion_leds--; |
| villani | 0:b24a8232cb00 | 249 | t = 0; //Se resetea el tiempo |
| villani | 0:b24a8232cb00 | 250 | } |
| villani | 0:b24a8232cb00 | 251 | if(posicion_leds <=0) //Una vez llegando al primer led de juego... |
| villani | 0:b24a8232cb00 | 252 | direccion = 0; //Cambio de dirrección |
| villani | 0:b24a8232cb00 | 253 | break; |
| villani | 0:b24a8232cb00 | 254 | default: //No deberia pasar nunca pero esta puesto por las dudas |
| villani | 0:b24a8232cb00 | 255 | direccion = 0; |
| villani | 0:b24a8232cb00 | 256 | break; |
| villani | 0:b24a8232cb00 | 257 | } |
| villani | 0:b24a8232cb00 | 258 | for(int p=0;p<8;p++){ //Primero se apagan todos los leds de juego |
| villani | 0:b24a8232cb00 | 259 | myleds[p] = 0; |
| villani | 0:b24a8232cb00 | 260 | } |
| villani | 0:b24a8232cb00 | 261 | myleds[posicion_leds] = 1; //Luego se prende unicamente el led de juego que la variable "posicion_leds" defina |
| villani | 0:b24a8232cb00 | 262 | if(mypuls[1] == 1){ //Pulsación del jugador 2 |
| villani | 0:b24a8232cb00 | 263 | if(posicion_leds==0) //Si el led se juego encendido es el primero... |
| villani | 0:b24a8232cb00 | 264 | puntuacion[1]++; //Se logra puntuar |
| villani | 0:b24a8232cb00 | 265 | t = 0; //Se resetea el tiempo |
| villani | 0:b24a8232cb00 | 266 | tipo_de_transicion = 1; //Se indica que trancición de ejecutara |
| villani | 0:b24a8232cb00 | 267 | estado = TRANSICION; //Se cambia el estado |
| villani | 0:b24a8232cb00 | 268 | prox_turno = 0; //Se indica que el proximo turno es del jugador 1 |
| villani | 0:b24a8232cb00 | 269 | pc.printf("JUGARDOR 1:%d JUGADOR 2:%d\n",puntuacion[0],puntuacion[1]); //Se comunica la puntuación por comunicación serial |
| villani | 0:b24a8232cb00 | 270 | } |
| villani | 0:b24a8232cb00 | 271 | break; |
| villani | 0:b24a8232cb00 | 272 | case GANADOR: |
| villani | 0:b24a8232cb00 | 273 | //Todos los leds de juego parpaderan |
| villani | 0:b24a8232cb00 | 274 | if(t>10 && parpadeo<50){ //Ajuste de tiempo y cantidad de veces que los leds parpadearan |
| villani | 0:b24a8232cb00 | 275 | parpadeo++; |
| villani | 0:b24a8232cb00 | 276 | for(int p=0;p<8;p++){ |
| villani | 0:b24a8232cb00 | 277 | myleds[p]=!myleds[p]; |
| villani | 0:b24a8232cb00 | 278 | } |
| villani | 0:b24a8232cb00 | 279 | t = 0; |
| villani | 0:b24a8232cb00 | 280 | } |
| villani | 0:b24a8232cb00 | 281 | if(parpadeo>=50){ //Una vez finalizado el parpadeo... |
| villani | 0:b24a8232cb00 | 282 | parpadeo = 0; |
| villani | 0:b24a8232cb00 | 283 | estado = STANDBY; //Se cambia al estado inicial |
| villani | 0:b24a8232cb00 | 284 | puntuacion[0] = 0; //Se reinician ambas puntuaciones |
| villani | 0:b24a8232cb00 | 285 | puntuacion[1] = 0; |
| villani | 0:b24a8232cb00 | 286 | } |
| villani | 0:b24a8232cb00 | 287 | break; |
| villani | 0:b24a8232cb00 | 288 | } |
| villani | 0:b24a8232cb00 | 289 | } |
| villani | 0:b24a8232cb00 | 290 | |
| villani | 0:b24a8232cb00 | 291 | |
| villani | 0:b24a8232cb00 | 292 | void Display(int numero_1, int numero_2){ |
| villani | 0:b24a8232cb00 | 293 | //A la funcion se le ingresan dos variales: puntuacion[0] y puntuacion[1] |
| villani | 0:b24a8232cb00 | 294 | static int posicion=0; //Variable que difine los estados de los transistores colocados en los catodos de los displays |
| villani | 0:b24a8232cb00 | 295 | if(clk==1){ //Tiempo de multiplexación: 10ms |
| villani | 0:b24a8232cb00 | 296 | if(posicion==1){ |
| villani | 0:b24a8232cb00 | 297 | posicion = 0; //Cambio de la variable para el siguiento uso |
| villani | 0:b24a8232cb00 | 298 | K_2 = 0; //Transistor 2 al corte |
| villani | 0:b24a8232cb00 | 299 | K_1 = 1; //Transistor 1 en saturación |
| villani | 0:b24a8232cb00 | 300 | //Impresión de la puntuación del jugador 1 en el primer display |
| villani | 0:b24a8232cb00 | 301 | SEGMENTO_A = numero_display[numero_1]&0b1000000; |
| villani | 0:b24a8232cb00 | 302 | SEGMENTO_B = numero_display[numero_1]&0b0100000; |
| villani | 0:b24a8232cb00 | 303 | SEGMENTO_C = numero_display[numero_1]&0b0010000; |
| villani | 0:b24a8232cb00 | 304 | SEGMENTO_D = numero_display[numero_1]&0b0001000; |
| villani | 0:b24a8232cb00 | 305 | SEGMENTO_E = numero_display[numero_1]&0b0000100; |
| villani | 0:b24a8232cb00 | 306 | SEGMENTO_F = numero_display[numero_1]&0b0000010; |
| villani | 0:b24a8232cb00 | 307 | SEGMENTO_G = numero_display[numero_1]&0b0000001; |
| villani | 0:b24a8232cb00 | 308 | } |
| villani | 0:b24a8232cb00 | 309 | else{ |
| villani | 0:b24a8232cb00 | 310 | posicion = 1; //Cambio de la variable para el siguiento uso |
| villani | 0:b24a8232cb00 | 311 | K_1 = 0; //Transistor 1 al corte |
| villani | 0:b24a8232cb00 | 312 | K_2 = 1; //Transistor 2 en saturación |
| villani | 0:b24a8232cb00 | 313 | //Impresión de la puntuación del jugador 2 en el segundo display |
| villani | 0:b24a8232cb00 | 314 | SEGMENTO_A = numero_display[numero_2]&0b1000000; |
| villani | 0:b24a8232cb00 | 315 | SEGMENTO_B = numero_display[numero_2]&0b0100000; |
| villani | 0:b24a8232cb00 | 316 | SEGMENTO_C = numero_display[numero_2]&0b0010000; |
| villani | 0:b24a8232cb00 | 317 | SEGMENTO_D = numero_display[numero_2]&0b0001000; |
| villani | 0:b24a8232cb00 | 318 | SEGMENTO_E = numero_display[numero_2]&0b0000100; |
| villani | 0:b24a8232cb00 | 319 | SEGMENTO_F = numero_display[numero_2]&0b0000010; |
| villani | 0:b24a8232cb00 | 320 | SEGMENTO_G = numero_display[numero_2]&0b0000001; |
| villani | 0:b24a8232cb00 | 321 | } |
| villani | 0:b24a8232cb00 | 322 | clk = 0; //Reseteo del clock |
| villani | 0:b24a8232cb00 | 323 | } |
| villani | 0:b24a8232cb00 | 324 | } |