pp

Dependencies:   mbed

Revision:
4:a61cdd4e7afa
Parent:
3:dc88b52d526c
Child:
5:60262753a05f
--- a/main.cpp	Sat Dec 05 16:43:40 2015 +0000
+++ b/main.cpp	Sat Dec 05 19:01:26 2015 +0000
@@ -1,13 +1,17 @@
 #include "mbed.h"
 #include "DS1307.h"
 #include "DigitDisplay.h"
+#include "Game.h"
 
 DS1307 myrtc(I2C_SDA,I2C_SCL);
 DigitDisplay display(D7,D8);
+Game game;
 DigitalOut buzzer(D6);
 BusIn b(D9,D10,D11);
 BusOut led(D2,D3,D4,D5);
 AnalogIn analog_value(A2);
+const bool bcd[16][4] = {{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},{0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1},
+                         {1,0,0,0},{1,0,0,1},{1,0,1,0},{1,0,1,1},{1,1,0,0},{1,1,0,1},{1,1,1,0},{1,1,1,1}};
 
 void DisplayTime();
 
@@ -18,62 +22,129 @@
    int sec=45,min=59,hour=6,day=7,date=5,month=12,year=15;
    int n=0,opt=1,p=0,ten_hour,nu_hour,ten_min,nu_min,hour_a=7,min_a=0;
    float mea;
+   int state=0;
+   int hexnum[4];
+   int currenthex=0, checkbcd=0, gameround=0, changehex=1;
         
    myrtc.settime(sec,min,hour,day,date,month,year);
    //DisplayTime();
    //display.Displayset((hour-(hour%10))/10,hour%10,(min-(min%10))/10,min%10);
    while(1)
-   {        
-        mea=analog_value.read();
-        if(b==0b011){n=1;}
-        else if(b==0b101){n=2;}
-        else if(b==0b110){n=3;}
-        else n=0;
-        display.getButtonState(n);
-        if(display.checkButton1()==1){led=0b100;mode=1;}
-        else if(display.checkButton2()==1){led=0b010;mode=2;}
-        else if(display.checkButton3()==1){led=0b001;mode=3;}
+   {
+      mea=analog_value.read();       
+      /*if(state==0)
+            {
+                mea=analog_value.read();
+                if(b==0b011){n=1;}
+                else if(b==0b101){n=2;}
+                else if(b==0b110){n=3;}
+                else n=0;
+                display.getButtonState(n);
+        
+                wait_ms(100);
+        
+                //printf("%d\n",mode);
+        
+                wait_ms(100);
+        
+                if(display.checkButton3()==1)
+                {
+                    p++;
+                    if(p==10){p=0;}
+                    printf("%d\n",p);
+                    if(p%2==0){opt=1;}
+                    if(p%2==1){opt=2;}
+                }
+        
+                myrtc.gettime(&sec,&min,&hour,&day,&date,&month,&year);
+        
+                if(opt==1)
+                {
+                    display.setColon(1);
+                    display.Displayset((hour-(hour%10))/10,hour%10,(min-(min%10))/10,min%10);           
+                }
+                if(opt==2)
+                {
+                    ten_hour=(hour_a-(hour_a%10))/10;
+                    nu_hour=hour_a%10;
+                    ten_min=(min_a-(min_a%10))/10;
+                    nu_min=min_a%10;
+                    display.Displayset(ten_hour,nu_hour,ten_min,nu_min);
         
-        wait_ms(100);
-        
-        //printf("%d\n",mode);
-        
-        wait_ms(100);
-        
-        if(display.checkButton3()==1)
+                    if(display.checkButton1()==1){hour_a++;}
+                    if(display.checkButton2()==1){min_a++;}
+             
+                    if(hour_a==24){hour_a=0;}
+                    if(min_a==60){min_a=0;}
+             
+                }
+                
+            }
+        if(hour==hour_a&&min==min_a)
+        else*/ if(mode==0)
         {
-            p++;
-            if(p==10){p=0;}
-            printf("%d\n",p);
-            if(p%2==0){opt=1;}
-            if(p%2==1){opt=2;}
+            //buzzer=1;
+            state = 1;
+            int gamelevel=game.getlevel();
+            if(changehex==1)
+            {
+                for(int i=0;i<gamelevel;i++)
+                {
+                    hexnum[i] = game.randomHex(mea);
+                }
+                if(gamelevel==1) display.Displayset(0xFF,0xFF,hexnum[0],0xFF);
+                else if(gamelevel==2) display.Displayset(0xFF,hexnum[0],hexnum[1],0xFF);
+                else if(gamelevel==3) display.Displayset(0xFF,hexnum[0],hexnum[1],hexnum[2]);
+                else if(gamelevel==4) display.Displayset(hexnum[0],hexnum[1],hexnum[2],hexnum[3]);
+                changehex = 0;
+            }
+            if(b==0b011){n=1;}
+            else if(b==0b101){n=2;}
+            else if(b==0b110){n=3;}
+            else n=0;
+            display.getButtonState(n);
+            if((bcd[hexnum[currenthex]][checkbcd]==0 && display.checkButton1()==1)||(bcd[hexnum[currenthex]][checkbcd]==1 && display.checkButton2()==1))
+            {
+                if(checkbcd<4) checkbcd++;
+                else
+                {
+                    checkbcd=0;
+                    currenthex++;
+                    if(currenthex==gamelevel) 
+                    {
+                        gameround++;
+                        currenthex = 0;
+                        changehex = 1;
+                        display.A();
+                    } 
+                }
+            }
+            else if((bcd[hexnum[currenthex]][checkbcd]==1 && display.checkButton1()==1)||(bcd[hexnum[currenthex]][checkbcd]==0 && display.checkButton2()==1))
+            {
+                checkbcd=0;
+                game.pluslevel();
+                changehex = 1;
+                display.F();
+            }
+            else if(display.checkButton3()==3)
+            {
+                checkbcd=0;
+                currenthex==0;
+            }
+            
+            if(gameround==4) 
+            {
+                mode=1;
+                state=0;
+                buzzer=0;
+                game.resetlevel();
+                checkbcd=0;
+                currenthex==0;
+                gameround=0;
+                changehex=1;
+            }
         }
         
-        myrtc.gettime(&sec,&min,&hour,&day,&date,&month,&year);
-        
-        if(opt==1)
-        {
-            display.setColon(1);
-                 display.Displayset((hour-(hour%10))/10,hour%10,(min-(min%10))/10,min%10);           
-        }
-        if(opt==2)
-        {
-             ten_hour=(hour_a-(hour_a%10))/10;
-             nu_hour=hour_a%10;
-             ten_min=(min_a-(min_a%10))/10;
-             nu_min=min_a%10;
-             display.Displayset(ten_hour,nu_hour,ten_min,nu_min);
-        
-             if(display.checkButton1()==1){hour_a++;}
-             if(display.checkButton2()==1){min_a++;}
-             
-             if(hour_a==24){hour_a=0;}
-             if(min_a==60){min_a=0;}
-             
-        }
-        if(hour==hour_a&&min==min_a){buzzer=1;}
-        else{buzzer=0;}
-        
         printf("%f\n",mea);
         if(mea>=0.65){min_a=min_a+1;}