Updated OCE 360 Assignment 4

Dependencies:   4DGL-uLCD-SE MMA8452Q mbed physics_ball

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?

UserRevisionLine numberNew 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 }