Václav Lízner
/
2048
school project
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 } } }