school project

Dependencies:   MMA8451Q mbed

main.cpp

Committer:
xlizne01
Date:
2016-01-12
Revision:
5:d6738e1238d8
Parent:
4:4930b1cb20bd
Child:
6:5711a5b57d17

File content as of revision 5:d6738e1238d8:

#include "mbed.h"
#include "MMA8451Q.h"
 
#define MMA8451_I2C_ADDRESS (0x1d<<1)
#define MOVE_ANGLE 35   // > degrees for move 

MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);

void accelerometer(void);  
void zobrazeni(void);
void barva(int,int);
void pohyb(void);

 int i,j,k,p;
 int RED, GREEN, BLUE;
 int RledA, RledB, GledA, GledB, BledA, BledB;
 float xAngle, yAngle;
 
 char acc_dir;
 
 int pole[4][4]={{7,0,0,7}, {0,0,0,0}, {0,0,0,0}, {7,0,0,7}};

DigitalOut prvni(PTE5);
DigitalOut druhy(PTE4);
DigitalOut treti(PTE3);
DigitalOut ctvrty(PTE2);
DigitalOut paty(PTB11);
DigitalOut sesty(PTB10);
DigitalOut sedmy(PTB9);
DigitalOut osmy(PTB8);

DigitalOut Rled1(PTC9); 
DigitalOut Rled2(PTC8);
DigitalOut Rled3(PTA5);
DigitalOut Rled4(PTA4);
DigitalOut Rled5(PTA12);
DigitalOut Rled6(PTD4);
DigitalOut Rled7(PTA1);
DigitalOut Rled8(PTA2);

DigitalOut Gled1(PTA13);
DigitalOut Gled2(PTD5);
DigitalOut Gled3(PTD0);
DigitalOut Gled4(PTD2);
DigitalOut Gled5(PTD3);
DigitalOut Gled6(PTD1);
DigitalOut Gled7(PTE31);
DigitalOut Gled8(PTB0);

DigitalOut Bled1(PTC1);
DigitalOut Bled2(PTE29);
DigitalOut Bled3(PTC2);
DigitalOut Bled4(PTB3);
DigitalOut Bled5(PTB2);
DigitalOut Bled6(PTE21);
DigitalOut Bled7(PTE20);
DigitalOut Bled8(PTB1);

 
int main()
{      
    while(1)
    { 
    accelerometer();
    zobrazeni();
    pohyb();
    }
}
        
void pohyb()
{
    switch(acc_dir)
    {
    case 'D': //pohyb smerem dolu
        if(p==0)
        {
        pole[0][0]*=(-1);
        p=1;
        }
        break;
    case 'R': // pohyb smerem doprava
        if(p==0)
        {
        pole[3][0]*=(-1);
        p=1;
        }
        break;
    case 'U': // pohyb smerem nahoru
        if(p==0)
        {
        pole[0][3]*=(-1);
        p=1;
        }
        break;
    case 'L': // pohyb smerem doleva
        if(p==0)
        {
        pole[3][3]*=(-1);
        p=1;
        }
        break;
    case '0': // detekovana nulova pozice
        p=0;
        break;
    default:
        break; 
        
    }
}


void zobrazeni()
{
    for(k=0;k<4;k++)
    {  
        prvni=0;
        druhy=0;
        treti=0;
        ctvrty=0;
        paty=0;
        sesty=0;
        sedmy=0;
        osmy=0;
        
        if(k==0)
        {
        prvni=1;
        druhy=1;
        }
    
        if(k==1)
        {
        treti=1;
        ctvrty=1;
        }
    
        if(k==2)
        {
        paty=1;
        sesty=1;
        }
    
        if(k==3)
        {
        sedmy=1;
        osmy=1;
        }
    
        for(j=0;j<4;j++)
        { 
        
        barva(j,k);
                
            for(i=11;i>0;i--)
            {
                if(RED>0)
                {
                RledA=1;
                RledB=1;
                }
                else
                {
                RledA=0;
                RledB=0;
                }
            
                if(GREEN>0)
                {
                GledA=1;
                GledB=1;
                }
                else
                {
                GledA=0;
                GledB=0;
                }
                    
                if(BLUE>0)
                {
                BledA=1;
                BledB=1;
                }
                else
                {
                BledA=0;
                BledB=0;
                }
        
                if(j==0)
                {
                Rled1=RledA;
                Rled2=RledB;
                Gled1=GledA;
                Gled2=GledB;
                Bled1=BledA;
                Bled2=BledB;
                }
                
                if(j==1)
                {
                Rled3=RledA;
                Rled4=RledB;
                Gled3=GledA;
                Gled4=GledB;
                Bled3=BledA;
                Bled4=BledB;
                }
                
                if(j==2)
                {
                Rled5=RledA;
                Rled6=RledB;
                Gled5=GledA;
                Gled6=GledB;
                Bled5=BledA;
                Bled6=BledB;
                }
                
                if(j==3)
                {
                Rled7=RledA;
                Rled8=RledB;
                Gled7=GledA;
                Gled8=GledB;
                Bled7=BledA;
                Bled8=BledB;
                } 
            
                wait(0.00001);
                RED--;
                BLUE--;
                GREEN--;
            }    
        }
    }  
} 

void barva(int j , int k)
{
    RED=pole[j][k];
    GREEN=pole[j][k];
    BLUE=pole[j][k];
}


void accelerometer()
{
        float ax, ay, az;

        ax = acc.getAccX();
        ay = acc.getAccY();
        az = acc.getAccZ();
        
        xAngle = atan( ax / (sqrt((ay)*(ay) + (az)*(az)))) * 60;
        yAngle = atan( ay / (sqrt((ax)*(ax) + (az)*(az)))) * 60;
        
        
        if((abs(xAngle)+abs(yAngle))<15)
        {
             acc_dir = '0';   // nula
        }
        
         
        if(abs(xAngle) >= abs(yAngle))
        {
            if(xAngle >= MOVE_ANGLE)
            {                 
                 acc_dir = 'U';   // +X 
            }
           
            if(xAngle <= -MOVE_ANGLE)
            {
                 acc_dir = 'D';    // -X  
            }   
        }
        
        else
        {      
            if(yAngle >= MOVE_ANGLE)
            {
                 acc_dir = 'L';   // +Y 
            }
    
            if(yAngle <= -MOVE_ANGLE)
            {
                 acc_dir = 'R';   // -Y  
            }   
        }        
    
}