Pio IX 6ºTecnica - Integrantes: Facundo Carmona, Facundo Sussini - Desactivacion de bomba

Dependencies:   mbed

Revision:
0:30355a2492cd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Jun 04 12:15:06 2019 +0000
@@ -0,0 +1,490 @@
+#include "mbed.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+#define CERO   0b1111110
+#define UNO    0b0110000
+#define DOS    0b1101101
+#define TRES   0b1111001
+#define CUATRO 0b0110011
+#define CINCO  0b1011011
+#define SEIS   0b1011111
+#define SIETE  0b1110000
+#define OCHO   0b1111111
+#define NUEVE  0b1110011
+
+#define inicio 0
+#define rendam 1
+#define seleccion 2
+#define verificacion 3
+
+#define bomba0 0
+#define bomba1 1
+#define bomba2 2
+#define bomba3 3
+
+/* defino mis patas de bus de datos que voy a utilizar para manejar los displays */
+BusOut displays(D2,D3,D4,D5,D6,D7,D8); // G-F-E-D-C-B-A
+
+/* defino mis variables, ticker y las funciones para los displays-------- ademas defino 2 salidas para la conmutacion de los 2 displays */
+char regresivo=0, parar=1,variable=0,conmutador=0;
+int cuentaregre=0, unidad=0, decena=0;
+Ticker ti;
+void cuentaregresiva();
+void cuentitaregresiva();
+DigitalOut unida(D9,0);
+DigitalOut decen(D10,0);
+
+/* defino el led rojo y verde ,y las inicializo en "OFF" */
+DigitalOut rojo(LED_RED,1);
+DigitalOut verde(LED_GREEN,1);
+
+/* defino mi pulsador de inicio y reseteo  */
+void contador1();
+void pulsadorsito1();
+char  salida1=0,cuenta1=0, PIN1=0;
+Ticker ti1;
+DigitalIn pin1(A0,PullUp);
+
+/* defino mi "pulsador" de la bomba0 */
+void contador2();
+void pulsadorsito2();
+char  salida2=0,cuenta2=0, PIN2=0;
+Ticker ti2;
+DigitalIn pin2(A2,PullUp);
+
+/* defino mi "pulsador" de la bomba1 */
+void contador3();
+void pulsadorsito3();
+char  salida3=0,cuenta3=0, PIN3=0;
+Ticker ti3;
+DigitalIn pin3(A3,PullUp);
+
+/* defino mi "pulsador" de la bomba2 */
+void contador4();
+void pulsadorsito4();
+char  salida4=0,cuenta4=0, PIN4=0;
+Ticker ti4;
+DigitalIn pin4(A4,PullUp);
+
+/* defino mi "pulsador" de la bomba3 */
+void contador5();
+void pulsadorsito5();
+char  salida5=0,cuenta5=0, PIN5=0;
+Ticker ti5;
+DigitalIn pin5(A5,PullUp);
+
+/* defino mis variables a utilizar en la funcion principal */
+void bombucha();
+char estado=0, reseteo=0, bloqueo0=0, bloqueo1=0, bloqueo2=0, bloqueo3=0,rondom[4],i=0,ruedam=0, bombuchita=0, desactivacion=0,x=0, bumba=0;
+
+/* ticker random */
+Ticker ran;
+int ramd=0;
+void randoma();
+
+int main()
+{
+    /* inicializo los numeros random */
+    srand(ramd);
+    ran.attach(&randoma,0.0001);
+
+    /* inicializo el ticker del pulsador de inicio */
+    ti1.attach(&contador1, 0.001);
+
+    /* inicializo los tickers de las bombas */
+    ti2.attach(&contador2, 0.001);
+    ti3.attach(&contador3, 0.001);
+    ti4.attach(&contador4, 0.001);
+    ti5.attach(&contador5, 0.001);
+
+    /* inicializo el ticker de la cuenta regresiva */
+    ti.attach(&cuentaregresiva, 0.001);
+
+    while(1) {
+        /* llamo a las funciones */
+        pulsadorsito1();
+        pulsadorsito2();
+        pulsadorsito3();
+        pulsadorsito4();
+        pulsadorsito5();
+        bombucha();
+        cuentitaregresiva();
+    }
+}
+/* funcion principal------------------------------------------------------------ */
+void bombucha()
+{
+    switch(estado) {
+        /* cuando apreto el pulsador se inicia el juego y reseteo mis variables */
+        case inicio:
+            if(salida1==1 && reseteo==0 ) {
+                reseteo=1;
+                estado = rendam;
+                printf("inicio \r\n");
+                i=0;
+                bloqueo0=0;
+                bloqueo1=0;
+                bloqueo2=0;
+                bloqueo3=0;
+                rojo=1;
+                verde=1;
+            }
+            break;
+
+        /* defino en un vector el orden de desconexion de las bombas */
+        case rendam:
+            if(i<4) {
+                /* mientras que aun no haya seleccionado todas las bombas */
+                ruedam=rand()%4;
+                /* est el bloqueo para asi de esta forma evito que me elija la misma bomba 2 o mas veces */
+                if(ruedam==0 && bloqueo0==0) {
+                    bloqueo0=1;
+                    rondom[i]= bomba0;
+                    printf("bomba0 \r\n");
+                    i++;
+                } else if(ruedam==1 && bloqueo1==0) {
+                    bloqueo1=1;
+                    rondom[i]= bomba1;
+                    printf("bomba1 \r\n");
+                    i++;
+                } else if(ruedam==2 && bloqueo2==0) {
+                    bloqueo2=1;
+                    rondom[i]= bomba2;
+                    printf("bomba2 \r\n");
+                    i++;
+                } else if(ruedam==3 && bloqueo3==0) {
+                    bloqueo3=1;
+                    rondom[i]= bomba3;
+                    printf("bomba3 \r\n");
+                    i++;
+                }
+            } else {
+                /* cuando termino el orden de las bombas */
+                i=0;
+                estado=seleccion;
+                printf("lista la bomba \r\n");
+                bloqueo0=0;
+                bloqueo1=0;
+                bloqueo2=0;
+                bloqueo3=0;
+                parar=0;
+                unidad=1;
+                decena=3;
+            }
+            break;
+
+        /* mientras que este a tiempo podre desconectar los cables de sus respectivas bombas */
+        case seleccion:
+            if(parar==0) {
+                if(salida2==1 && bloqueo0==0) {
+                    bloqueo0=1;
+                    estado=verificacion;
+                    desactivacion=bomba0;
+                } else if(salida3==1 && bloqueo1==0) {
+                    bloqueo1=1;
+                    estado=verificacion;
+                    desactivacion=bomba1;
+                } else if(salida4==1 && bloqueo2==0) {
+                    bloqueo2=1;
+                    estado=verificacion;
+                    desactivacion=bomba2;
+                } else if(salida5==1 && bloqueo3==0) {
+                    bloqueo3=1;
+                    estado=verificacion;
+                    desactivacion=bomba3;
+                } else if(salida1==1 && reseteo==1) {
+                    /* si deseo resetear el programa , para poder iniciar de nuevo hay que volver a presionar el mismo boton otra vez */
+                    estado=inicio;
+                    i=0;
+                    x=0;
+                    printf("reseteate \r\n");
+                    reseteo=0;
+                    decena=0;
+                    unidad=0;
+                    parar=1;
+                }
+            } else if(parar==1) {
+                /* si se agota el tiempo vuel al inicio y explota la bomba*/
+                estado=inicio;
+                printf("ala hack bar \r\n");
+                x=0;
+                reseteo=0;
+                rojo=0;
+                parar=1;
+                unidad=0;
+                decena=0;
+            }
+            break;
+
+        case verificacion:
+            bumba=rondom[x];
+            if(bumba==desactivacion) {
+                /* si desconecte correctamente el cable */
+                x++;
+                if(x==4) {
+                    /* en el caso que desconecte correctamente todos los cables  */
+                    estado=inicio;
+                    x=0;
+                    reseteo=0;
+                    printf("Bien hecho agente Haunt, salvaste al mundo otra vez \r\n");
+                    verde=0;
+                    parar=1;
+                } else if(x<4) {
+                    /* si aun no desconecte todos los cables */
+                    estado=seleccion;
+                    printf("un cable menos \r\n");
+                }
+
+            } else {
+                /* en el caso que me equivoque de cable , pierdo directamente */
+                estado=inicio;
+                printf("ala hack bar \r\n");
+                x=0;
+                reseteo=0;
+                rojo=0;
+                parar=1;
+                unidad=0;
+                decena=0;
+            }
+            break;
+    }
+}
+/* funcion ticker random */
+void randoma()
+{
+    ramd++;
+    srand(ramd);
+}
+/* funcion cuenta regresiva de los displays------------------------------------------------ */
+void cuentitaregresiva()
+{
+    /* se setea la cuenta de los displays y se va disminuyendo hasta que llegue a cero */
+    if(cuentaregre==0 && parar==0 ) {
+        /* se varia entre un display y otro 1000 veces por segundo ---- cuando se llega a 1000 , se cumple un segundo*/
+        cuentaregre=1000;
+        unidad--;
+        if(unidad<0) {
+            decena--;
+            unidad=9;
+        }
+        if(decena<0)
+            decena=9;
+        if(unidad==9 && decena==9) {
+            parar=1;
+            unidad=0;
+            decena=0;
+        }
+    }
+
+    /* se invierten las salidas de las referencias de los displays */
+    if(conmutador==0) {
+        unida=1;
+        decen=0;
+        variable=unidad;
+    } else {
+        unida=0;
+        decen=1;
+        variable=decena;
+    }
+
+    /* cada vez que cambio las referencias , tambien cambio la muestra de unidad y/o decena  */
+    switch(variable) {
+        default:
+        case 0:
+            displays=CERO;
+            break;
+        case 1:
+            displays=UNO;
+            break;
+        case 2:
+            displays=DOS;
+            break;
+        case 3:
+            displays=TRES;
+            break;
+        case 4:
+            displays=CUATRO;
+            break;
+        case 5:
+            displays=CINCO;
+            break;
+        case 6:
+            displays=SEIS;
+            break;
+        case 7:
+            displays=SIETE;
+            break;
+        case 8:
+            displays=OCHO;
+            break;
+        case 9:
+            displays=NUEVE;
+            break;
+    }
+}
+
+/* ticker de la cuenta regresiva, cada vez que se entra se invierte la salida de las referencias de los displys */
+void cuentaregresiva()
+{
+    conmutador=!conmutador;
+    if(cuentaregre)
+        cuentaregre--;
+}
+
+//-----------funcion del pulsador de inicio-------------------------------------------------------------------
+void pulsadorsito1()
+{
+    switch(PIN1) {
+        default:
+        case 0:
+            if(pin1==1) {
+                salida1=0;
+                cuenta1=0;
+            } else if(pin1==0) {
+                PIN1=1;
+                cuenta1=100;
+            }
+            break;
+
+        case 1:
+            if(cuenta1==0 && pin1==1) {
+                salida1=1;
+                PIN1=0;
+            } else if( pin1==1 && cuenta1>0) {
+                PIN1=0;
+            }
+            break;
+    }
+}
+
+void contador1()
+{
+    if(cuenta1)
+        cuenta1--;
+}
+
+//--------------funciones de los "pulsadores" de las bombas----------------------------------------------------------------
+void pulsadorsito2()
+{
+    switch(PIN2) {
+        default:
+        case 0:
+            if(pin2==1) {
+                salida2=0;
+                cuenta2=0;
+            } else if(pin2==0) {
+                PIN2=1;
+                cuenta2=100;
+            }
+            break;
+
+        case 1:
+            if(cuenta2==0 && pin2==1) {
+                salida2=1;
+                PIN2=0;
+            } else if( pin2==1 && cuenta2>0) {
+                PIN1=0;
+            }
+            break;
+    }
+}
+
+void contador2()
+{
+    if(cuenta2)
+        cuenta2--;
+}
+//------------------------------------------------------------------------------
+void pulsadorsito3()
+{
+    switch(PIN3) {
+        default:
+        case 0:
+            if(pin3==1) {
+                salida3=0;
+                cuenta3=0;
+            } else if(pin3==0) {
+                PIN3=1;
+                cuenta3=100;
+            }
+            break;
+
+        case 1:
+            if(cuenta3==0 && pin3==1) {
+                salida3=1;
+                PIN3=0;
+            } else if( pin3==1 && cuenta3>0) {
+                PIN3=0;
+            }
+            break;
+    }
+}
+
+void contador3()
+{
+    if(cuenta3)
+        cuenta3--;
+}
+//------------------------------------------------------------------------------
+void pulsadorsito4()
+{
+    switch(PIN4) {
+        default:
+        case 0:
+            if(pin4==1) {
+                salida4=0;
+                cuenta4=0;
+            } else if(pin4==0) {
+                PIN4=1;
+                cuenta4=100;
+            }
+            break;
+
+        case 1:
+            if(cuenta4==0 && pin4==1) {
+                salida4=1;
+                PIN4=0;
+            } else if( pin4==1 && cuenta4>0) {
+                PIN4=0;
+            }
+            break;
+    }
+}
+
+void contador4()
+{
+    if(cuenta4)
+        cuenta4--;
+}
+//------------------------------------------------------------------------------
+void pulsadorsito5()
+{
+    switch(PIN5) {
+        default:
+        case 0:
+            if(pin5==1) {
+                salida5=0;
+                cuenta5=0;
+            } else if(pin5==0) {
+                PIN5=1;
+                cuenta5=100;
+            }
+            break;
+
+        case 1:
+            if(cuenta5==0 && pin5==1) {
+                salida5=1;
+                PIN5=0;
+            } else if( pin5==1 && cuenta5>0) {
+                PIN5=0;
+            }
+            break;
+    }
+}
+
+void contador5()
+{
+    if(cuenta5)
+        cuenta5--;
+}
\ No newline at end of file