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
00001 00002 #include "mbed.h" 00003 #define CANT_PULSADORES 2 00004 Serial pc(USBTX, USBRX); 00005 Ticker tick; 00006 BusOut leds(D10,D9,D8,D6,D5,D4,D3,D2); 00007 DigitalOut A_D(PTB8); 00008 DigitalOut B_D(PTB9); 00009 DigitalOut C_D(PTB10); 00010 DigitalOut D_D(PTB11); 00011 DigitalOut E_D(PTE2); 00012 DigitalOut F_D(PTE3); 00013 DigitalOut G_D(PTE4); 00014 DigitalOut CAT(PTE5); 00015 BusIn pulsadores (D12,D11); 00016 int tiempo=0; 00017 int tiempo2=0; 00018 int valor = 0; 00019 int display=1; 00020 void funcion(); 00021 void flip() 00022 { 00023 funcion(); //coloco acà la funciòn para que se ejecute todo el tiempo 00024 if(tiempo<=50000) { 00025 tiempo++; 00026 } 00027 if(tiempo2<=800) { 00028 tiempo2++; 00029 } 00030 } 00031 int Led_Step(); // declaro las funciones 00032 void Maquina_General(void); 00033 void inicio(); 00034 void ganador(); 00035 int main() 00036 { 00037 tick.attach(&flip, 0.01); 00038 pulsadores[0].mode(PullNone); 00039 pulsadores[1].mode(PullNone); 00040 while (true) { 00041 Maquina_General(); 00042 } 00043 } 00044 /// 00045 void Maquina_General(void) 00046 { 00047 static int estado_A = 0; 00048 static int led_actual = 0; 00049 static int puntos_a = 0,puntos_b = 0; // lo pongo static porque sino me cambia el valor de los puntos 00050 int a=0, b=0; 00051 switch(estado_A) { 00052 case 0: 00053 inicio(); 00054 if(pulsadores[0] == 1 && pulsadores[1] == 1) { 00055 00056 estado_A = 1; //se prende el sistema 00057 puntos_a = 0; 00058 puntos_b = 0; 00059 tiempo=0; 00060 } 00061 break; 00062 case 1: //estado jugador 1 00063 Led_Step(); 00064 if(tiempo>=20) { //pequeña demora para evitar problemas 00065 if(pulsadores[0] == 1 ) { 00066 leds=0; 00067 led_actual = Led_Step(); //valor de estado de funcion Led_Step() 00068 if (led_actual==8) //en caso que sea el segundo sentido y asi detectar el led en el que paro 00069 a=2; 00070 if (led_actual==9) 00071 a=4; 00072 if (led_actual==10) 00073 a=6; 00074 if (led_actual==11) 00075 a=8; 00076 if (led_actual==12) 00077 a=10; 00078 if (led_actual==13) 00079 a=12; 00080 if(led_actual > 7) { 00081 led_actual = led_actual - a; // coloco esta variable en su led perteneciente 00082 } 00083 leds[led_actual]=1; //2 segundos prendido 00084 if(led_actual == 7) { 00085 puntos_a= puntos_a + 10; 00086 printf("el jugador 1 suma un punto\n"); 00087 leds[0]=1; 00088 leds[1]=1; 00089 leds[2]=1; 00090 leds[3]=1; 00091 leds[4]=1; 00092 leds[5]=1; 00093 leds[6]=1; 00094 leds[7]=1; 00095 } // sumo 10 puntos para luego en el multuplexado poder usar los 2 displays juntos 00096 valor = puntos_a + puntos_b; // valor que le llega al barrido 00097 estado_A = 3; // paso a la espera 00098 tiempo2=0; // hago que vuelva a contar el tiempo 2 00099 } 00100 } 00101 break; 00102 case 2: //estado jugador 2 00103 Led_Step(); 00104 if(pulsadores[1] == 1 ) { 00105 leds=0; 00106 led_actual = Led_Step(); //valor de estado de funcion Led_Step() 00107 if (led_actual==8) 00108 b=2; 00109 if (led_actual==9) 00110 b=4; 00111 if (led_actual==10) 00112 b=6; 00113 if (led_actual==11) 00114 b=8; 00115 if (led_actual==12) 00116 b=10; 00117 if (led_actual==13) 00118 b=12; 00119 if(led_actual > 7) { 00120 led_actual = led_actual - b; 00121 } 00122 leds[led_actual]=1; //2 segundos 00123 if(led_actual == 0) { 00124 puntos_b++; 00125 printf("el jugador 2 suma un punto\n"); 00126 leds[0]=1; 00127 leds[1]=1; 00128 leds[2]=1; 00129 leds[3]=1; 00130 leds[4]=1; 00131 leds[5]=1; 00132 leds[6]=1; 00133 leds[7]=1; 00134 } 00135 valor = puntos_a + puntos_b; 00136 estado_A = 4; 00137 tiempo2=0; 00138 } 00139 break; 00140 case 3: // Espero tiempo pausado jugador 1 00141 if(tiempo2==200) { 00142 leds[led_actual]=0; 00143 estado_A = 2; 00144 if(puntos_a >= 50) { 00145 estado_A = 0; // vuelvo al inicio asi en caso de que se desee se vuelva a iniciar el juego 00146 puntos_a=0; // vuelvo todo a cero por las dudas 00147 puntos_b=0; 00148 valor=0; 00149 printf("el jugaror 1 gana\n"); 00150 } 00151 tiempo=0; 00152 } 00153 break; 00154 case 4: // Espero tiempo pausado jugador 2 00155 if(tiempo2==200) { 00156 leds[led_actual]=0; 00157 estado_A = 1; 00158 if(puntos_b >= 2) { 00159 estado_A = 0; 00160 puntos_a=0; 00161 puntos_b=0; 00162 valor=0; 00163 printf("el jugaror 2 gana\n"); 00164 } 00165 tiempo=0; 00166 } 00167 break; 00168 } 00169 } 00170 /// 00171 int Led_Step(void) // funcion de secuencia ida y vuelva 00172 { 00173 static int estado = 0; 00174 switch(estado) { 00175 case 0: 00176 leds = 0; 00177 leds[0] = 1; //suma un punto jugador 2 00178 if(tiempo == 5) { // 0.05 SEG 00179 estado = 1; 00180 } 00181 break; 00182 case 1: 00183 leds=0; 00184 leds[1] = 1; 00185 if(tiempo == 10) { 00186 estado = 2; 00187 } 00188 break; 00189 case 2: 00190 leds=0; 00191 leds[2] = 1; 00192 if(tiempo == 15) { 00193 estado = 3; 00194 } 00195 break; 00196 case 3: 00197 leds=0; 00198 leds[3] = 1; 00199 if(tiempo == 20) { 00200 estado = 4; 00201 } 00202 break; 00203 case 4: 00204 leds=0; 00205 leds[4] = 1; 00206 if(tiempo == 25) { 00207 estado = 5; 00208 } 00209 break; 00210 case 5: 00211 leds=0; 00212 leds[5] = 1; 00213 if(tiempo == 30) { 00214 estado = 6; 00215 } 00216 break; 00217 case 6: 00218 leds=0; 00219 leds[6] = 1; 00220 if(tiempo == 35) { 00221 estado = 7; 00222 } 00223 break; 00224 case 7: 00225 leds=0; 00226 leds[7] = 1; //suma un punto jugador 1 00227 if(tiempo == 40) { 00228 estado = 8; 00229 } 00230 break; 00231 case 8: 00232 leds=0; 00233 leds[6] = 1; 00234 if(tiempo == 45) { 00235 estado = 9; 00236 } 00237 break; 00238 case 9: 00239 leds=0; 00240 leds[5] = 1; 00241 if(tiempo == 50) { 00242 estado = 10; 00243 } 00244 break; 00245 case 10: 00246 leds=0; 00247 leds[4] = 1; 00248 if(tiempo == 55) { 00249 estado = 11; 00250 } 00251 break; 00252 case 11: 00253 leds=0; 00254 leds[3] = 1; 00255 if(tiempo == 60) { 00256 estado = 12; 00257 } 00258 break; 00259 case 12: 00260 leds=0; 00261 leds[2] = 1; 00262 if(tiempo == 65) { 00263 estado = 13; 00264 } 00265 break; 00266 case 13: 00267 leds=0; 00268 leds[1] = 1; 00269 if(tiempo == 70) { 00270 estado = 0; 00271 tiempo=0; 00272 } 00273 break; 00274 } 00275 return estado; 00276 } 00277 /// 00278 void inicio(void) // funcion de espera antes que se inicie el juego 00279 { 00280 static int est = 0; 00281 switch(est) { 00282 case 0: 00283 leds = 0; 00284 leds[0] = 1; 00285 if(tiempo == 100) { //1 seg 00286 est = 1; 00287 } 00288 break; 00289 case 1: 00290 leds=0; 00291 leds[1] = 1; 00292 if(tiempo == 200) { 00293 est = 2; 00294 } 00295 break; 00296 case 2: 00297 leds=0; 00298 leds[2] = 1; 00299 if(tiempo == 300) { 00300 est = 3; 00301 } 00302 break; 00303 case 3: 00304 leds=0; 00305 leds[3] = 1; 00306 if(tiempo == 400) { 00307 est = 4; 00308 } 00309 break; 00310 case 4: 00311 leds=0; 00312 leds[4] = 1; 00313 if(tiempo == 500) { 00314 est = 5; 00315 } 00316 break; 00317 case 5: 00318 leds=0; 00319 leds[5] = 1; 00320 if(tiempo == 600) { 00321 est = 6; 00322 } 00323 break; 00324 case 6: 00325 leds=0; 00326 leds[6] = 1; 00327 if(tiempo == 700) { 00328 est = 7; 00329 } 00330 break; 00331 case 7: 00332 leds=0; 00333 leds[7] = 1; 00334 if(tiempo == 800) { 00335 est=0; 00336 tiempo = 0; 00337 } 00338 break; 00339 } 00340 } 00341 /// 00342 void funcion () // funcion de barrido multiplexado 00343 { 00344 int numeros[10]= {0b1111110, 0b0110000, 0b1101101, 0b1111001, 0b0110011, 0b1011011, 0b1011111, 0b1110000, 0b1111111, 0b1111011}; 00345 int d1; 00346 if(display==0) //ponemos estas 2 cuentas para distinto display y asi cambiarlo en cada catodo, por esto es que los puntos a se suman de a 10 00347 d1 = valor/10; 00348 else 00349 d1 = valor%10; 00350 00351 A_D = (numeros[d1] & 0b1000000) >> 6; 00352 B_D = (numeros[d1] & 0b100000) >> 5; 00353 C_D = (numeros[d1] & 0b10000) >> 4; 00354 D_D = (numeros[d1] & 0b1000) >> 3; 00355 E_D = (numeros[d1] & 0b100) >> 2; 00356 F_D = (numeros[d1] & 0b10) >> 1; 00357 G_D = numeros[d1] & 1; 00358 00359 display ? display = 0 : display = 1; //cambio el display 00360 CAT=display; // asigno ese cambio al cátodo 00361 } 00362 00363 00364
Generated on Wed Jul 13 2022 23:55:51 by
1.7.2