Vizic Technologies
/
BounceBalls_SG2
Bouncing Balls - MBED + SmartGPU2 board
main.cpp@2:a9c11a9f04e2, 2014-04-17 (annotated)
- Committer:
- emmanuelchio
- Date:
- Thu Apr 17 21:37:21 2014 +0000
- Revision:
- 2:a9c11a9f04e2
- Parent:
- 1:a6f748930179
SmartGPU2 BounceBalls_SG2 demo- Please select(uncomment) your smartGPU2 board under SMARTGPU2.h file before compiling!!!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emmanuelchio | 0:34f2953983ab | 1 | /**************************************************************************************/ |
emmanuelchio | 0:34f2953983ab | 2 | /*SMARTGPU2 intelligent embedded graphics processor unit |
emmanuelchio | 2:a9c11a9f04e2 | 3 | those examples are for using the SMARTGPU2 with the mbed microcontoller, just connect tx,rx,and reset |
emmanuelchio | 0:34f2953983ab | 4 | Board: |
emmanuelchio | 1:a6f748930179 | 5 | http://www.vizictechnologies.com/#!smartgpu-2/c1rc2 |
emmanuelchio | 0:34f2953983ab | 6 | |
emmanuelchio | 0:34f2953983ab | 7 | www.vizictechnologies.com |
emmanuelchio | 1:a6f748930179 | 8 | Vizic Technologies copyright 2014 */ |
emmanuelchio | 0:34f2953983ab | 9 | /**************************************************************************************/ |
emmanuelchio | 0:34f2953983ab | 10 | /**************************************************************************************/ |
emmanuelchio | 0:34f2953983ab | 11 | |
emmanuelchio | 0:34f2953983ab | 12 | #include "mbed.h" |
emmanuelchio | 0:34f2953983ab | 13 | #include "SMARTGPU2.h" |
emmanuelchio | 0:34f2953983ab | 14 | |
emmanuelchio | 0:34f2953983ab | 15 | // defines for balls |
emmanuelchio | 0:34f2953983ab | 16 | #define RADIUSBALL1 15 //ball1 size |
emmanuelchio | 0:34f2953983ab | 17 | #define COLOURBALL1 GREEN //ball1 colour |
emmanuelchio | 0:34f2953983ab | 18 | #define RADIUSBALL2 8 //ball2 size |
emmanuelchio | 0:34f2953983ab | 19 | #define COLOURBALL2 YELLOW //ball2 colour |
emmanuelchio | 0:34f2953983ab | 20 | #define RADIUSBALL3 11 //ball3 size |
emmanuelchio | 0:34f2953983ab | 21 | #define COLOURBALL3 RED //ball3 colour |
emmanuelchio | 0:34f2953983ab | 22 | #define RADIUSBALL4 18 //ball4 size |
emmanuelchio | 0:34f2953983ab | 23 | #define COLOURBALL4 BLUE //ball4 colour |
emmanuelchio | 0:34f2953983ab | 24 | |
emmanuelchio | 0:34f2953983ab | 25 | //variables used by move ball methods |
emmanuelchio | 0:34f2953983ab | 26 | int speedBall1=3; //ball1 moving speed - amount of pixels that ball move each time |
emmanuelchio | 0:34f2953983ab | 27 | int speedBall2=4; //ball2 moving speed - amount of pixels that ball move each time |
emmanuelchio | 0:34f2953983ab | 28 | int speedBall3=8; //ball3 moving speed - amount of pixels that ball move each time |
emmanuelchio | 0:34f2953983ab | 29 | int speedBall4=6; //ball4 moving speed - amount of pixels that ball move each time |
emmanuelchio | 0:34f2953983ab | 30 | int dirx1=1; //xball1 initial positive direction |
emmanuelchio | 0:34f2953983ab | 31 | int diry1=1; //yball1 initial positive direction |
emmanuelchio | 0:34f2953983ab | 32 | int xBall1=300; //x initial position of ball1 |
emmanuelchio | 0:34f2953983ab | 33 | int yBall1=100; //y initial position of ball1 |
emmanuelchio | 0:34f2953983ab | 34 | int dirx2=-1; //xball2 initial negative direction |
emmanuelchio | 0:34f2953983ab | 35 | int diry2=-1; //yball2 initial negative direction |
emmanuelchio | 0:34f2953983ab | 36 | int xBall2=30; //x initial position of ball2 |
emmanuelchio | 0:34f2953983ab | 37 | int yBall2=80; //y initial position of ball2 |
emmanuelchio | 0:34f2953983ab | 38 | int dirx3=-1; //xball3 initial negative direction |
emmanuelchio | 0:34f2953983ab | 39 | int diry3=1; //yball3 initial negative direction |
emmanuelchio | 0:34f2953983ab | 40 | int xBall3=60; //x initial position of ball3 |
emmanuelchio | 0:34f2953983ab | 41 | int yBall3=15; //y initial position of ball3 |
emmanuelchio | 0:34f2953983ab | 42 | int dirx4=1; //xball4 initial negative direction |
emmanuelchio | 0:34f2953983ab | 43 | int diry4=-1; //yball4 initial negative direction |
emmanuelchio | 0:34f2953983ab | 44 | int xBall4=150; //x initial position of ball4 |
emmanuelchio | 0:34f2953983ab | 45 | int yBall4=80; //y initial position of ball4 |
emmanuelchio | 0:34f2953983ab | 46 | |
emmanuelchio | 0:34f2953983ab | 47 | SMARTGPU2 lcd(TXPIN,RXPIN,RESETPIN); //create our object called "lcd" |
emmanuelchio | 0:34f2953983ab | 48 | |
emmanuelchio | 0:34f2953983ab | 49 | /***************************************************/ |
emmanuelchio | 0:34f2953983ab | 50 | //Function that updates the current position of the ball1 |
emmanuelchio | 0:34f2953983ab | 51 | void moveBall1(){ |
emmanuelchio | 0:34f2953983ab | 52 | lcd.drawCircle(xBall1,yBall1,RADIUSBALL1,BLACK,UNFILL); // Erase previous ball position |
emmanuelchio | 0:34f2953983ab | 53 | xBall1+=(dirx1*speedBall1); // Calculate new x coordinate for ball1 |
emmanuelchio | 0:34f2953983ab | 54 | yBall1+=(diry1*speedBall1); // Calculate new y coordinate for ball1 |
emmanuelchio | 0:34f2953983ab | 55 | lcd.drawCircle(xBall1,yBall1,RADIUSBALL1,COLOURBALL1,UNFILL); // Draw new ball position |
emmanuelchio | 0:34f2953983ab | 56 | if((xBall1+speedBall1+RADIUSBALL1)>318 | (xBall1-speedBall1-RADIUSBALL1)<=1){ // if ball reaches the left or right corner, we invert moving direction |
emmanuelchio | 0:34f2953983ab | 57 | dirx1= dirx1*(-1); // Invert the moving direction by multiplying by -1 |
emmanuelchio | 0:34f2953983ab | 58 | } |
emmanuelchio | 0:34f2953983ab | 59 | if((yBall1+speedBall1+RADIUSBALL1)>238 | (yBall1-speedBall1-RADIUSBALL1)<=1){ // if ball reaches the top or bottom corner, we invert moving direction |
emmanuelchio | 0:34f2953983ab | 60 | diry1= diry1*(-1); // Invert the moving direction by multiplying by -1 |
emmanuelchio | 0:34f2953983ab | 61 | } |
emmanuelchio | 0:34f2953983ab | 62 | } |
emmanuelchio | 0:34f2953983ab | 63 | |
emmanuelchio | 0:34f2953983ab | 64 | /***************************************************/ |
emmanuelchio | 0:34f2953983ab | 65 | //Function that updates the current position of the ball2 |
emmanuelchio | 0:34f2953983ab | 66 | void moveBall2(){ |
emmanuelchio | 0:34f2953983ab | 67 | lcd.drawCircle(xBall2,yBall2,RADIUSBALL2,BLACK,FILL); // Erase previous ball position |
emmanuelchio | 0:34f2953983ab | 68 | xBall2+=(dirx2*speedBall2); // Calculate new x coordinate for ball2 |
emmanuelchio | 0:34f2953983ab | 69 | yBall2+=(diry2*speedBall2); // Calculate new y coordinate for ball2 |
emmanuelchio | 0:34f2953983ab | 70 | lcd.drawCircle(xBall2,yBall2,RADIUSBALL2,COLOURBALL2,FILL); // Draw new ball position |
emmanuelchio | 0:34f2953983ab | 71 | if((xBall2+speedBall2+RADIUSBALL2)>318 | (xBall2-speedBall2-RADIUSBALL2)<=1){ // if ball reaches the left or right corner, we invert moving direction |
emmanuelchio | 0:34f2953983ab | 72 | dirx2= dirx2*(-1); // Invert the moving direction by multiplying by -1 |
emmanuelchio | 0:34f2953983ab | 73 | } |
emmanuelchio | 0:34f2953983ab | 74 | if((yBall2+speedBall2+RADIUSBALL2)>238 | (yBall2-speedBall2-RADIUSBALL2)<=1){ // if ball reaches the top or bottom corner, we invert moving direction |
emmanuelchio | 0:34f2953983ab | 75 | diry2= diry2*(-1); // Invert the moving direction by multiplying by -1 |
emmanuelchio | 0:34f2953983ab | 76 | } |
emmanuelchio | 0:34f2953983ab | 77 | } |
emmanuelchio | 0:34f2953983ab | 78 | |
emmanuelchio | 0:34f2953983ab | 79 | /***************************************************/ |
emmanuelchio | 0:34f2953983ab | 80 | //Function that updates the current position of the ball3 |
emmanuelchio | 0:34f2953983ab | 81 | void moveBall3(){ |
emmanuelchio | 0:34f2953983ab | 82 | lcd.drawCircle(xBall3,yBall3,RADIUSBALL3,BLACK,FILL); // Erase previous ball position |
emmanuelchio | 0:34f2953983ab | 83 | xBall3+=(dirx3*speedBall3); // Calculate new x coordinate for ball3 |
emmanuelchio | 0:34f2953983ab | 84 | yBall3+=(diry3*speedBall3); // Calculate new y coordinate for ball3 |
emmanuelchio | 0:34f2953983ab | 85 | lcd.drawCircle(xBall3,yBall3,RADIUSBALL3,COLOURBALL3,FILL); // Draw new ball position |
emmanuelchio | 0:34f2953983ab | 86 | if((xBall3+speedBall3+RADIUSBALL3)>318 | (xBall3-speedBall3-RADIUSBALL3)<=1){ // if ball reaches the left or right corner, we invert moving direction |
emmanuelchio | 0:34f2953983ab | 87 | dirx3= dirx3*(-1); // Invert the moving direction by multiplying by -1 |
emmanuelchio | 0:34f2953983ab | 88 | } |
emmanuelchio | 0:34f2953983ab | 89 | if((yBall3+speedBall3+RADIUSBALL3)>238 | (yBall3-speedBall3-RADIUSBALL3)<=1){ // if ball reaches the top or bottom corner, we invert moving direction |
emmanuelchio | 0:34f2953983ab | 90 | diry3= diry3*(-1); // Invert the moving direction by multiplying by -1 |
emmanuelchio | 0:34f2953983ab | 91 | } |
emmanuelchio | 0:34f2953983ab | 92 | } |
emmanuelchio | 0:34f2953983ab | 93 | |
emmanuelchio | 0:34f2953983ab | 94 | /***************************************************/ |
emmanuelchio | 0:34f2953983ab | 95 | //Function that updates the current position of the ball4 |
emmanuelchio | 0:34f2953983ab | 96 | void moveBall4(){ |
emmanuelchio | 0:34f2953983ab | 97 | lcd.drawCircle(xBall4,yBall4,RADIUSBALL4,BLACK,UNFILL); // Erase previous ball position |
emmanuelchio | 0:34f2953983ab | 98 | xBall4+=(dirx4*speedBall4); // Calculate new x coordinate for ball4 |
emmanuelchio | 0:34f2953983ab | 99 | yBall4+=(diry4*speedBall4); // Calculate new y coordinate for ball4 |
emmanuelchio | 0:34f2953983ab | 100 | lcd.drawCircle(xBall4,yBall4,RADIUSBALL4,COLOURBALL4,UNFILL); // Draw new ball position |
emmanuelchio | 0:34f2953983ab | 101 | if((xBall4+speedBall4+RADIUSBALL4)>318 | (xBall4-speedBall4-RADIUSBALL4)<=1){ // if ball reaches the left or right corner, we invert moving direction |
emmanuelchio | 0:34f2953983ab | 102 | dirx4= dirx4*(-1); // Invert the moving direction by multiplying by -1 |
emmanuelchio | 0:34f2953983ab | 103 | } |
emmanuelchio | 0:34f2953983ab | 104 | if((yBall4+speedBall4+RADIUSBALL4)>238 | (yBall4-speedBall4-RADIUSBALL4)<=1){ // if ball reaches the top or bottom corner, we invert moving direction |
emmanuelchio | 0:34f2953983ab | 105 | diry4= diry4*(-1); // Invert the moving direction by multiplying by -1 |
emmanuelchio | 0:34f2953983ab | 106 | } |
emmanuelchio | 0:34f2953983ab | 107 | } |
emmanuelchio | 0:34f2953983ab | 108 | |
emmanuelchio | 0:34f2953983ab | 109 | /***************************************************/ |
emmanuelchio | 0:34f2953983ab | 110 | /***************************************************/ |
emmanuelchio | 0:34f2953983ab | 111 | void initializeSmartGPU2(void){ //Initialize SMARTGPU2 Board |
emmanuelchio | 0:34f2953983ab | 112 | lcd.reset(); //physically reset SMARTGPU2 |
emmanuelchio | 0:34f2953983ab | 113 | lcd.start(); //initialize the SMARTGPU2 processor |
emmanuelchio | 0:34f2953983ab | 114 | } |
emmanuelchio | 0:34f2953983ab | 115 | |
emmanuelchio | 0:34f2953983ab | 116 | /***************************************************/ |
emmanuelchio | 0:34f2953983ab | 117 | /***************************************************/ |
emmanuelchio | 0:34f2953983ab | 118 | /***************************************************/ |
emmanuelchio | 0:34f2953983ab | 119 | /***************************************************/ |
emmanuelchio | 0:34f2953983ab | 120 | int main() { |
emmanuelchio | 0:34f2953983ab | 121 | |
emmanuelchio | 0:34f2953983ab | 122 | initializeSmartGPU2(); //Init communication with SmartGPU2 board |
emmanuelchio | 0:34f2953983ab | 123 | |
emmanuelchio | 1:a6f748930179 | 124 | lcd.baudChange(BAUD6); //set a fast baud! for fast drawing |
emmanuelchio | 0:34f2953983ab | 125 | lcd.drawRectangle(0,0,319,239,MAGENTA,UNFILL); //draw corners |
emmanuelchio | 0:34f2953983ab | 126 | |
emmanuelchio | 0:34f2953983ab | 127 | while(1){ // Loop forever |
emmanuelchio | 0:34f2953983ab | 128 | moveBall1(); // move ball1 |
emmanuelchio | 0:34f2953983ab | 129 | moveBall2(); // move ball2 |
emmanuelchio | 0:34f2953983ab | 130 | moveBall3(); // move ball3 |
emmanuelchio | 0:34f2953983ab | 131 | moveBall4(); // move ball4 |
emmanuelchio | 0:34f2953983ab | 132 | wait_ms(15); // wait a little |
emmanuelchio | 0:34f2953983ab | 133 | } |
emmanuelchio | 0:34f2953983ab | 134 | } |