https://os.mbed.com/users/Jalle/code/Ejercicio2JalleVentiades/file/ad5829ebd588/main.cpp/

Dependencies:   Led7Seg mbed tsi_sensor MMA8451Q

Files at this revision

API Documentation at this revision

Comitter:
Jalle
Date:
Sun Jun 23 13:46:09 2019 +0000
Commit message:
https://os.mbed.com/users/Jalle/code/Ejercicio2JalleVentiades/file/ad5829ebd588/main.cpp/

Changed in this revision

Led7Seg.lib Show annotated file Show diff for this revision Revisions of this file
MMA8451Q.lib Show annotated file Show diff for this revision Revisions of this file
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
tsi_sensor.lib Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 663cb45c05e2 Led7Seg.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Led7Seg.lib	Sun Jun 23 13:46:09 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/trombettamichele/code/Led7Seg/#78b3b8aefd3c
diff -r 000000000000 -r 663cb45c05e2 MMA8451Q.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA8451Q.lib	Sun Jun 23 13:46:09 2019 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/emilmont/code/MMA8451Q/#c4d879a39775
diff -r 000000000000 -r 663cb45c05e2 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Jun 23 13:46:09 2019 +0000
@@ -0,0 +1,372 @@
+#include "mbed.h"
+#include "tsi_sensor.h"
+#include "MMA8451Q.h"
+#include "math.h"
+#if   defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
+PinName const SDA = PTE25;
+PinName const SCL = PTE24;
+#elif defined (TARGET_KL05Z)
+PinName const SDA = PTB4;
+PinName const SCL = PTB3;
+#elif defined (TARGET_K20D50M)
+PinName const SDA = PTB1;
+PinName const SCL = PTB0;
+#else
+#error TARGET NOT DEFINED
+#endif
+#define M_PI 3.14159265358979323846
+
+#define MMA8451_I2C_ADDRESS (0x1d<<1)
+
+/* This defines will be replaced by PinNames soon */
+#if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
+#define ELEC0 9
+#define ELEC1 10
+#elif defined (TARGET_KL05Z)
+#define ELEC0 9
+#define ELEC1 8
+#else
+#error TARGET NOT DEFINED
+#endif
+DigitalOut ledazul(LED_BLUE);
+DigitalOut ledverde(LED_GREEN);
+DigitalOut ledrojo(LED_RED);
+//unidades:
+
+
+BusOut display(PTC9,PTC8,PTD4,PTA12,PTA4,PTA5,PTC6);
+
+DigitalOut habuni(PTD7);
+DigitalOut habdec(PTD6);
+
+DigitalIn enta(PTC7);
+DigitalIn entb(PTC0);
+DigitalIn entc(PTC3);
+DigitalIn entd(PTC4);
+
+double a=0;
+unsigned int e=0,cuenta=2,cantidad=4,estado=0,mal=0,nuevo=0,erro=0,b=0,demo=0,ap=4,tiempo=20,s=0,d=0,c=0,acta=0,actb=0,actc=0,actd=0,uni=0,dec=0,bar=0,guar1=0,guar2=0;
+
+int dato[50]= {0,1,2,3};
+int dato2[50];
+Ticker barrido;
+Ticker jorge;
+void funcion();
+void ctrl_barrido();
+
+int main(void)
+{
+    dato2[0]=126; //Guardamos en este vector la informacion para formar los diferentes numeros en el display
+    dato2[1]=48;
+    dato2[2]=109;
+    dato2[3]=121;
+    dato2[4]=51;
+    dato2[5]=91;
+    dato2[6]=95;
+    dato2[7]=112;
+    dato2[8]=127;
+    dato2[9]=123;
+    barrido.attach(&ctrl_barrido,0.01); //Activamos el barrido cada 10ms
+    jorge.attach(&funcion, 1); //Cada 1seg se activará el ticker
+    TSIAnalogSlider tsi(ELEC0, ELEC1, 100); //El slider es para iniciar el juego
+    ledrojo=1; //Apagamos todo por las dudas
+    ledazul=1;
+    ledverde=1;
+
+
+    while (true) {
+        a=tsi.readPercentage();
+        ledverde=1;
+        ledrojo=1;
+        switch (estado) {
+            default:
+            case 0:
+               
+                
+                if (bar==0) { //Si bar es 1 se muentra las decenas y si es 0 se muestra las unidades
+                    habuni=1; //Se definen las habilitaciones para solo mostrar las unidades
+                    habdec=0;
+
+                    display=dato2[dec]; //Se envia la informacion a los displyas
+
+                }
+
+                if(bar==1) {
+                    habuni=0; //Se definen las habilitaciones para solo mostrar las decenas
+                    habdec=1;
+
+                    display=dato2[dec]; //Se envia la informacion a los displyas
+
+
+                }
+
+                if(c==0) { //Aca se va a generar la secuencia aleatoria
+                    dato[0]=rand() % (1+3);
+                    dato[1]=rand() % (1+3);
+                    dato[2]=rand() % (1+3);
+                    dato[3]=rand() % (1+3);
+                    c=1; //De esta manera solo se genera 1 y no se sobrescribe todo infinitamente
+                }
+
+                if(dato[1]==dato[0])
+                    dato[1]=rand() % (1+3);
+
+                if(dato[2]==dato[1]||dato[2]==dato[0])
+                    dato[2]=rand() % (1+3);
+
+
+                if(dato[3]==dato[2]||dato[3]==dato[1]||dato[3]==dato[0])
+                    dato[3]=rand() % (1+3);
+
+
+
+                if(d==0&&(dato[0]+dato[1]+dato[2]+dato[3])==6) { //Muestra esto solo 1 vez y cuando ya se generó la secuencia
+                    printf("Apreta el pad para empezar\n");
+                    d=1;
+                }
+
+                if(a>=0.4&&a<=0.6&&(dato[0]+dato[1]+dato[2]+dato[3])==6) { //Una vez que se aprieta el slider y la secuencia esta generada, podemos empezar el juego
+                    if(enta==0&&entb==0&&entc==0&&entd==0) { //Verificamos si todos los cables estan conectados
+                        estado=1;
+                        tiempo=20; //Esta variable almacena el tiempo
+                        ap=4; //AP es 4 cuando no se ha desconectado ningun cable
+                        b=0; //Esta variable se usa para llevar la cuenta de las desconexiones
+                        printf("El orden es: %d%d%d%d\n",dato[0],dato[1],dato[2],dato[3]); //Imprime en PC el orden de la secuencia
+                        acta=0; //Cada vez que se detecta una desconexion, se pone en 1 estas variables para poder ignorarlas luego de su primera deteccion
+                        actb=0; //Por eso siempre hay que volverlas a 0 antes de empezar
+                        actc=0;
+                        actd=0;
+                    } else {
+                        if(d==1) { //Solo si la secuencia ya se genero
+                            printf("Te falta conectar los cables \n"); //Aviso si no todos los cables estan conectados a gnd
+                        }
+                    }
+
+
+                    break;
+                case 1:
+                    if(e==1) {
+
+                        e=0; //Volvemos 0 la variable del ticker luego de detectarla
+
+                    }
+
+                    if (bar==0) {
+                        habuni=1; 
+                        habdec=0;
+
+                        display=dato2[dec];
+
+                    }
+
+                    if(bar==1) {
+                        habuni=0;
+                        habdec=1;
+
+                        display=dato2[dec];
+
+
+                    }
+
+                    if(enta==1&&acta==0) { //Si se desconecta el cable 1 ponemos AP en su valor correspondiente y colocamos a acta en 1 para ignorar a enta
+
+                        ap=0;
+                        acta=1;
+
+                    }
+                    if(entb==1&&actb==0) {
+
+                        ap=1; //Se guarda en AP el cable que fue desconectado
+                        actb=1;
+
+                    }
+                    if(entc==1&&actc==0) {
+
+                        ap=2;
+                        actc=1;
+
+                    }
+                    if(entd==1&&actd==0) {
+
+                        ap=3;
+                        actd=1;
+
+
+                    }
+
+                    if(ap!=4) { //Si se desconecta algun cable entramos aca
+                        if(ap==dato[b]) { //Si es correcto, avanzamos
+                            b++; //Sumamos 1 a la variable que lleva la cuenta de las desconexiones
+
+
+
+                            ap=4; //Ponemos AP en 4 otra vez porque ya vimos al cable que se desconecto
+                            if(b==4) { //Si b es 4 significa que se desconectaron los 4 cables en el orden correcto, asi que vamos al estado 4
+                                estado=4;
+                                tiempo=9; //Fijamos el tiempo que va a estar el led verde titilando
+                                ledverde=0; //Prendemos el led verde como felicitacion
+                                e=0; //Colocamos en 0 la variable del ticker por las dudas
+                                b=0; //Volvemos a 0 la cuenta de posiciones
+
+
+                            }
+                            c=0; //Ponemos c en 0 para que se pueda generar otra secuencia aleatoria
+                            d=0; //Ponemos d en 0 para que se pueda mostrar un printf del case 0
+
+
+
+                        } else {
+                            //Si el dato es incorrecto explota la bomba
+                            estado=3;
+                            tiempo=9;
+
+                            e=0;
+                            b=0;
+                            ledverde=1;
+                            ledrojo=0; //Prendemos el led rojo de alarma
+                        }
+                    }
+
+
+                    if(tiempo==0) { //Si el tiempo se termina tambien se pierde
+                        guar1=0;
+                        guar2=0;
+                        dec=0;
+                        estado=3;
+                        tiempo=9;
+                        ledrojo=0;
+                        ledverde=1;
+                        e=0;
+                        b=0;
+
+                    }
+
+                    break;
+
+
+
+
+                case 3:
+                    ledverde=1;
+
+                    if(tiempo%2==0) { //El led rojo y los displays titilan
+                        habuni=0;
+                        habdec=0;
+
+                        ledrojo=1;
+
+                        s=0;
+                    } else {
+                        if (bar==0) {
+                            habuni=1;
+                            habdec=0;
+
+                            display=dato2[dec];
+
+                        }
+
+                        if(bar==1) {
+                            habuni=0;
+                            habdec=1;
+
+                            display=dato2[dec];
+
+
+                        }
+                        ledrojo=0;
+
+                        s=1;
+                    }
+
+
+                    if(tiempo==0) { //Cuando ya titilaron el tiempo completo, volvemos a empezar en el estado 0
+                        estado=0;
+                        d=0;
+                        c=0;
+                    }
+                    break;
+
+
+                case 4:
+                    ledrojo=1;
+                    if(tiempo%2==0) { //El led verde y los displays titilan porque evitamos que la bomba explote
+                        habuni=0;
+                        habdec=0;
+                        ledverde=1;
+
+                        s=0;
+                    } else {
+                        if (bar==0) {
+                            habuni=1;
+                            habdec=0;
+
+                            display=dato2[dec];
+
+                        }
+
+                        if(bar==1) {
+                            habuni=0;
+                            habdec=1;
+                            display=dato2[dec];
+
+                        }
+
+                        ledverde=0;
+
+                        s=1;
+
+                    }
+                    e=0;
+                    if(tiempo==0) { //Volvemos a empezar luego de terminar este juego
+                        estado=0;
+                        c=0;
+                        d=0;
+                    }
+                    break;
+                }
+        }
+    }
+}
+
+void ctrl_barrido()
+{
+
+    if(bar==0) { //Si bar es 1 se muentra las decenas y si es 0 se muestra las unidades
+        bar=1;
+
+
+        if(estado!=3&&estado!=4) { //Solo se cumple si no estamos en el estado de perder o ganar
+            dec=tiempo/10; //Obtenemos el valor de las decenas
+            guar1=dec;
+        } else
+            dec=guar1; //Si estamos en perder o ganar, solo nos importa el ultimo valor antes de que el juego termine
+            
+        if(estado==0) //Si estamos en el estado de inicio los displays tienen que mostrar solo el numero inicial
+            dec=2;
+
+
+    }
+
+    else {
+        bar=0;
+
+
+        if(estado!=3&&estado!=4) { 
+            dec=tiempo-(dec*10); //Obtenemos el valor de las unidades
+            guar2=dec;
+        } else
+            dec=guar2; //Si estamos en perder o ganar, solo nos importa el ultimo valor antes de que el juego termine
+            
+            if(estado==0)//Si estamos en el estado de inicio los displays tienen que mostrar solo el numero inicial
+            dec=0;
+    }
+
+}
+
+void funcion()
+{
+
+    tiempo--; //Cada 1seg se decrece la variable tiempo
+    e=1; //Cada 1seg se pone e en 1
+
+}
\ No newline at end of file
diff -r 000000000000 -r 663cb45c05e2 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sun Jun 23 13:46:09 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file
diff -r 000000000000 -r 663cb45c05e2 tsi_sensor.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tsi_sensor.lib	Sun Jun 23 13:46:09 2019 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Kojto/code/tsi_sensor/#976904559b5c