Facundo Sussini
/
TP1_ejer3
Pio IX 6ºTecnica - Integrantes: Facundo Carmona, Facundo Sussini - Desactivacion de bomba
Diff: main.cpp
- 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