
SIMON
main.cpp
- Committer:
- gonzaloMS
- Date:
- 2019-06-19
- Revision:
- 0:31131c8fdcfb
- Child:
- 1:6cb3e90ec4f3
File content as of revision 0:31131c8fdcfb:
#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; } }