Bomba

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
Jumaroag
Date:
Fri Jun 21 02:55:49 2019 +0000
Commit message:
Ejer03

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r d570b80c224b main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Jun 21 02:55:49 2019 +0000
@@ -0,0 +1,574 @@
+#include "mbed.h"
+
+//Defines maquinas de estados
+#define Esperando_Inicio 0
+#define Codigo 1
+#define Esperando_Desactivacion 2
+#define Comparacion_Codigo 3
+#define Termino 4
+#define Control_Tiempo 5
+
+//Entradas Digitales
+DigitalIn Cable_0(PTE5);
+DigitalIn Cable_1(PTE4);
+DigitalIn Cable_2(PTE3);
+DigitalIn Cable_3(PTE2);
+DigitalIn Pulsador(PTB11);
+
+//Salidas Digitales
+DigitalOut Segmento_A(PTC7);
+DigitalOut Segmento_B(PTC0);
+DigitalOut Segmento_C(PTC3);
+DigitalOut Segmento_D(PTC4);
+DigitalOut Segmento_E(PTC5);
+DigitalOut Segmento_F(PTC6);
+DigitalOut Segmento_G(PTC10);
+DigitalOut Habilitacion_Decenas(PTA4);
+DigitalOut Habilitacion_Unidades(PTA12);
+
+DigitalOut led_verde(LED_GREEN);
+DigitalOut led_rojo(LED_RED);
+
+//Variables
+unsigned char combinacion[4],Estado_General=Esperando_Inicio,tiempo_rebote=0,a=0;
+unsigned char estado_mostrar=0,decena=0,unidad=0,tiempo_decenas=0,tiempo_unidades=0,tiempo_exploto=0,b=0,flag=0,hab_parpadeo=0,estado_anterior=0;//display
+unsigned char n;//Tiempo regresivo
+
+//Ticker y sus funciones
+Ticker T_rebote,tiempo,barrido;
+
+void anti_rebote(void);
+void tiempito(void);
+void parpadeo(void);
+void tiempo_barrido(void);
+
+//Funciones
+void mostrar(unsigned char n);//Funcion que muestra por los displays el nro que le pases
+int main()
+{
+    //Habilito PullUp interno para los cables y el pulsador
+    Cable_0.mode(PullUp);
+    Cable_1.mode(PullUp);
+    Cable_2.mode(PullUp);
+    Cable_3.mode(PullUp);
+    Pulsador.mode(PullUp);
+    
+    T_rebote.attach(&anti_rebote, 0.1);//Inicio timmer 1ms
+    barrido.attach(&tiempo_barrido, 0.01);//inciio timmer para barrido de displays
+    
+    unsigned char codigo[4],for_a=0,antirebote_pulsador=0,antirebote_cables=0,antiprintf=0,habilitacion_pulsador=0;
+    unsigned char hab_cable_3=0,hab_cable_2=0,hab_cable_1=0,hab_cable_0=0;
+    
+    led_verde=1;
+    led_rojo=1;
+    
+    printf("-----Juego de la Bomba-----\n");//Introduccion al juego
+    while(1)
+    {
+        switch (Estado_General)//Maquina de estados General del programa
+        {
+            default:
+            
+            case Esperando_Inicio://Se espera a que se active el juego
+                hab_cable_3=0;
+                hab_cable_2=0;
+                hab_cable_1=0;
+                hab_cable_0=0;
+                led_verde=0;//Enciendo el led verde
+                led_rojo=1;
+                n=20;//Seteo el tiempo
+                mostrar(n);
+                for(a=0;a<4;a++)
+                {
+                    combinacion[a]=0;
+                }
+                a=0;
+                antirebote_cables=0;
+                while(antiprintf==0)
+                {
+                    printf("Pulse para iniciar\n");
+                    antiprintf=1;
+                    tiempo.detach();//reinicio los timmers
+                }
+                
+                //Boton INICIO - si lo pulso incia el juego y cambio de estdado
+                if(Pulsador==0 && antirebote_pulsador==0 && habilitacion_pulsador==1)
+                {
+                    tiempo_rebote=0;
+                    antirebote_pulsador=1;
+                }
+                if(tiempo_rebote==1 && Pulsador==0 && habilitacion_pulsador==1)
+                {
+                    Estado_General=Codigo;//Cambio de estado
+                    antirebote_pulsador=0;
+                    antiprintf=0;
+                    led_verde=1;
+                    habilitacion_pulsador=0;
+                }
+                if(tiempo_rebote==1 && Pulsador==1 && habilitacion_pulsador==1)
+                    antirebote_pulsador=0;
+                    
+                if(Pulsador==1 && antirebote_pulsador==0)
+                {
+                    tiempo_rebote=0;
+                    antirebote_pulsador=1;
+                }
+                if(tiempo_rebote==1 && Pulsador==1)
+                {
+                    antirebote_pulsador=0;
+                    habilitacion_pulsador=1;
+                }
+                if(tiempo_rebote==1 && Pulsador==0)
+                    antirebote_pulsador=0;
+                break;
+            
+            case Codigo://Se genera el codigo de desactivacion y se imprime
+                mostrar(n);
+                printf("-El CODIGO es: ");
+                codigo[0]=rand()%4+1;
+                do//Genero un codigo aleatorio de 4 digitos entre 1 y 4 sin repetir
+                {
+                    codigo[1]=rand()%4+1;
+                }
+                while(codigo[0]==codigo[1]);
+                do
+                {
+                    codigo[2]=rand()%4+1;
+                }
+                while((codigo[0]==codigo[2]) || (codigo[1]==codigo[2]));
+                do
+                {
+                    codigo[3]=rand()%4+1;
+                }
+                while((codigo[0]==codigo[3]) || (codigo[1]==codigo[3]) || (codigo[2]==codigo[3]));
+                for(for_a=0;for_a<4;for_a++)
+                {
+                    printf("%i",codigo[for_a]);
+                    if(for_a==3)
+                        printf("\n");
+                }
+                Estado_General=Esperando_Desactivacion;//Una vez generado el codigo cambio de estado
+                tiempo.attach(&tiempito, 1);//Inicia la cuenta regresiva
+                break;
+                
+            case Esperando_Desactivacion://Se desactiva la bomba
+                mostrar(n);
+                //Cable 0
+                if(Cable_0==1 && antirebote_cables==0 && hab_cable_0==0)
+                {
+                    tiempo_rebote=0;
+                    antirebote_cables=1;
+                    hab_cable_0=1;
+                }
+                if(Cable_0==1 && antirebote_cables==1 && tiempo_rebote==1)
+                {
+                    combinacion[a]=1;
+                    Estado_General=Comparacion_Codigo;
+                    a++;
+                    antirebote_cables=0;
+                }
+                if(Cable_0==0 && antirebote_cables==1 && tiempo_rebote==1)
+                {
+                    antirebote_cables=0;
+                    hab_cable_0=0;
+                }   
+                //Cable 1
+                if(Cable_1==1 && antirebote_cables==0 && hab_cable_1==0)
+                {
+                    tiempo_rebote=0;
+                    antirebote_cables=2;
+                    hab_cable_1=1;
+                }
+                if(Cable_1==1 && antirebote_cables==2 && tiempo_rebote==1)
+                {
+                    combinacion[a]=2;
+                    Estado_General=Comparacion_Codigo;
+                    a++;
+                    antirebote_cables=0;
+                }
+                if(Cable_1==0 && antirebote_cables==2 && tiempo_rebote==1)
+                {
+                    antirebote_cables=0;
+                    hab_cable_1=0;
+                }
+                
+                //Cable 2
+                if(Cable_2==1 && antirebote_cables==0 && hab_cable_2==0)
+                {
+                    tiempo_rebote=0;
+                    antirebote_cables=3;
+                    hab_cable_2=1;
+                }
+                if(Cable_2==1 && antirebote_cables==3 && tiempo_rebote==1)
+                {
+                    combinacion[a]=3;
+                    Estado_General=Comparacion_Codigo;
+                    a++;
+                    antirebote_cables=0;
+                }
+                if(Cable_2==0 && antirebote_cables==3 && tiempo_rebote==1)
+                {
+                    antirebote_cables=0;
+                    hab_cable_2=0;
+                }
+                
+                //Cable 3
+                if(Cable_3==1 && antirebote_cables==0 && hab_cable_3==0)
+                {
+                    tiempo_rebote=0;
+                    antirebote_cables=4;
+                    hab_cable_3=1;
+                }
+                if(Cable_3==1 && antirebote_cables==4 && tiempo_rebote==1)
+                {
+                    combinacion[a]=4;
+                    Estado_General=Comparacion_Codigo;
+                    a++;
+                    antirebote_cables=0;
+                }
+                if(Cable_3==0 && antirebote_cables==4 && tiempo_rebote==1)
+                {
+                    antirebote_cables=0;
+                    hab_cable_3=0;
+                }
+                
+                //Boton Para RESET - si se pulsa vuelvo a Esperando Inicio
+                if(Pulsador==0 && antirebote_pulsador==0 && habilitacion_pulsador==1)
+                {
+                    tiempo_rebote=0;
+                    antirebote_pulsador=1;
+                }
+                if(tiempo_rebote==1 && Pulsador==0 && habilitacion_pulsador==1)
+                {
+                    Estado_General=Esperando_Inicio;//Reseteo y vuelvo al estado inicial
+                    antirebote_pulsador=0;
+                    antiprintf=0;
+                    printf("RESET\n");
+                    habilitacion_pulsador=0;
+                }
+                if(tiempo_rebote==1 && Pulsador==1 && habilitacion_pulsador==1)
+                    antirebote_pulsador=0;
+                
+                if(Pulsador==1 && antirebote_pulsador==0)
+                {
+                    tiempo_rebote=0;
+                    antirebote_pulsador=1;
+                }
+                if(tiempo_rebote==1 && Pulsador==1)
+                {
+                    antirebote_pulsador=0;
+                    habilitacion_pulsador=1;
+                }
+                if(tiempo_rebote==1 && Pulsador==0)
+                    antirebote_pulsador=0;                
+                break;
+                    
+            case Comparacion_Codigo://comparo el codigo con la combinacion
+                if(combinacion[a-1]!=codigo[a-1])//Si el cable es incorrecto perdes
+                {
+                    printf("\n-----PERDISTE-----\n");
+                    Estado_General=Termino;
+                }
+                if(combinacion[a-1]== codigo[a-1])//si es correcto seguis jugando
+                    Estado_General=Esperando_Desactivacion;
+                if((a==4) && (Estado_General==Esperando_Desactivacion))//si sacas el ultimo cable y es correcto ganas
+                {
+                    printf("\n-----GANASTE-----\n");
+                    Estado_General=Termino;
+                }
+                break;
+            
+            case Termino://Hago parpadear el diaplay y el led correspondiente - espero boton para volver a inicio
+                mostrar(n);
+                while(antiprintf==0)
+                {
+                    printf("Conecte todos los cables\nPulse para iniciar de nuevo\n\n");
+                    tiempo.detach();//freno el tiempo donde haya quedado
+                    tiempo.attach(&parpadeo, 0.2);//inicio el parpadeo
+                    antiprintf=1;
+                }
+                if((b%2)==1 && hab_parpadeo==0)
+                {
+                    estado_mostrar=5;
+                    if(a==4)
+                      led_verde=0;
+                    if(a!=4)
+                        led_rojo=0;
+                    hab_parpadeo=1;
+                }
+                if((b%2)==0 && hab_parpadeo==1)
+                {
+                    estado_mostrar=1;
+                    if(a==4)
+                      led_verde=1;
+                    if(a!=4)
+                        led_rojo=1;
+                    hab_parpadeo=0;
+                }
+                if(b==10)
+                {
+                    tiempo.detach();
+                    led_verde=1;
+                    led_rojo=1;
+                    b=0;
+                }
+                if(Pulsador==0 && antirebote_pulsador==0 && habilitacion_pulsador==1)
+                {
+                    tiempo_rebote=0;
+                    antirebote_pulsador=1;
+                }
+                if(tiempo_rebote==1 && Pulsador==0 && habilitacion_pulsador==1)
+                {
+                    Estado_General=Esperando_Inicio;//Vuelvo al estado de inicio
+                    antirebote_pulsador=0;
+                    antiprintf=0;
+                }
+                if(tiempo_rebote==1 && Pulsador==1 && habilitacion_pulsador==1)
+                    antirebote_pulsador=0;
+                    
+                if(Pulsador==1 && antirebote_pulsador==0)
+                {
+                    tiempo_rebote=0;
+                    antirebote_pulsador=1;
+                }
+                if(tiempo_rebote==1 && Pulsador==1)
+                {
+                    antirebote_pulsador=0;
+                    habilitacion_pulsador=1;
+                }
+                if(tiempo_rebote==1 && Pulsador==0)
+                    antirebote_pulsador=0;  
+            break;
+        }//sw
+    }//while
+}//main
+
+
+void anti_rebote(void)//cada 1ms
+{
+  tiempo_rebote++;
+  if(tiempo_rebote==10)
+    tiempo_rebote=0;
+}
+
+void tiempito(void)//Cuenta regresiva cada 1 seg
+{
+    n--;
+    if(n==0)
+    {
+        printf("\nPERDISTE\n");
+        Estado_General=Termino;
+        a=0;       
+    }
+}
+
+void parpadeo(void)
+{
+    b++;
+}
+
+void tiempo_barrido(void)
+{
+    if(estado_mostrar==2)
+        if(tiempo_decenas == 0)//if del demonio
+            tiempo_decenas++;
+    if(estado_mostrar==4)
+        if(tiempo_unidades == 0)//if del demonio
+            tiempo_unidades++;
+}
+
+void mostrar(unsigned char n)//Funcion que muestra por los displays el nro que le pases
+{
+    switch (estado_mostrar)
+    {
+        default:
+        
+        case 0:
+            estado_anterior=0;
+            decena=n/10;
+            unidad=n%10;
+            Habilitacion_Decenas=1;
+            Habilitacion_Unidades=1;
+            estado_mostrar=1;
+            break;
+            
+        case 1:
+            estado_anterior=1;
+            if(decena==0)
+            {
+                Segmento_A=1;
+                Segmento_B=1;
+                Segmento_C=1;
+                Segmento_D=1;
+                Segmento_E=1;
+                Segmento_F=1;
+                Segmento_G=0;
+            }
+            if(decena==1)
+            {
+                Segmento_A=0;
+                Segmento_B=1;
+                Segmento_C=1;
+                Segmento_D=0;
+                Segmento_E=0;
+                Segmento_F=0;
+                Segmento_G=0;
+            }
+            if(decena==2)
+            {
+                Segmento_A=1;
+                Segmento_B=1;
+                Segmento_C=0;
+                Segmento_D=1;
+                Segmento_E=1;
+                Segmento_F=0;
+                Segmento_G=1; 
+            }
+            if(decena==3)
+            {
+                Segmento_A=1;
+                Segmento_B=1;
+                Segmento_C=1;
+                Segmento_D=1;
+                Segmento_E=0;
+                Segmento_F=0;
+                Segmento_G=1; 
+            }
+            estado_mostrar=2;
+            break;
+        
+        case 2:
+            estado_anterior=2;
+            Habilitacion_Decenas=0;
+            Habilitacion_Unidades=1;
+            if(tiempo_decenas==1)
+            {
+                tiempo_decenas=0;
+                estado_mostrar=3;
+                Habilitacion_Decenas=1;
+                Habilitacion_Unidades=1;
+            }
+            break;
+            
+        case 3:
+            estado_anterior=3;
+            if(unidad==0)
+            {
+                Segmento_A=1;
+                Segmento_B=1;
+                Segmento_C=1;
+                Segmento_D=1;
+                Segmento_E=1;
+                Segmento_F=1;
+                Segmento_G=0;
+            }
+            if(unidad==1)
+            {
+                Segmento_A=0;
+                Segmento_B=1;
+                Segmento_C=1;
+                Segmento_D=0;
+                Segmento_E=0;
+                Segmento_F=0;
+                Segmento_G=0; 
+            }
+            if(unidad==2)
+            {
+                Segmento_A=1;
+                Segmento_B=1;
+                Segmento_C=0;
+                Segmento_D=1;
+                Segmento_E=1;
+                Segmento_F=0;
+                Segmento_G=1; 
+            }
+            if(unidad==3)
+            {
+                Segmento_A=1;
+                Segmento_B=1;
+                Segmento_C=1;
+                Segmento_D=1;
+                Segmento_E=0;
+                Segmento_F=0;
+                Segmento_G=1;
+            }
+            if(unidad==4)
+            {
+                Segmento_A=0;
+                Segmento_B=1;
+                Segmento_C=1;
+                Segmento_D=0;
+                Segmento_E=0;
+                Segmento_F=1;
+                Segmento_G=1; 
+            }
+            if(unidad==5)
+            {
+                Segmento_A=1;
+                Segmento_B=0;
+                Segmento_C=1;
+                Segmento_D=1;
+                Segmento_E=0;
+                Segmento_F=1;
+                Segmento_G=1;   
+            }
+            if(unidad==6)
+            {
+                Segmento_A=1;
+                Segmento_B=0;
+                Segmento_C=1;
+                Segmento_D=1;
+                Segmento_E=1;
+                Segmento_F=1;
+                Segmento_G=1; 
+            }
+            if(unidad==7)
+            {
+                Segmento_A=1;
+                Segmento_B=1;
+                Segmento_C=1;
+                Segmento_D=0;
+                Segmento_E=0;
+                Segmento_F=0;
+                Segmento_G=0; 
+            }
+            if(unidad==8)
+            {
+                Segmento_A=1;
+                Segmento_B=1;
+                Segmento_C=1;
+                Segmento_D=1;
+                Segmento_E=1;
+                Segmento_F=1;
+                Segmento_G=1; 
+            }
+            if(unidad==9)
+            {
+                Segmento_A=1;
+                Segmento_B=1;
+                Segmento_C=1;
+                Segmento_D=0;
+                Segmento_E=0;
+                Segmento_F=1;
+                Segmento_G=1;  
+            }
+            estado_mostrar=4;
+            break;
+
+        case 4:
+            estado_anterior=4;
+            Habilitacion_Decenas=1;
+            Habilitacion_Unidades=0;
+            if(tiempo_unidades==1)
+            {
+                tiempo_unidades=0;
+                estado_mostrar=0;
+            }
+            break;
+            
+        case 5:
+            Habilitacion_Decenas=1;
+            Habilitacion_Unidades=1;
+            break;
+    }//sw
+}//funcion
\ No newline at end of file
diff -r 000000000000 -r d570b80c224b mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Jun 21 02:55:49 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file