Gonzalo Martinez
/
TPBombaAguaDisplays
4 Cables con pulsadores y pull-up con 2 Displays en paralelo
main.cpp
- Committer:
- gonzaloMS
- Date:
- 2019-06-19
- Revision:
- 0:d644ac0f96b0
- Child:
- 1:2f8c5940c425
File content as of revision 0:d644ac0f96b0:
#include "mbed.h" enum{INICIO,GENERA1,GENERA2,GENERA3,FIN,BEGGINING,CHECK1,CHECK2,CHECK3,ENDGAME,WINGAME}; DigitalIn E1r(PTC12); DigitalIn E2r(PTC13); DigitalIn E3r(PTC3); DigitalIn E4r(PTC4); DigitalIn pulsadorReset(PTE29); //Normalmente 1 DigitalOut ledWin(LED2); DigitalOut ledLost(LED1); BusOut Displays(D2,D3,D4,D5,A3,A2,A1,A0,D8); //HAB.2 - HAB.1 -G-F-E-D-C-B-A // int E1=0; int E2=0; int E3=0; int E4=0; int numerosD[]={0b111111010,0b011000010,0b110110110,0b111100110,0b011001110,0b101101110,0b101111110,0b111000010,0b111111110,0b111001110}; int numerosU[]={0b111111001,0b011000001,0b110110101,0b111100101,0b011001101,0b101101101,0b101111101,0b111000001,0b111111101,0b111001101}; Ticker Tempo; Ticker Display; Ticker parpadeoTicker; void generacion(); void chequeo(); void Chronos(); void theviewer(); void ganopierdoreaccion(); void parpadeoFuncion(); void reset(); int parimpar=0; int regresor=60; int Decenas; int Unidades; int secuencia; int check; int cantIgual=0; int cantIgual2=0; int cantIgual3=0; int gSec1; int gSec2; int gSec3; int vecSec[]={0,0,0,0}; int vecSec2[]={0,0,0,0}; int vecSec3[]={0,0,0,0}; int vecSec4[]={0,0,0,0}; int vecChq[]={0,0,0,0}; int parpadeoDisplay=0; int fin=0; int win=0; int i; int y; int k; int g=61; int main() { ledWin=1; ledLost=1; E1r.mode(PullUp); E2r.mode(PullUp); E3r.mode(PullUp); E4r.mode(PullUp); pulsadorReset.mode(PullUp); Tempo.attach(&Chronos,1); Display.attach(&theviewer,0.005); parpadeoTicker.attach(&parpadeoFuncion,0.5); while(1) { generacion(); chequeo(); ganopierdoreaccion(); reset(); if(regresor < g) { E1=E1r; E2=E2r; E3=E3r; E4=E4r; g=regresor; printf("Entradas: %d %d %d %d \n", E1,E2,E3,E4); printf("Tiempo (en segundos): %d \n \n",g); } } } void reset() { if(pulsadorReset==0) { ledWin=1; parimpar=0; cantIgual=0; cantIgual2=0; cantIgual3=0; vecSec[0]=0; vecSec[1]=0; vecSec[2]=0; vecSec[3]=0; vecSec2[0]=0; vecSec2[1]=0; vecSec2[2]=0; vecSec2[3]=0; vecSec3[0]=0; vecSec3[1]=0; vecSec3[2]=0; vecSec3[3]=0; vecSec4[0]=0; vecSec4[1]=0; vecSec4[2]=0; vecSec4[3]=0; vecChq[0]=0; vecChq[1]=0; vecChq[2]=0; vecChq[3]=0; parpadeoDisplay=0; regresor=60; g=61; win=0; fin=0; secuencia=INICIO; check=BEGGINING; } } void ganopierdoreaccion() { if(win==1) { ledWin=0; ledLost=1; } } void parpadeoFuncion() { if(fin==1) { ledLost=!ledLost; } if(fin==1 || win==1) { parpadeoDisplay=!parpadeoDisplay; } } void Chronos() { if(fin==0 && win==0) { if(regresor>0) { regresor--; } else { fin=1; } printf("A lograr: \n"); printf("%d %d %d %d \n",*vecSec,*(vecSec+1),*(vecSec+2),*(vecSec+3)); printf("%d %d %d %d \n",*vecSec2,*(vecSec2+1),*(vecSec2+2),*(vecSec2+3)); printf("%d %d %d %d \n",*vecSec3,*(vecSec3+1),*(vecSec3+2),*(vecSec3+3)); printf("%d %d %d %d \n",*vecSec4,*(vecSec4+1),*(vecSec4+2),*(vecSec4+3)); } } void theviewer() { Decenas=regresor/10; Unidades=regresor-((regresor/10)*10); if(parpadeoDisplay==0) { if(parimpar%2==0) { Displays=numerosD[Decenas]; } else { Displays=numerosU[Unidades]; } } else { if(parimpar%2==0) { Displays=0; } else { Displays=0; } } if(parimpar==201) { parimpar=0; } parimpar++; } void chequeo(){ switch(check) { default: case BEGGINING: if(E1!=0 || E2!=0 || E3!=0 || E4!=0) { check=CHECK1; } else { check=BEGGINING; } break; case CHECK1: vecChq[0]=E1; vecChq[1]=E2; vecChq[2]=E3; vecChq[3]=E4; if(cantIgual<=2) { for(i=0;i<4;i++) { if(vecSec[i]==vecChq[i]) { cantIgual++; } } } if(cantIgual!=4) { check=ENDGAME; } if(cantIgual==4 && ((E1==0 && E2==0 && E3==0) || (E1==0 && E2==0 && E4==0) || (E1==0 && E3==0 && E4==0) || (E2==0 && E3==0 && E4==0))) { check=CHECK1; } else if(cantIgual==4 && ((E1!=0 && E2==0 && E3==0) || (E1==0 && E2!=0 && E3==0) || (E1==0 && E2==0 && E3!=0) || (E1!=0 && E2==0 && E4==0) || (E1==0 && E2!=0 && E4==0) || (E1==0 && E2==0 && E4!=0) || (E1!=0 && E3==0 && E4==0) || (E1==0 && E3!=0 && E4==0) || (E1==0 && E3==0 && E4!=0) || (E2!=0 && E3==0 && E4==0) || (E2==0 && E3!=0 && E4==0) || (E2==0 && E3==0 && E4!=0))) { check=CHECK2; } break; case CHECK2: vecChq[0]=E1; vecChq[1]=E2; vecChq[2]=E3; vecChq[3]=E4; if(cantIgual2<=2) { for(y=0;y<4;y++) { if(vecSec2[y]==vecChq[y]) { cantIgual2++; } } } if(cantIgual2!=4) { check=ENDGAME; } if(cantIgual==4 && ((E1==0 && E2==0) || (E2==0 && E3==0) || (E1==0 && E3==0) || (E1==0 && E4==0) || (E2==0 && E4==0) || (E3==0 && E4==0))) { check=CHECK2; } else if(cantIgual==4 && ((E1!=0 && E2==0) || (E1==0 && E2!=0) || (E2!=0 && E3==0) || (E2==0 && E3!=0) || (E1!=0 && E3==0) || (E1==0 && E3!=0) || (E1!=0 && E4==0) || (E1==0 && E4!=0) || (E2!=0 && E4==0) || (E2==0 && E4!=0) || (E3!=0 && E4==0) || (E3==0 && E4!=0) )) { check=CHECK3; } break; case CHECK3: vecChq[0]=E1; vecChq[1]=E2; vecChq[2]=E3; vecChq[3]=E4; if(cantIgual3<=2) { for(k=0;k<4;k++) { if(vecSec3[k]==vecChq[k]) { cantIgual3++; } } } if(cantIgual3!=4) { check=ENDGAME; } if(cantIgual3==4 && (E1==0 || E2==0 || E3==0 || E4==0)) { check=CHECK3; } if(cantIgual3==4 && E1==1 && E2==1 && E3==1 && E4==1) { check=WINGAME; } break; case ENDGAME: fin=1; check=ENDGAME; break; case WINGAME: win=1; check=WINGAME; break; } } void generacion(){ switch(secuencia) { default: case INICIO: gSec1=0; gSec2=0; gSec3=0; secuencia=GENERA1; break; case GENERA1: gSec1=rand()%4+1; if(gSec1==1) { vecSec[0]++; } else if(gSec1==2) { vecSec[1]++; } else if(gSec1==3) { vecSec[2]++; } else if(gSec1==4) { vecSec[3]++; } secuencia=GENERA2; break; case GENERA2: gSec2=rand()%4+1; vecSec2[0]=vecSec[0]; vecSec2[1]=vecSec[1]; vecSec2[2]=vecSec[2]; vecSec2[3]=vecSec[3]; if(gSec2==1) { if(vecSec2[0]==1) { secuencia=GENERA2; } else { vecSec2[0]++; } } else if(gSec2==2) { if(vecSec2[1]==1) { secuencia=GENERA2; } else { vecSec2[1]++; } } else if(gSec2==3) { if(vecSec2[2]==1) { secuencia=GENERA2; } else { vecSec2[2]++; } } else if(gSec2==4) { if(vecSec2[3]==1) { secuencia=GENERA2; } else { vecSec2[3]++; } } if((vecSec2[0]+vecSec2[1]+vecSec2[2]+vecSec2[3]) == 2) { secuencia=GENERA3; } else { secuencia=GENERA2; } break; case GENERA3: gSec3=rand()%4+1; vecSec3[0]=vecSec2[0]; vecSec3[1]=vecSec2[1]; vecSec3[2]=vecSec2[2]; vecSec3[3]=vecSec2[3]; if(gSec3==1) { if(vecSec3[0]==1) { secuencia=GENERA3; } else { vecSec3[0]++; } } else if(gSec3==2) { if(vecSec3[1]==1) { secuencia=GENERA3; } else { vecSec3[1]++; } } else if(gSec3==3) { if(vecSec3[2]==1) { secuencia=GENERA3; } else { vecSec3[2]++; } } else if(gSec3==4) { if(vecSec3[3]==1) { secuencia=GENERA3; } else { vecSec3[3]++; } } if((vecSec3[0]+vecSec3[1]+vecSec3[2]+vecSec3[3]) == 3) { secuencia=FIN; } else { secuencia=GENERA3; } break; case FIN: vecSec4[0]=1; vecSec4[1]=1; vecSec4[2]=1; vecSec4[3]=1; secuencia=FIN; break; } }