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.
Dependencies: mbed tsi_sensor
Revision 0:8fc99b9ef045, committed 2019-06-02
- Comitter:
- Franmaver
- Date:
- Sun Jun 02 16:51:36 2019 +0000
- Commit message:
- TP1_ejer2
Changed in this revision
diff -r 000000000000 -r 8fc99b9ef045 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Sun Jun 02 16:51:36 2019 +0000
@@ -0,0 +1,321 @@
+#include "mbed.h"
+#include "tsi_sensor.h"
+#include "stdlib.h"
+
+/* 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
+//defino las salidas
+DigitalOut verde(LED_GREEN);
+DigitalOut azul(LED_BLUE);
+DigitalOut rojo(LED_RED);
+
+TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
+
+int PULS_TSI();
+int COLORES();
+
+//General
+enum MAQUINA_ESTADO_GENERAL {INICIO, MUESTRO_SEC, ESPERO_SEC, APRETO, LOOSER, WIN};
+MAQUINA_ESTADO_GENERAL MAQUINA_GENERAL;
+void FUNCION_GENERAL();
+
+//Muestro
+enum MAQUINA_ESTADO_MUESTRO {INICIO2, ON, OFF};
+MAQUINA_ESTADO_MUESTRO MAQUINA_MUESTRO;
+void FUNCION_MOSTRAR();
+char paso [25];
+int nivel_muestro = 0;
+int nivel_mostrando = 0;
+int variable = 0;
+
+//Apreto
+enum MAQUINA_ESTADO_APRETO {INICIO3, ESPERO_PULS, COMPARO_PULS, DELAY, DELAY2};
+MAQUINA_ESTADO_APRETO MAQUINA_APRETO;
+void FUNCION_APRETO();
+int espero_puls = 0;
+int estado_prox = 0;
+
+//tiempo
+Ticker tiempo;
+int contador = 0;
+int contador_muestro = 0;
+int contador_apreto = 0;
+int PULSADOR = 5;
+int mostrando = 0;
+int apretar = 0;
+void funcion_tiempo();
+
+//funcion de los botones para el tsi
+int PULS_TSI()
+{
+ if((tsi.readPercentage() > 0.06) && (tsi.readPercentage() < 0.2))
+ PULSADOR = 0;//0 designado para el color rojo
+ else if((tsi.readPercentage() > 0.4) && (tsi.readPercentage() < 0.6))
+ PULSADOR = 1;//1 designado para el color verde
+ else if((tsi.readPercentage() > 0.8) && (tsi.readPercentage() < 0.94))
+ PULSADOR = 2;//2 designado para el color azul
+ else
+ PULSADOR = -1;//-1 designado cuando no se oprime el TSI
+
+ return PULSADOR;//me devuelve lo que aprete
+}
+//funcion que prende los leds
+void COLORES(int color)
+{
+ switch(color) {
+ case 0://rojo
+ rojo = 0;
+ verde = 1;
+ azul = 1;
+ break;
+ case 1://verde
+ rojo = 1;
+ verde = 0;
+ azul = 1;
+ break;
+ case 2://azul
+ rojo = 1;
+ verde = 1;
+ azul = 0;
+ break;
+ }
+}
+
+int main(void)
+{
+ //defino los leds como apagados
+ verde = 1;
+ azul = 1;
+ rojo = 1;
+ tiempo.attach(&funcion_tiempo, 0.1);
+
+ while (true) {
+ variable++;//variable usada para el srand
+ FUNCION_GENERAL();//GENERAL
+ FUNCION_MOSTRAR();//MOSTRAR
+ FUNCION_APRETO();//APRETAR
+ }
+}
+
+void funcion_tiempo()
+{
+ contador++;
+ contador_muestro++;
+ contador_apreto++;
+}
+
+//GENERAL
+void FUNCION_GENERAL()
+{
+ switch (MAQUINA_GENERAL) {
+
+ default:
+ MAQUINA_GENERAL = INICIO;
+ break;
+ case INICIO://igualo todas mis variables a 0
+ mostrando = 0;
+ espero_puls = 0;
+ nivel_muestro = 0;
+ nivel_mostrando = 0;
+ contador = 0;
+ contador_muestro = 0;
+ contador_apreto = 0;
+ PULSADOR = 5;
+ mostrando = 0;
+ apretar = 0;
+ if(tsi.readPercentage() != 0) {//oprimo TSI
+ contador = 0;
+ mostrando = 1;
+ MAQUINA_GENERAL = MUESTRO_SEC;
+ }
+ break;
+ case MUESTRO_SEC:
+ if(mostrando == 0) {//mostrando va a ser 0 cuando en la funcion de mostrar ya mostro todo
+ MAQUINA_GENERAL = ESPERO_SEC;
+ apretar = 1;
+ }
+ break;
+ case ESPERO_SEC:
+ if(apretar == 0) {
+ MAQUINA_GENERAL = MUESTRO_SEC;
+ mostrando = 1;
+ }
+ break;
+ case LOOSER://caso cuando perdes
+ //prende salida color violeta por 2 segundos luego vuelve a inicio
+ azul = 0;
+ rojo = 0;
+ verde = 1;
+ if(contador >= 20) {
+ azul = 1;
+ rojo = 1;
+ verde = 1;
+ contador = 0;
+ MAQUINA_GENERAL = INICIO;
+ }
+ break;
+ case WIN://caso cuando ganas
+ //prende salida color amarillo por 2 segundos luego vuelve a inicio
+ contador = 0;
+ rojo = 0;
+ verde = 0;
+ azul = 1;
+ if(contador >= 20) {
+ azul = 1;
+ rojo = 1;
+ verde = 1;
+ contador = 0;
+ MAQUINA_GENERAL = INICIO;
+ }
+ break;
+ }
+}
+//MOSTRAR
+void FUNCION_MOSTRAR()
+{
+ switch (MAQUINA_MUESTRO) {
+ default:
+ MAQUINA_MUESTRO = INICIO2;
+ break;
+ case INICIO2:
+ if(mostrando == 1) {
+ nivel_mostrando = 0;
+ srand(variable);//como variable va a estar siempre variando, srand tomara distintas posiciones
+ paso[nivel_muestro++] = (rand() % 3);//genero mi secuencia con numero al azar entre 0 y 2
+ //POR QUE NIVEL VOY (nivel muestro)
+
+ if(nivel_muestro == 24) {//si llego a 24 niveles, gano
+ mostrando = 0;
+ MAQUINA_GENERAL = WIN;
+ MAQUINA_MUESTRO = INICIO2;
+ }
+ contador_muestro = 0;
+ MAQUINA_MUESTRO = ON;
+ }
+ break;
+ case ON:
+ COLORES(paso[nivel_mostrando]);//prendo los colores de la secuencia
+
+ //CUAL ESTOY MOSTRANDO AHORA (nivel_mostrando)
+ //a medida que se aumentan los niveles se disminuye el tiempo de encendido de los leds
+ if (nivel_muestro <= 5) {
+ if (contador_muestro >= 10) {
+ contador_muestro = 0;
+ MAQUINA_MUESTRO = OFF;
+ }
+ }
+ if ((nivel_muestro > 5)&&(nivel_muestro <= 10)) {
+ if (contador_muestro >= 8) {
+ contador_muestro = 0;
+ MAQUINA_MUESTRO = OFF;
+ }
+ }
+ if ((nivel_muestro > 10)&&(nivel_muestro <= 15)) {
+ if (contador_muestro >= 6) {
+ contador_muestro = 0;
+ MAQUINA_MUESTRO = OFF;
+ }
+ }
+ if ((nivel_muestro > 15)&&(nivel_muestro <= 20)) {
+ if (contador_muestro >= 10) {
+ contador_muestro = 0;
+ MAQUINA_MUESTRO = OFF;
+ }
+ }
+ if ((nivel_muestro > 20)&&(nivel_muestro <= 24)) {
+ if (contador_muestro >= 10) {
+ contador_muestro = 0;
+ MAQUINA_MUESTRO = OFF;
+ }
+ }
+ break;
+ case OFF://apago las salidas
+ rojo = 1;
+ verde = 1;
+ azul = 1;
+ if(contador_muestro >= 5) {//tiempo de espera entre led y led
+ if((nivel_mostrando) == (nivel_muestro - 1)) {//si se mostraron todos los niveles
+ mostrando = 0;//en la maquina general hbailita a pasar al caso de espero_sec
+ MAQUINA_MUESTRO = INICIO2;
+ } else {//si quedan niveles por mostrar
+ nivel_mostrando++;//aumento variable para luego mostrar proximo nivel
+ contador_muestro = 0;
+ MAQUINA_MUESTRO = ON;//vuelvo a prender el siguiente nivel
+ }
+ }
+ }
+}
+//APRETAR
+void FUNCION_APRETO()
+{
+ switch(MAQUINA_APRETO) {
+ default:
+ MAQUINA_APRETO = INICIO3;
+ break;
+ case INICIO3:
+ if(apretar == 1) {//habilitado por la maquina general cuando entro al case espero_sec
+ espero_puls = 0;
+ contador_apreto = 0;
+ MAQUINA_APRETO = ESPERO_PULS;
+ }
+ break;
+ case ESPERO_PULS:
+
+ if(PULS_TSI() != -1) {//si oprimo el tsi
+ if(PULS_TSI() == paso[espero_puls]) {//si lo oprimido es el seleccionado para el color asignado previamente
+ if(espero_puls < (nivel_muestro-1)) {//si no oprimi todos los niveles
+ espero_puls++;//sumo variable para apretar el proximo nivel y comparar
+ contador_apreto = 0;
+ MAQUINA_APRETO = DELAY;//voy al caso en el que se muestran los leds que aprete
+ estado_prox = 1;//en el caso de tener que seguir apretando
+ } else {
+ MAQUINA_APRETO = DELAY;//voy al caso en el que se muestran los leds que aprete
+ estado_prox = 2;//en el caso de no tener que apretar mas
+ }
+ } else {// si lo oprimido no es lo seleccionado para el color asignado previamente
+ contador = 0;
+ MAQUINA_GENERAL = LOOSER;//pierdo
+ MAQUINA_APRETO = INICIO3;
+ }
+ }
+ if(contador_apreto >= 30) {//si pasaron 3 segundos y no oprimi nada
+ contador = 0;
+ contador_apreto = 0;
+ MAQUINA_GENERAL = LOOSER;//pierdo
+ MAQUINA_APRETO = INICIO3;
+ }
+ break;
+ case DELAY://caso de delay
+ COLORES(PULS_TSI());//muestro los leds que oprimo con el TSI
+ if(contador_apreto > 2) {//genero un tiempo de 200ms
+ MAQUINA_APRETO = DELAY2;//voy al caso donde apago los leds
+ contador_apreto = 0;
+ }
+ break;
+ case DELAY2:
+ //apago los leds
+ rojo = 1;
+ azul = 1;
+ verde = 1;
+
+ if(estado_prox == 1 && contador_apreto > 2) {//genero otro timepo de 200ms para poder volver a leer el TSI
+ //y si tengo que seguir apretando
+ MAQUINA_APRETO = ESPERO_PULS;//vuelvo al caso donde oprimo los niveles siguientes
+ contador_apreto = 0;
+ } else if(estado_prox == 2 && contador_apreto > 2) {//y si no tengo que apretar mas
+ //y genero otro timepo de 200ms
+ apretar = 0;//hbailito a quer maquina general vuelva a muestro_sec
+ MAQUINA_APRETO = INICIO3;
+ contador_apreto = 0;
+ }
+ break;
+ }
+}
\ No newline at end of file
diff -r 000000000000 -r 8fc99b9ef045 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sun Jun 02 16:51:36 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 8fc99b9ef045 tsi_sensor.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsi_sensor.lib Sun Jun 02 16:51:36 2019 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Kojto/code/tsi_sensor/#976904559b5c