Simon

Dependencies:   mbed

Revision:
0:a49a5f50d6bc
Child:
1:78297550b459
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon May 27 11:31:15 2019 +0000
@@ -0,0 +1,284 @@
+#include "mbed.h"
+#include "tsi_sensor.h"
+#include "DebouncedIn.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
+
+
+
+#define NIVELES 25
+
+
+TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
+//Definimos que el puerto serie se llama pc
+Serial pc(USBTX, USBRX);
+//Variable donde se guarda lo leido
+char   c = '\0';
+unsigned int semilla = 0;
+//bit usado como flag para procesar datos
+bool newdata = false;   //Se pone en true cuando hay nuevos datos
+//Creamos los tres leds pra usar
+DigitalOut Rojo(LED1);
+DigitalOut Verde(LED2);
+DigitalOut Azul(LED3);
+
+void invierte();
+void simon();
+char Pulsador ();
+void leds(int num); // led(0b000) = apagados,  led(0b100) = rojo, led(0b010) = Verde, led(0b001) = Azul, led(0b111) = Blanco,
+char sec[50] = {0};
+char r = 1;
+char t = 0;
+char pos = 0;
+int times    = 0, espera = 0;;
+bool flagPulsador = 0;
+char pulsador = 0;
+char estado = 0;
+
+bool timer1 = 0, timer2 = 0, timer3 = 0;
+bool pulsador1 = 1, pulsador2 = 1, pulsador3 = 1;
+bool st1= 0, st2 = 0, st3 = 0, l = 1, apagado = 0;
+
+
+DebouncedIn PV(PTB1);
+DebouncedIn PA(PTB0);
+DebouncedIn PR(PTB2);
+Ticker ti;
+
+//Callback cuando se detecta una entrada
+void onCharReceived()
+{
+    //Copiamos lo leido en c
+    c = pc.getc();
+    newdata = true;
+}
+
+int main()
+{
+    ti.attach(&invierte, 0.1);
+
+//Prendemos los LEDS
+    leds(0b111);
+    printf("Toque cualquier pulsador para comenzar: \r\n");
+//Ejecutar onCharReceived por cada entrada por puerto
+
+    while(true) {
+        Pulsador();
+        simon();
+        flagPulsador = 0;
+    }
+}
+void simon()
+{
+    static int i;
+    switch(estado) {
+        default:
+            times = 0;
+            if(pulsador != 0 && flagPulsador == 1) {
+                leds(0b000);
+                printf("Comencemos: \r\n\n");
+                estado = 1;
+                flagPulsador = 0;
+            }
+            break;
+
+        case 1:
+            //Reinicio la secuencia
+            srand (semilla*4920*1912);
+            for(i = 0; i <= NIVELES ; i ++) {
+                sec[i] = rand() % 3 + 1;
+            }
+            r = 1;
+            t = 0;
+            pos = 0;
+            estado = 2;
+            times = 0;
+            l = 0;
+            break;
+
+        case 2:
+            //Muestro la secuencia
+            if(l) {
+                if (apagado == 0) {
+                    if(t >= r) {
+                        estado = 3;
+                        printf("\nA jugar Bro :) \r");
+                        printf("\r\n\n");
+                        espera = 0;
+                        break;
+                    }
+                    switch(sec[t]) {
+                        case 1:
+                            leds(0b100);
+                            if(times > 5) {
+                                times = 0;
+                                printf("ROJO\r\n");
+                                apagado = 1;
+                                t++;
+                            }
+                            break;
+                        case 2:
+                            leds(0b010);
+                            if(times > 5) {
+                                apagado = 1;
+                                times = 0;
+                                printf("VERDE\r\n");
+                                t++;
+                            }
+                            break;
+                        case 3:
+                            leds(0b001);
+                            if(times > 5) {
+                                apagado = 1;
+                                times = 0;
+                                printf("AZUL\r\n");
+                                t++;
+                            }
+                            break;
+                    }
+                } else {
+                    leds(0b000);
+                    if (times > 5) {
+                        times = 0;
+                        apagado = 0;
+                    }
+                }
+            } else {
+                if (times > 5)
+                    leds(0b000);
+                if (times > 10) {
+                    l = 1;
+                    times = 0;
+                }
+            }
+            break;
+        case 3:
+            if (espera > 50) {
+                printf("Tardaste demaciado tiempo en elegir\r\n");
+                estado = 4;
+                break;
+            }
+            if(flagPulsador) {
+                espera = 0;
+                flagPulsador = 0;
+                times = 0;
+                switch(pulsador) {
+                    case 1:
+                        printf("ROJO \r\n");
+                        leds(0b100);
+                        break;
+                    case 2:
+                        printf("VERDE \r\n");
+                        leds(0b010);
+                        break;
+                    case 3:
+                        printf("AZUL \r\n");
+                        leds(0b001);
+                        break;
+                }
+                if(pulsador == sec[pos]) {
+                    pos++;
+                    if(pos == r) {
+                        r++;
+                        printf("\n\t--------------------------------\r");
+                        if (r == NIVELES + 1) {
+                            printf("\nGANASTE!!! :)\r\n\n");
+                            printf("Apreta cualquier boton para reiniciar!\r\n\n");
+                            leds(0b111);
+                            estado = 0;
+                        } else {
+                            printf("\nPasaste al nivel %d!\r\n\n", r);
+                            t = 0;
+                            pos = 0;
+                            estado = 2;
+                            l = 0;
+                            times = 0;
+                        }
+                    }
+                } else {
+                    estado = 4;
+                }
+            }
+            if (times > 5) {
+                leds(0b000);
+
+            }
+            break;
+        case 4:
+            printf("\nPerdiste Bro :(\r\n");
+            printf("Apreta cualquier boton para reiniciar!\r\n\n");
+            leds(0b111);
+            estado = 0;
+            break;
+    }
+}
+void leds(int num)
+{
+    switch(num) {
+        case 0:
+            Rojo = 1;
+            Verde = 1;
+            Azul = 1;
+            break;
+        case 4:
+            Rojo = 0;
+            Verde = 1;
+            Azul = 1;
+            break;
+        case 2:
+            Rojo = 1;
+            Verde = 0;
+            Azul = 1;
+            break;
+        case 1:
+            Rojo = 1;
+            Verde = 1;
+            Azul = 0;
+            break;
+        case 7:
+            Rojo = 0;
+            Verde = 0;
+            Azul = 0;
+            break;
+    }
+}
+
+char Pulsador()
+{
+    pulsador = 0;
+    
+    if (PV.rising()) {
+        flagPulsador = 1;
+        pulsador = 2;
+        return 0;
+    }
+    if (PA.rising()) {
+        flagPulsador = 1;
+        pulsador = 3;
+        return 0;
+    }
+    if (PR.rising()) {
+        flagPulsador = 1;
+        pulsador = 1;
+        return 0;
+    }
+    
+    pulsador = 0;
+    flagPulsador = 0;
+    return 0;
+}
+
+void invierte()
+{
+    times++;
+    semilla ++;
+    espera++;
+}
\ No newline at end of file