Updated OCE 360 Assignment 4
Dependencies: 4DGL-uLCD-SE MMA8452Q mbed physics_ball
main.cpp@0:2067ba6c5e74, 2017-10-31 (annotated)
- Committer:
- Kaitlyn_Barros
- Date:
- Tue Oct 31 14:51:28 2017 +0000
- Revision:
- 0:2067ba6c5e74
- Child:
- 2:8085bd89612b
Updated OCE 360 Assignment 4
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Kaitlyn_Barros | 0:2067ba6c5e74 | 1 | //Kaitlyn Barros |
Kaitlyn_Barros | 0:2067ba6c5e74 | 2 | //OCE 360 Fall 2017 |
Kaitlyn_Barros | 0:2067ba6c5e74 | 3 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 4 | //Last Revised: Oct 30 2017 |
Kaitlyn_Barros | 0:2067ba6c5e74 | 5 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 6 | //Software Exercise: |
Kaitlyn_Barros | 0:2067ba6c5e74 | 7 | //1. Update the software system by creating a new library, which includes |
Kaitlyn_Barros | 0:2067ba6c5e74 | 8 | // a class that defines the behavior of a bouncing ball on the LCD screen. |
Kaitlyn_Barros | 0:2067ba6c5e74 | 9 | //2. Demonstrate the system with two or more bouncing balls on the screen. |
Kaitlyn_Barros | 0:2067ba6c5e74 | 10 | //3. Show that the system resets the ball locations when you hold the |
Kaitlyn_Barros | 0:2067ba6c5e74 | 11 | // accelerometer upside down. |
Kaitlyn_Barros | 0:2067ba6c5e74 | 12 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 13 | #include "mbed.h" |
Kaitlyn_Barros | 0:2067ba6c5e74 | 14 | #include "physics_ball.h" |
Kaitlyn_Barros | 0:2067ba6c5e74 | 15 | #include "uLCD_4DGL.h" |
Kaitlyn_Barros | 0:2067ba6c5e74 | 16 | #include "MMA8452Q.h" |
Kaitlyn_Barros | 0:2067ba6c5e74 | 17 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 18 | #define DEFAULT 64 |
Kaitlyn_Barros | 0:2067ba6c5e74 | 19 | #define STEP 0.1 |
Kaitlyn_Barros | 0:2067ba6c5e74 | 20 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 21 | // Graphic LCD - TX, RX, and RES pins |
Kaitlyn_Barros | 0:2067ba6c5e74 | 22 | uLCD_4DGL uLCD(p9,p10,p11); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 23 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 24 | // Accelerometer - SDA, SCL, and I2C address |
Kaitlyn_Barros | 0:2067ba6c5e74 | 25 | MMA8452Q accel(p28, p27, 0x1D); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 26 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 27 | int main() { |
Kaitlyn_Barros | 0:2067ba6c5e74 | 28 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 29 | // Initialize uLCD |
Kaitlyn_Barros | 0:2067ba6c5e74 | 30 | uLCD.baudrate(115200); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 31 | uLCD.background_color(BLACK); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 32 | uLCD.cls(); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 33 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 34 | // Initialize accelerometer |
Kaitlyn_Barros | 0:2067ba6c5e74 | 35 | accel.init(); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 36 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 37 | // Call out classes (For Ball 1 & 2) |
Kaitlyn_Barros | 0:2067ba6c5e74 | 38 | physics_ball ball1; |
Kaitlyn_Barros | 0:2067ba6c5e74 | 39 | physics_ball ball2; |
Kaitlyn_Barros | 0:2067ba6c5e74 | 40 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 41 | //Intial Ball Conditions |
Kaitlyn_Barros | 0:2067ba6c5e74 | 42 | ball1.posx = DEFAULT; |
Kaitlyn_Barros | 0:2067ba6c5e74 | 43 | ball1.posy = DEFAULT; |
Kaitlyn_Barros | 0:2067ba6c5e74 | 44 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 45 | ball2.posx = DEFAULT /2; |
Kaitlyn_Barros | 0:2067ba6c5e74 | 46 | ball2.posy = DEFAULT /2; |
Kaitlyn_Barros | 0:2067ba6c5e74 | 47 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 48 | ball1.define_space(ball1.width, ball1.height); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 49 | ball2.define_space(ball2.width, ball2.height); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 50 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 51 | ball1.set_param(ball1.radius, BLUE); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 52 | ball2.set_param(ball2.radius, RED); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 53 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 54 | // Make a ball "fall" in direction of accelerometer |
Kaitlyn_Barros | 0:2067ba6c5e74 | 55 | while (1) { |
Kaitlyn_Barros | 0:2067ba6c5e74 | 56 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 57 | // Draw a circle (For Ball 1 & 2) |
Kaitlyn_Barros | 0:2067ba6c5e74 | 58 | uLCD.filled_circle(ball1.posx, ball1.posy, ball1.radius, BLUE); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 59 | uLCD.filled_circle(ball2.posx, ball2.posy, ball2.radius, RED); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 60 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 61 | // Wait before erasing old circle |
Kaitlyn_Barros | 0:2067ba6c5e74 | 62 | wait(0.02); // In seconds |
Kaitlyn_Barros | 0:2067ba6c5e74 | 63 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 64 | // Erase old circle (For Ball 1 & 2) |
Kaitlyn_Barros | 0:2067ba6c5e74 | 65 | uLCD.filled_circle(ball1.posx, ball1.posy, ball1.radius, BLACK); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 66 | uLCD.filled_circle(ball2.posx, ball2.posy, ball2.radius, BLACK); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 67 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 68 | //Update Postions |
Kaitlyn_Barros | 0:2067ba6c5e74 | 69 | ball1.update(STEP, accel); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 70 | ball2.update(STEP, accel); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 71 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 72 | // Reset when sensor is flipped upside down (For Ball 1 & 2) |
Kaitlyn_Barros | 0:2067ba6c5e74 | 73 | if (accel.readZ() < 0){ |
Kaitlyn_Barros | 0:2067ba6c5e74 | 74 | uLCD.locate(5,6); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 75 | uLCD.color(RED); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 76 | uLCD.printf("GAME RESET"); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 77 | wait(2); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 78 | uLCD.cls(); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 79 | |
Kaitlyn_Barros | 0:2067ba6c5e74 | 80 | ball1.set_state(DEFAULT, DEFAULT, 25, 25); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 81 | ball2.set_state(DEFAULT /2, DEFAULT /2, 25, 25); |
Kaitlyn_Barros | 0:2067ba6c5e74 | 82 | wait (1); //Wait 1 second |
Kaitlyn_Barros | 0:2067ba6c5e74 | 83 | } |
Kaitlyn_Barros | 0:2067ba6c5e74 | 84 | } |
Kaitlyn_Barros | 0:2067ba6c5e74 | 85 | } |