Updated OCE 360 Assignment 4

Dependencies:   4DGL-uLCD-SE MMA8452Q mbed physics_ball

Committer:
Kaitlyn_Barros
Date:
Thu Dec 07 23:20:55 2017 +0000
Revision:
4:241bf0f0e626
Parent:
2:8085bd89612b
Child:
5:5b888a1a3b98
Assignment 6

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 2:8085bd89612b 4 //Last Revised: Nov 16 2017
Kaitlyn_Barros 0:2067ba6c5e74 5
Kaitlyn_Barros 2:8085bd89612b 6 //Software Exercise 4:
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 2:8085bd89612b 13 //Software Exercise 5:
Kaitlyn_Barros 2:8085bd89612b 14 //1. Update the ball postion using the accelerometer's data at 50Hz. Update the LCD display w/ ball postions at 11HZ.
Kaitlyn_Barros 2:8085bd89612b 15 //2. Use a buttom interrupt to turn data recording on/off. Use an onboard LED to indicate recording.
Kaitlyn_Barros 2:8085bd89612b 16
Kaitlyn_Barros 2:8085bd89612b 17 #include "mbed.h" //Mbed Header
Kaitlyn_Barros 2:8085bd89612b 18 #include "physics_ball.h" // Physics Ball Behavior Header
Kaitlyn_Barros 2:8085bd89612b 19 #include "uLCD_4DGL.h" // LCD Header
Kaitlyn_Barros 2:8085bd89612b 20 #include "MMA8452Q.h" // Accelerometer Header
Kaitlyn_Barros 0:2067ba6c5e74 21
Kaitlyn_Barros 2:8085bd89612b 22 Serial pc(USBTX, USBRX); // USB Serial (tx, rx)
Kaitlyn_Barros 2:8085bd89612b 23
Kaitlyn_Barros 2:8085bd89612b 24 DigitalOut led1(LED1); //Onboard LED 1
Kaitlyn_Barros 2:8085bd89612b 25 DigitalOut led2(LED2); //Onboard LED 2
Kaitlyn_Barros 0:2067ba6c5e74 26
Kaitlyn_Barros 2:8085bd89612b 27
Kaitlyn_Barros 4:241bf0f0e626 28 DigitalIn switchinput(p18); //Digital switch set in Pin 18
Kaitlyn_Barros 4:241bf0f0e626 29 DigitalIn AccelInter(p17); //Digital switch caused by accelerometer INT1 pin
Kaitlyn_Barros 2:8085bd89612b 30
Kaitlyn_Barros 2:8085bd89612b 31 // Call out classes (For Ball 1 & 2)
Kaitlyn_Barros 2:8085bd89612b 32 physics_ball ball1;
Kaitlyn_Barros 2:8085bd89612b 33 physics_ball ball2;
Kaitlyn_Barros 2:8085bd89612b 34
Kaitlyn_Barros 0:2067ba6c5e74 35 // Graphic LCD - TX, RX, and RES pins
Kaitlyn_Barros 0:2067ba6c5e74 36 uLCD_4DGL uLCD(p9,p10,p11);
Kaitlyn_Barros 0:2067ba6c5e74 37
Kaitlyn_Barros 0:2067ba6c5e74 38 // Accelerometer - SDA, SCL, and I2C address
Kaitlyn_Barros 0:2067ba6c5e74 39 MMA8452Q accel(p28, p27, 0x1D);
Kaitlyn_Barros 0:2067ba6c5e74 40
Kaitlyn_Barros 2:8085bd89612b 41 // Call out Tickers
Kaitlyn_Barros 2:8085bd89612b 42 Ticker BallUpdate;
Kaitlyn_Barros 2:8085bd89612b 43 Ticker LCDUpdate;
Kaitlyn_Barros 2:8085bd89612b 44
Kaitlyn_Barros 2:8085bd89612b 45 //Ticker Function 1: Ball_Update_Pos
Kaitlyn_Barros 2:8085bd89612b 46 void BUP(){
Kaitlyn_Barros 2:8085bd89612b 47 //Update Ball Postion
Kaitlyn_Barros 2:8085bd89612b 48 ball1.update(accel);
Kaitlyn_Barros 2:8085bd89612b 49 ball2.update(accel);
Kaitlyn_Barros 2:8085bd89612b 50 }
Kaitlyn_Barros 2:8085bd89612b 51
Kaitlyn_Barros 2:8085bd89612b 52 //Ticker Function 2: LCD_Update_Pos
Kaitlyn_Barros 2:8085bd89612b 53 void LCDUP(){
Kaitlyn_Barros 4:241bf0f0e626 54 if (switchinput == 0 || AccelInter == 1){
Kaitlyn_Barros 2:8085bd89612b 55 // Draw new circle
Kaitlyn_Barros 2:8085bd89612b 56 uLCD.filled_circle(ball1.posx, ball1.posy, ball1.radius, BLUE);
Kaitlyn_Barros 2:8085bd89612b 57 uLCD.filled_circle(ball2.posx, ball2.posy, ball2.radius, RED);
Kaitlyn_Barros 2:8085bd89612b 58 led1 = 1;
Kaitlyn_Barros 2:8085bd89612b 59 // Erase old circle (For Ball 1 & 2)
Kaitlyn_Barros 2:8085bd89612b 60 uLCD.filled_circle(ball1.old_posx, ball1.old_posy, ball1.radius, BLACK);
Kaitlyn_Barros 2:8085bd89612b 61 uLCD.filled_circle(ball2.old_posx, ball2.old_posy, ball2.radius, BLACK);
Kaitlyn_Barros 2:8085bd89612b 62 led1= 0;
Kaitlyn_Barros 2:8085bd89612b 63 }
Kaitlyn_Barros 4:241bf0f0e626 64 else if (switchinput ==1 || AccelInter == 0){
Kaitlyn_Barros 4:241bf0f0e626 65 // Draw new circle
Kaitlyn_Barros 4:241bf0f0e626 66 uLCD.filled_circle(ball1.posx, ball1.posy, ball1.radius, BLUE);
Kaitlyn_Barros 4:241bf0f0e626 67 uLCD.filled_circle(ball2.posx, ball2.posy, ball2.radius, RED);
Kaitlyn_Barros 4:241bf0f0e626 68 led1 = 1;
Kaitlyn_Barros 4:241bf0f0e626 69 wait(2);
Kaitlyn_Barros 4:241bf0f0e626 70 // Erase old circle (For Ball 1 & 2)
Kaitlyn_Barros 4:241bf0f0e626 71 uLCD.filled_circle(ball1.old_posx, ball1.old_posy, ball1.radius, BLACK);
Kaitlyn_Barros 4:241bf0f0e626 72 uLCD.filled_circle(ball2.old_posx, ball2.old_posy, ball2.radius, BLACK);
Kaitlyn_Barros 4:241bf0f0e626 73 led1= 0;
Kaitlyn_Barros 2:8085bd89612b 74 }
Kaitlyn_Barros 2:8085bd89612b 75 }
Kaitlyn_Barros 2:8085bd89612b 76
Kaitlyn_Barros 0:2067ba6c5e74 77 int main() {
Kaitlyn_Barros 0:2067ba6c5e74 78 // Initialize uLCD
Kaitlyn_Barros 0:2067ba6c5e74 79 uLCD.baudrate(115200);
Kaitlyn_Barros 0:2067ba6c5e74 80 uLCD.background_color(BLACK);
Kaitlyn_Barros 0:2067ba6c5e74 81 uLCD.cls();
Kaitlyn_Barros 0:2067ba6c5e74 82
Kaitlyn_Barros 0:2067ba6c5e74 83 // Initialize accelerometer
Kaitlyn_Barros 0:2067ba6c5e74 84 accel.init();
Kaitlyn_Barros 2:8085bd89612b 85
Kaitlyn_Barros 4:241bf0f0e626 86 //Intial Ball Conditions & Reset Conditiosn
Kaitlyn_Barros 0:2067ba6c5e74 87 ball1.define_space(ball1.width, ball1.height);
Kaitlyn_Barros 0:2067ba6c5e74 88 ball2.define_space(ball2.width, ball2.height);
Kaitlyn_Barros 0:2067ba6c5e74 89
Kaitlyn_Barros 0:2067ba6c5e74 90 ball1.set_param(ball1.radius, BLUE);
Kaitlyn_Barros 2:8085bd89612b 91 ball2.set_param(ball2.radius, RED);
Kaitlyn_Barros 0:2067ba6c5e74 92
Kaitlyn_Barros 2:8085bd89612b 93 //Tickers
Kaitlyn_Barros 2:8085bd89612b 94 BallUpdate.attach(&BUP, 0.02); //50 Hz
Kaitlyn_Barros 4:241bf0f0e626 95 LCDUpdate.attach(&LCDUP, 0.09);//11 Hz
Kaitlyn_Barros 4:241bf0f0e626 96
Kaitlyn_Barros 4:241bf0f0e626 97 while (1) { }
Kaitlyn_Barros 4:241bf0f0e626 98 }