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
- Committer:
- Susso
- Date:
- 2019-06-04
- Revision:
- 0:30355a2492cd
File content as of revision 0:30355a2492cd:
#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--;
}