
SIMON
Revision 0:31131c8fdcfb, committed 2019-06-19
- Comitter:
- gonzaloMS
- Date:
- Wed Jun 19 12:44:51 2019 +0000
- Child:
- 1:6cb3e90ec4f3
- Commit message:
- TP de Simon
Changed in this revision
--- /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