Pio IX Jalle Ventiades 6b 2019

Dependencies:   mbed tsi_sensor MMA8451Q

Files at this revision

API Documentation at this revision

Comitter:
Jalle
Date:
Sun Jun 23 13:43:37 2019 +0000
Commit message:
Pio IX Jalle Ventiades 6b 2019

Changed in this revision

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 ad5829ebd588 MMA8451Q.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA8451Q.lib	Sun Jun 23 13:43:37 2019 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/emilmont/code/MMA8451Q/#c4d879a39775
diff -r 000000000000 -r ad5829ebd588 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Jun 23 13:43:37 2019 +0000
@@ -0,0 +1,443 @@
+#include "mbed.h"
+#include "tsi_sensor.h"
+#include "MMA8451Q.h"
+#include "math.h"
+
+DigitalOut ledazul(LED_BLUE);
+DigitalOut ledverde(LED_GREEN);
+DigitalOut ledrojo(LED_RED);
+DigitalIn enta(PTC7);
+DigitalIn entb(PTC0);
+DigitalIn entc(PTC3);
+
+
+int e=0,cuenta=2,cantidad=1,estado=1,mal=0,nuevo=0,erro=0,b=1,demo=0,ap=4,cuenta2=0,temp1=0,temp2=0,temp3=0;
+int dato[50]; 
+Ticker tic2;
+Ticker tic1;
+void funcion(); 
+void cuento();
+
+
+int main(void)
+{
+    tic2.attach(&funcion, 1); //Contador general 1seg
+    tic1.attach(&cuento, 0.01); //Contador del sistema de antirebote 10mseg
+    
+    ledrojo=1; //Apagamos todo antes de empezar por las dudas
+    ledazul=1;
+    ledverde=1;
+    printf("Presione los botones en el siguiente orden: (verde=1)(rojo=2)(azul=3)\n");
+
+    while (true) {
+        
+        switch (estado) { //Maquina de estados gemeral
+            default:
+            case 1: //Estado para generar colores
+                
+                if(b!=cuenta) { //Generamos colores hasta que generamos todos los que necesitamos (cuenta nos dice cuantos)
+                    dato[b]=rand() % (1+2)+1; //Dato almacena los colores
+                    printf("%d\n",dato[b]);
+                    b++; //b nos va a servir para llevar la cuenta internamente en muchos estados
+                    cantidad++; //Cantidad almacena cuantos colores hay guardados
+                
+                }
+                
+
+                if(b==cuenta) { //Si b alcanzo a la cantidad que colores que tendriamos que tener generados, avanza
+                    estado=2;
+                    b=1; //Borramos esta variable para que los siguientes estados la puedan usar
+                    
+                }
+                break;
+
+            case 2: //Estado para mostrar los colores que hay que apretar luego 
+                
+                if(dato[b]==1) { //Si esta almacenado el verde, se muestra el verde
+                    ledverde=0;
+                    ledrojo=1;
+                    ledazul=1;
+                }
+                if(dato[b]==2) {
+                    ledverde=1;
+                    ledrojo=0;
+                    ledazul=1;
+                }
+                if(dato[b]==3) {
+                    ledverde=1;
+                    ledrojo=1;
+                    ledazul=0;
+                }
+
+                if(e==1) { //Luego de 1seg mostrando un color, nos vamos al estado 7 para esperar 1seg
+                    estado=7;
+
+                    e=0; //Volvemos a poner en 0 la variable del ticker
+                    ledverde=1; //Apagamos todo para esperar 1seg
+                    ledrojo=1;
+                    ledazul=1;
+                    b++; //Guardamos que mostramos 1 color mas
+                }
+                if(b==cantidad) { //Si mostramos todos los colores que tenemos almacenados avanzamos a la siguiente etapa
+
+                    estado=4; 
+                    cuenta2=0;
+                    demo=0; //Ponemos en 0 todas las variables locales para que las siguientes etapas las puedan usar
+                    e=0;
+                    ledverde=1; //Apagamos leds
+                    ledrojo=1;
+                    ledazul=1;
+                    b=1;
+                }
+                break;
+
+            case 4:
+               
+
+                switch (temp1) { //Maquina de antirebote para el color rojo
+                    case 0:
+                        if(enta==0){//Esperamos a que se apriete el pulsador
+                            temp1=1;//Vamos al estado 1
+                            
+                            cuenta2=0;
+                            }
+                        
+                        
+                        break;
+                    case 1:
+                        if(cuenta2>=1) {//Esperamos que pasen 20mseg antes de poder avanzar, asi ignoramos el rebote
+                            temp1=2;
+
+                            
+                            e=0; //Ponemos en 0 el ticker otra vez
+                            ledverde=1; //Prendemos el led rojo
+                            ledrojo=0;
+                            ledazul=1;
+                            ap=2; //Guardamos que se pulso el led rojo
+                        }
+                        break;
+                    case 2:
+                        if(enta==1){ //Esperamos a que se despulse
+                            temp1=3; //Vamos al siguiente estado
+                        cuenta2=0;
+                        }
+                        
+                        break;
+                    case 3:
+                        if(cuenta2>=1) { //Esperamos 20mseg para ignorar el rebote
+                            temp1=0;
+
+                             //Todas las maquinas de antirebote son iguales, solo que correspondientes a su pulsador y color asociado.
+                        }
+                        break;
+                }
+
+
+                switch (temp2) { //Maquina de antirebote para el color verde
+                    case 0:
+                        if(entb==0){
+                            temp2=1; 
+                        cuenta2=0;
+                        }
+                        break;
+                    case 1:
+                        if(cuenta2>=1) { 
+                            temp2=2;
+
+                            
+                            e=0;
+                            ledverde=0; 
+                            ledrojo=1;
+                            ledazul=1;
+                            ap=1;
+                        }
+                        break;
+                    case 2:
+                        if(entb==1){
+                            temp2=3;
+                        cuenta2=0;
+                        }
+                        break;
+                    case 3:
+                        if(cuenta2>=1) {
+                            temp2=0;
+
+                           
+                        }
+                        break;
+                }
+                switch (temp3) { //Maquina de antirebote del color azul
+                    case 0:
+                        if(entc==0){
+                            temp3=1;
+                        cuenta2=0;
+                        }
+                        break;
+                    case 1:
+                        if(cuenta2>=1) {
+                            temp3=2;
+
+                           
+                            e=0;
+                            ledverde=1;
+                            ledrojo=1;
+                            ledazul=0;
+                            ap=3;
+                        }
+                        break;
+                    case 2:
+                        if(entc==1){
+                            temp3=3;
+                        cuenta2=0;
+                        }
+                        break;
+                    case 3:
+                        if(cuenta2>=1) {
+                            temp3=0;
+
+                           
+                        }
+                        break;
+                } //Termina la maquina
+
+                if(ap!=4) { //AP es 4 cuando nada se aprieta, en caso de que no sea 4 significa que algo se apreto
+                    if(ap==dato[b]&&e==1) { //Si lo que se apreto es igual a lo que habia que apretar, avanzamos (tambien hay que esperar a que pase 1seg)
+                        b++; //Guardamos que avanzamos en 1
+                        estado=5; //Si es correcto, vamos al estado 5 que es un clon de este estado
+                        e=0; 
+                        
+                        ap=4; //Ponemos AP en 4 para que no nos cuente mas de 1 vez un solo apriete
+                        ledverde=1; //Apagamos todo 
+                        ledrojo=1;
+                        ledazul=1;
+
+                    }
+                    if(ap!=dato[b]&&e==1) { //Si el boton no corresponde con lo que habia que apretar, aplicamos la parte del error
+                        
+                        estado=6; 
+                        e=0;
+                        b=1; //Ponemos en 0 todo (o 1 en caso de b)
+                    }
+                }
+                if(b==cuenta) { //Si avanzamos correctamente hasta el punto que no hay mas colores que apretar, significa que ganamos 
+                    
+                    cuenta++; //Guardamos que queremos 1 color mas
+                    e=0; 
+                    estado=8; 
+                }
+                if(b==24) { //Si llegamos a 24 significa que el juego termino
+                    
+                    b=1; 
+                    e=0; 
+                    estado=6; 
+                }
+                
+                if(cuenta2>=3000) { //Si pasan 3 segundos sin tocar nada tambien se pierde significa que el juego termino
+                    
+                    b=1; 
+                    e=0; 
+                    estado=6; 
+                }
+                
+                break;
+            case 5: //Clon del estado 4
+                
+                
+                switch (temp1) {
+                    case 0:
+                        if(enta==0){
+                            temp1=1;
+                        cuenta2=0;
+                        }
+                        break;
+                    case 1:
+                        if(cuenta2>=2) {
+                            temp1=2;
+
+                            e=0;
+                            ledverde=1;
+                            ledrojo=0;
+                            ledazul=1;
+                            ap=2;
+                        }
+                        break;
+                    case 2:
+                        if(enta==1){
+                            temp1=3;
+                        cuenta2=0;
+                        }
+                        break;
+                    case 3:
+                        if(cuenta2>=2) {
+                            temp1=0;
+
+                            
+                        }
+                        break;
+                }
+
+
+                switch (temp2) {
+                    case 0:
+                        if(entb==0){
+                            temp2=1;
+                        cuenta2=0;
+                        }
+                        break;
+                    case 1:
+                        if(cuenta2>=2) {
+                            temp2=2;
+
+                           
+                            e=0;
+                            ledverde=0;
+                            ledrojo=1;
+                            ledazul=1;
+                            ap=1;
+                        }
+                        break;
+                    case 2:
+                        if(entb==1){
+                            temp2=3;
+                        cuenta2=0;
+                        }
+                        break;
+                    case 3:
+                        if(cuenta2>=2) {
+                            temp2=0;
+
+                            
+                        }
+                        break;
+                }
+                switch (temp3) {
+                    case 0:
+                        if(entc==0){
+                            temp3=1;
+                        cuenta2=0;
+                        }
+                        break;
+                    case 1:
+                        if(cuenta2>=2) {
+                            temp3=2;
+
+                            
+                            e=0;
+                            ledverde=1;
+                            ledrojo=1;
+                            ledazul=0;
+                            ap=3;
+                        }
+                        break;
+                    case 2:
+                        if(entc==1){
+                            temp3=3;
+                        cuenta2=0;
+                        }
+                        break;
+                    case 3:
+                        if(cuenta2>=2) {
+                            temp3=0;
+
+                           
+                        }
+                        break;
+                }
+                
+
+                if(ap!=4) {
+                    if(ap==dato[b]&&e==1) {
+                        b++;
+                        estado=4; //Si es correcto, vamos al estado 4 otra vez. Es un ciclo infinito
+                        e=0;
+                        ap=4;
+                        ledverde=1;
+                        ledrojo=1;
+                        ledazul=1;
+
+                    }
+                    if(ap!=dato[b]&&e==1) {
+
+                        estado=6;
+                        e=0;
+                        b=1;
+                    }
+                }
+                if(b==cuenta) {
+                    
+                    cuenta++;
+                    e=0;
+                    estado=8;
+                }
+                if(b==24) { //Si llegamos a 24 significa que el juego termino
+                    
+                    b=1; 
+                    e=0; 
+                    estado=6; 
+                }
+                
+                
+                if(cuenta2>=3000) { //Si pasan 3 segundos sin tocar nada tambien se pierde significa que el juego termino
+                    
+                    b=1; 
+                    e=0; 
+                    estado=6; 
+                }
+                break;
+            case 6:
+                 //Estado de error
+                ledverde=1; //Apagamos todo
+                ledrojo=1;
+                ledazul=1;
+                ap=4; 
+                
+                cantidad=1; //Ponemos todas las variables para empezar desde 0 todo el juego
+                cuenta=2;
+                b=1;
+                if(e==1) {
+                    estado=1; //Luego de esperar 1seg, vamos al estado 1 a empezar otra vez
+                    printf("Presione los botones en el siguiente orden: (rojo=2)(verde=1)(azul=3)\n");
+                    }
+                e=0;
+                
+
+            case 7:
+                
+                if(e==1)
+                    estado=2;//Esperamos 1seg antes de mostrar el siguiente color
+                e=0;
+                break;
+            case 8: 
+                if(e==1)
+                    estado=1;//Esperamos 1seg antes de avanzar en el juego
+                e=0;
+                break;
+
+
+
+
+
+
+
+        }
+
+
+
+
+    }
+}
+
+
+void cuento()
+{
+
+    cuenta2++; //Cuenta cada 10mseg para el sistema de antirebote
+    
+}
+void funcion()
+{
+    
+    if(e==0) //Se pone en 1 cada 1seg
+        e=1;
+
+}
\ No newline at end of file
diff -r 000000000000 -r ad5829ebd588 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sun Jun 23 13:43:37 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 ad5829ebd588 tsi_sensor.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tsi_sensor.lib	Sun Jun 23 13:43:37 2019 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Kojto/code/tsi_sensor/#976904559b5c