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