Projekat: Labirint Anesa Drakovac Emir Mujačić

Dependencies:   MMA8451Q N5110 TSI mbed

main.cpp

Committer:
tim008
Date:
2014-06-09
Revision:
0:347c6091fbff

File content as of revision 0:347c6091fbff:

#include "mbed.h"
#include "N5110.h"
#include "MMA8451Q.h"
#include "TSISensor.h"

#define MAXWIDTH 84
#define MAXHEIGHT 48
#define MMA8451_I2C_ADDRESS (0x1d<<1)

Timer deb;
 //        VCC,SCE,RST,D/C,MOSI,SCLK,LED
N5110 lcd (PTD0, PTA13, PTA12, PTD5, PTC6, PTC5, PTD4);
// NC u PTC7 u N5110.cpp
//             SDA   SCL    Address
MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);

TSISensor tsi;
Ticker t;
int X=0;
int Y=0;

bool Sredina=true, Gore=false, Desno=false;
int BrzinaX=0, BrzinaY=0;

void mapa()
{
    for(int i=0; i<84;i++)
     for(int j=0; j<40;j++)
     { 
        if(i==0 || i==83) lcd.setPixel(i,j);
        if(j==0 || j==39) lcd.setPixel(i,j);
     }
     int y=5, i=0, x;
     for(int i=5; i<79;i++) if(i<67 || i>70) lcd.setPixel(i,y); //1
     y=10;
     for(int i=5; i<79;i++) if(i<23 || i>26)  lcd.setPixel(i,y);  //2
     y=15;
     for(int i=5; i<79;i++) lcd.setPixel(i,y); //3
     y=19;
     for(int i=5; i<79; i++) if(i<14 || i>17) lcd.setPixel(i,y); //4
     y=24;
     for(int i=5; i<79; i++) if(i<32 || i>35) lcd.setPixel(i,y); //5
      y=29;
     for(int i=5; i<79; i++) if(i<56 || i>59) lcd.setPixel(i,y); //6
     y=34;
     for(int i=5; i<84; i++) if(i<10 || i>13) lcd.setPixel(i,y); //7
     x=5;
     for(int i=5; i<34; i++) lcd.setPixel(x,i);
     x=78;
     for(int i=5; i<34; i++) lcd.setPixel(x,i);    
     lcd.refresh(); 
     lcd.printString("Nivo:1   Pauza",0,5);
}

void cilj()
{
        for(int i=24; i<28; i++)
         for (int j=16; j<19; j++)
          lcd.setPixel(i,j);
        
        lcd.refresh();
    
}
 
void cursor(int x, int y)
{
        for(int i=x; i<x+3; i++)
         for (int j=y; j<y+3; j++)
          lcd.setPixel(i,j);
        
        lcd.refresh();
    
}

void cursor_main_menua(int x, int y)
{
    for(int i=x; i<x+10; i++)
     for(int j=y; j<y+5; j++)
     {
         lcd.setPixel(i,j);
         
     }
     lcd.refresh();
} 

void cursor_nivoi(int x, int y)
{
    for(int i=x; i<x+14; i++)
     for(int j=y; j<y+5; j++)
     {
         if(lcd.getPixel(i,j)==0) lcd.setPixel(i,j);
         if(lcd.getPixel(i,j)==1) lcd.clearPixel(i,j);
     }
     lcd.refresh();
}
 
void brisi(int x, int y)
{
        for(int i=x; i<x+3; i++)
         for (int j=y; j<y+3; j++)
          lcd.clearPixel(i,j);
        lcd.refresh();
}

void brzina(int n)
{
    switch(n)
        {
            case 0:{ wait(0.07); break;}
            case 1:{ wait(0.06); break;}
            case 2:{ wait(0.05); break;}
            case 3:{ wait(0.04); break;}
            case 4:{ wait(0.03); break;}
            case 5:{ wait(0.02); break;}
        }
}
 
void KLijevo(int &x, int &y)
{
    if(x>1 && lcd.getPixel(x-1,y)==0 && lcd.getPixel(x-1,y+1)==0 && lcd.getPixel(x-1,y+2)==0 ){
        brisi(x,y);
        x=x-1;
        cursor(x,y);
        brzina(BrzinaX);
    }
}
 
void KDesno(int &x, int &y)
{
    if(x<80 && lcd.getPixel(x+3,y) ==0 && lcd.getPixel(x+3,y+1) ==0 && lcd.getPixel(x+3,y+2) ==0 || (x+3)==24 || (x+3)==25 || (x+3)==26){
        brisi(x,y);
        x=x+1;
        cursor(x,y);
        brzina(BrzinaX);
    }
}
 
void KGore(int &x, int &y)
{
    if(y>1 && lcd.getPixel(x,y-1)==0 && lcd.getPixel(x+1,y-1)==0 && lcd.getPixel(x+2,y-1)==0){
        brisi(x,y);
        y=y-1;
        cursor(x,y);
        brzina(BrzinaY);
    }
}
 
void KDolje(int &x, int &y)
{
    if(y<36 && lcd.getPixel(x,y+3)==0 && lcd.getPixel(x+1,y+3)==0 && lcd.getPixel(x+2,y+3)==0){
        brisi(x,y);
        y=y+1;
        cursor(x,y);
        brzina(BrzinaY);
    }
}

void SDesno()
{
    if(Sredina || Desno) 
    {
        Desno = true ; Sredina=false; 
        if(BrzinaX<5) BrzinaX++; 
        KDesno(X,Y);
    }
    if(!Sredina && !Desno)
    {
        if(BrzinaX>0) BrzinaX--;
        if(BrzinaX==0) Sredina=true;
        KLijevo(X,Y);
    }
}

void SLijevo()
{
    if(Sredina || !Desno) {Desno = false ; Sredina=false; if(BrzinaX<5) BrzinaX++;KLijevo(X,Y); }
    if(!Sredina && Desno)
    {
        if(BrzinaX>0) BrzinaX--;
        if(BrzinaX==0) Sredina=true;
        KDesno(X,Y);
    }
}

void SGore()
{
    if(Sredina || Gore) {Gore = true ; Sredina=false; if(BrzinaY<5) BrzinaY++; KGore(X,Y);}
    if(!Sredina && !Gore)
    {
        if(BrzinaY>0) BrzinaY--;
        if(BrzinaY==0) Sredina=true;
        KDolje(X,Y);
    }
}

void SDole()
{
    if(Sredina || !Gore) {Gore = false ; Sredina=false; if(BrzinaY<5) BrzinaY++;  KDolje(X,Y);}
    if(!Sredina && Gore)
    
    {
        if(BrzinaY>0) BrzinaY--;
        if(BrzinaY==0) Sredina=true;
        KGore(X,Y);
    }
}

void kretanje()
{
        
        float x, y;
        x = (acc.getAccX());
        y = (acc.getAccY());
        if(y<-0.5) SLijevo();
        if(y>0.5) SDesno();
        if(x<-0.5) SGore(); 
        if(x>0.5) SDole();      
        if((x<0.5 && x>-0.5) || (y<0.5 && y>-0.5)) Sredina=true;  
        
} 

void kreni()
{ 
    int n=0;
    lcd.clear();
                X=1; Y=1;
                cursor(X,Y);
                mapa();
                cilj();
                int a=0;
                while(a==0)
                { 
                    kretanje();
                    if(X==24 && Y==16) 
                    {
                         lcd.clear();
                         lcd.printString("Pobjeda", 20,3);
                         wait(3);
                         lcd.clear();
                         a=1;
                    }
                    if(tsi.readPercentage()>0.6) n=1;
                       while(n==1)
                    {
                        wait(0.001);
                        if(tsi.readPercentage()>0.4) n=2;
                    }
                }              
}

void menu()
{
    int n=1;
    lcd.printString("New Game", 5,1);
    lcd.printString("Level",5,2);
    cursor_main_menua(54, 10);
    lcd.refresh();
    while(1)
    {
        
        float x;
        x = (acc.getAccX());    
        if(x<-0.5) n=1; 
        if(x>0.5) n=2; 
        if(n==2)
        {
                lcd.clear();
                lcd.printString("New Game", 5,1);
                lcd.printString("Level",5,2);
                cursor_main_menua(54, 17);
                
        }
        if(n==1)
        {
                lcd.clear();
                lcd.printString("New Game", 5,1);
                lcd.printString("Level",5,2);
                cursor_main_menua(54, 10);
                
        }
        if(tsi.readPercentage()>0.0)
        {
            if(n==1)
            {
                kreni();
            }
            if(n==2)
            {
                
                lcd.clear();
                lcd.printString("Level 1", 5,1);
                lcd.printString("Touch to", 5,3);
                lcd.printString("START", 5,4);
                wait(1);
                while(1)
                if(tsi.readPercentage()>0.0) kreni();
            }
         }
     }
} 
 
int main(){
  deb.start();
  lcd.init();
  lcd.setXYAddress(X,Y);
  lcd.setBrightness(0.0);
  
  menu();
  while(1){
  }
}