Pio IX Jalle Ventiades 6b 2019
Dependencies: mbed tsi_sensor MMA8451Q
Revision 0:ad5829ebd588, committed 2019-06-23
- Comitter:
- Jalle
- Date:
- Sun Jun 23 13:43:37 2019 +0000
- Commit message:
- Pio IX Jalle Ventiades 6b 2019
Changed in this revision
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