SIMON

Dependencies:   mbed tsi_sensor

Files at this revision

API Documentation at this revision

Comitter:
gonzaloMS
Date:
Wed Jun 19 12:44:51 2019 +0000
Child:
1:6cb3e90ec4f3
Commit message:
TP de Simon

Changed in this revision

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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Jun 19 12:44:51 2019 +0000
@@ -0,0 +1,354 @@
+#include "mbed.h"
+
+enum{MUESTRA,MUESTRA2,NO_MUESTRA,NO_MUESTRA2,NO_INGRESA,INGRESA,ESPERA,FAIL};
+
+const int MaxElem=5;
+
+DigitalOut ledR(LED1);
+DigitalOut ledG(LED2);
+DigitalOut ledB(LED3);
+
+DigitalIn E1r(D2);
+DigitalIn E2r(D3);
+DigitalIn E3r(D4);
+DigitalIn reseteo(D5);
+
+Ticker pantalla;
+Ticker leer;
+Ticker Interludio;
+
+int HG=1;
+int E1;
+int E2;
+int E3;
+
+int i=0;
+int i2=0;
+int i3=0;
+int i4=0;
+int iMuestra=0;
+
+int a=0;
+int b=0;
+int c=0;
+
+int estadosSecuencia;
+int estadosConfirm;
+
+int CT=0;
+int EP;
+int LED;
+
+int print=0;
+
+int contar=0;
+
+int j;
+int x;
+int w;
+int p;
+int l=0;
+
+int vecR[MaxElem];
+int vecG[MaxElem];
+int vecB[MaxElem];
+int vecE1[MaxElem];
+int vecE2[MaxElem];
+int vecE3[MaxElem];
+
+void generadorSecuencia();
+void detectorPulsado();
+void confirmacion();
+void leerFuncion();
+void cutled();
+void pantalleate();
+
+int main(void) {
+    reseteo.mode(PullUp);
+    ledR=1;
+    ledG=1;
+    ledB=1;
+    leer.attach(&leerFuncion,0.4);
+    Interludio.attach(&cutled,0.2);
+    pantalla.attach(&pantalleate,1);
+    while (true) {
+        if(reseteo==0)
+        {
+            for(j=0;j<MaxElem;j++){
+                vecR[j]=0;
+                vecG[j]=0;
+                vecB[j]=0;
+                vecE1[j]=0;
+                vecE2[j]=0;
+                vecE3[j]=0;
+            }
+            CT=0;
+            HG=0;
+            EP=0;
+            l=0;
+            contar=0;
+            print=0;
+            LED=0;
+            a=0;
+            b=0;
+            c=0;
+            i=0;
+            i2=0;
+            i3=0;
+            i4=0;
+            estadosSecuencia=NO_MUESTRA;
+            estadosConfirm=NO_INGRESA;
+            
+            
+        }
+        if(CT<=MaxElem)
+        {
+            if(print==1)
+            {
+                printf("Cant. Total Secuencia:%d \n",CT);
+                printf("Cant. Total de veces Ingresado:%d \n",i2);
+                printf("Cant. Total de veces que fue correcto lo ingresado:%d \n",i3);
+                printf("Secuencia a lograr: \n");
+                for(p=0;p<=(CT-1);p++)
+                {
+                    if(CT==MaxElem+1)
+                    {
+                        break;   
+                    }
+                    printf("%d %d %d \n",vecR[p],vecG[p],vecB[p]);   
+                }  
+                printf("\n \n");
+                print=0;   
+            }
+            if(l==1)
+            {
+            detectorPulsado();
+            generadorSecuencia();
+            confirmacion();
+            l=0;
+            }
+        }
+        else
+        {
+            if(l==1)
+            {
+                printf("Por favor, empiece otra vez \n");
+                l=0;  
+            }
+        }
+    }
+}
+
+void pantalleate()
+{
+    print=1;   
+}
+
+void cutled()
+{   
+    if(contar%2==0)
+    {
+        ledR=1;
+        ledG=1;
+        ledB=1;
+    }
+    contar++;
+}
+void leerFuncion()
+{
+    l=1;     
+}
+
+void confirmacion(){
+    switch(estadosConfirm)
+    {
+        default:
+        case NO_INGRESA:
+        for(w=0;w<MaxElem;w++)
+        {
+            vecE1[w]=0;
+            vecE2[w]=0;
+            vecE3[w]=0;
+        }
+        i2=0;
+        i4=0;
+        i3=0;
+        HG=1;
+        estadosConfirm=ESPERA;
+        break;
+        
+        case INGRESA:
+        i4++;
+        estadosConfirm=ESPERA;
+        break;
+        
+        case ESPERA:
+        HG=0;
+        if(E1==0 && E2==0 && E3==0)
+        {
+            estadosConfirm=ESPERA;
+        }
+        else
+        {
+            if(i3!=CT)
+            {
+                if((vecR[i4]==vecE1[i4]) && (vecG[i4]==vecE2[i4]) && (vecB[i4]==vecE3[i4]))
+                {
+                    i3++; 
+                    estadosConfirm=INGRESA;
+                }
+                else
+                {
+                    estadosConfirm=FAIL;   
+                }
+            }
+        }
+        if(i3==CT)
+        {
+            estadosConfirm=NO_INGRESA;
+        }
+        break;
+        
+        case FAIL:
+        CT=MaxElem+1;
+        break;
+    }
+}
+void generadorSecuencia(){
+    switch(estadosSecuencia)
+    {
+        default:
+        case NO_MUESTRA:
+            LED=0;
+            if(HG==0)
+            {
+                estadosSecuencia=NO_MUESTRA;
+            }
+            else
+            {
+                estadosSecuencia=NO_MUESTRA2;
+            }
+            break;
+        
+        case NO_MUESTRA2:
+        CT++;
+        estadosSecuencia=MUESTRA;
+        break;
+        
+        case MUESTRA:
+            if(EP!=CT)
+            {
+                LED=rand()%3+1;
+                if(LED==1)
+                {
+                    vecR[i]=1;
+                    vecG[i]=0;
+                    vecB[i]=0;
+                }
+                else if(LED==2)
+                {
+                    vecR[i]=0;
+                    vecG[i]=1;
+                    vecB[i]=0;
+                }
+                else if(LED==3)
+                {
+                    vecR[i]=0;
+                    vecG[i]=0;
+                    vecB[i]=1;
+                }
+                if(i<CT)
+                {
+                    i++;
+                }
+                EP++;
+            }
+            else
+            {
+                estadosSecuencia=MUESTRA2;
+            }
+            break;
+            
+            case MUESTRA2:
+            if(iMuestra<=CT-1)
+            {
+                ledR=!vecR[iMuestra];
+                ledG=!vecG[iMuestra];
+                ledB=!vecB[iMuestra];
+                iMuestra++;
+                estadosSecuencia=MUESTRA2;
+            }
+            else
+            {
+                iMuestra=0;
+                estadosSecuencia=NO_MUESTRA;
+            }
+            break;
+    }
+}
+
+void detectorPulsado()
+{
+    if(E1r==1 && a==0)
+    {
+        E1=1;
+        a=1;
+        vecE1[i2]=1;
+        vecE2[i2]=0;
+        vecE3[i2]=0;
+        ledR=0;
+        i2++;
+    }
+    else if(E1r==1 && a==1)
+    {
+        ledR=1;
+        E1=0;
+    }
+    else if(E1r==0 && a==1)
+    {
+        E1=0;
+        a=0;
+    }
+    
+    if(E2r==1 && b==0)
+    {
+        E2=1;
+        b=1;
+        vecE1[i2]=0;
+        vecE2[i2]=1;
+        vecE3[i2]=0;
+        ledG=0;
+        i2++;
+    }
+    else if(E2r==1 && b==1)
+    {
+        ledG=1;
+        E2=0;
+    }
+    else if(E2r==0 && b==1)
+    {
+        E2=0;
+        b=0;
+    }
+
+    if(E3r==1 && c==0)
+    {
+        E3=1;
+        c=1;
+        vecE1[i2]=0;
+        vecE2[i2]=0;
+        vecE3[i2]=1;
+        ledB=0;
+        i2++;
+    }
+    else if(E3r==1 && c==1)
+    {
+        ledB=1;
+        E3=0;
+    }
+    else if(E3r==0 && c==1)
+    {
+        E3=0;
+        c=0;
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Jun 19 12:44:51 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tsi_sensor.lib	Wed Jun 19 12:44:51 2019 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Kojto/code/tsi_sensor/#976904559b5c