Updated OCE 360 Assignment 4
Dependencies: 4DGL-uLCD-SE MMA8452Q mbed physics_ball
main.cpp@4:241bf0f0e626, 2017-12-07 (annotated)
- 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?
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 | 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 | } |