Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE MMA8452Q_1 SDFileSystem bouncing_ball mbed
Revision 0:cd0b1641b303, committed 2017-12-07
- Comitter:
- rsean10
- Date:
- Thu Dec 07 15:31:17 2017 +0000
- Commit message:
- Full Working Version of OCE360 HW6
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/4DGL-uLCD-SE.lib Thu Dec 07 15:31:17 2017 +0000 @@ -0,0 +1,1 @@ +http://os.mbed.com/users/sparkfun/code/4DGL-uLCD-SE/#e39a44de229a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MMA8452Q.lib Thu Dec 07 15:31:17 2017 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/rsean10/code/MMA8452Q_1/#a63e41016132
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDFileSystem.lib Thu Dec 07 15:31:17 2017 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/rsean10/code/SDFileSystem/#5208d569cd5b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bouncing_ball.lib Thu Dec 07 15:31:17 2017 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/rsean10/code/bouncing_ball/#1e5cd98fc2aa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Dec 07 15:31:17 2017 +0000
@@ -0,0 +1,222 @@
+/*
+R. Sean Nagle
+0CE306 HW6
+*/
+
+#include "mbed.h"
+#include "MMA8452Q.h" //acceleromater library
+#include "uLCD_4DGL.h" //LCD library
+#include "bouncing_ball.h" //new ball phyics library
+#include "SDFileSystem.h"
+
+#define UPDATE_TIME_S 0.02
+#define START_X_1 10
+#define START_Y_1 10
+#define START_X_2 20
+#define START_Y_2 20
+#define RADIUS_1 6
+#define RADIUS_2 3
+
+#define DEBUG_MODE 0
+
+#define LCD_UPDATE .091 //11 Hz
+
+// Accelerometer - SDA, SCL, and I2C address
+MMA8452Q accel(p28, p27, 0x1D); //initialize a driver object for an accelerometer connected on pins 27-28.
+
+// Analog input (pin 15)
+AnalogIn tempin(p15);
+
+//Initialize Serial communication
+Serial pc(USBTX, USBRX);
+
+// SD card (SPI pins)
+SDFileSystem sd(p5, p6, p7, p8, "sd");
+
+//Drawing positions
+int lastx1;
+int lasty1;
+int lastx2;
+int lasty2;
+
+//Led Initialization
+DigitalOut led1(LED1); //update leds
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+
+//Function prototype for color selection function:
+int get_LCD_color(int color_integer);
+
+// Graphic LCD - TX, RX, and RES pins
+uLCD_4DGL uLCD(p9,p10,p11); //initialize a driver object for an LCD connected on pins 9-11
+
+physics_ball ball1; //initialize two balls for bouncing
+physics_ball ball2; //the default states from the library will be used initially
+
+//Ticker for update
+Ticker update1; //ball 1 ticker for update position
+Ticker update2; //ball 2 ticker for update position
+
+//Toggle Initialization
+InterruptIn button(p18); //Interrupt on the button on pin 13
+Timer debounce; //defines debounce timer for proper switching
+Timer logtimer;
+int updtog = 0;
+
+void toggle(){
+ if(debounce.read_ms()>175){
+ led3= !led3;
+ debounce.reset(); //restart timer after toggle occurs
+ logtimer.start();
+ if(logtimer.read()<2){
+ updtog = 1;
+ }
+ }
+ }
+/*
+int v1x;
+int v1y;
+int v2x;
+int v2y;
+*/
+
+void ball1up(){
+ if (updtog == 0){
+ ball1.update(UPDATE_TIME_S,accel); //updates position
+ /*
+ v1x = (int)ball1.speedx;
+ v1y = (int)ball1.speedy;
+ */
+ }
+ else {
+ ball1.set_state(ball1.posx,ball1.posy,0,0); //speeds are set to zero
+ //pc.printf("%i %i\r\n",v1x,v1y);
+ if(logtimer.read()>2){
+ //ball1.set_state(ball1.posx,ball1.posy,v1x,v1y);
+ logtimer.stop();
+ logtimer.reset();
+ updtog = 0;
+ }
+ }
+ led1 = !led1; //changes led state every update
+ }
+
+void ball2up(){
+ if (updtog == 0){
+ ball2.update(UPDATE_TIME_S,accel); //updates position
+ /*
+ v2x = (int)ball2.speedx;
+ v2y = (int)ball2.speedy;
+ */
+ }
+ else {
+ ball2.set_state(ball2.posx,ball2.posy,0,0); //speeds are set to zero
+ //pc.printf("%i %i\r\n",v2x,v2y);
+ if(logtimer.read()>2){
+ //ball2.set_state(ball2.posx,ball2.posy,v2x,v2y);
+ logtimer.stop();
+ logtimer.reset();
+ updtog = 0;
+ }
+ }
+ led2 = !led2; //changes led state every update
+ }
+
+//Freefall Interrupt
+InterruptIn FREEFALL(p17);
+DigitalIn tompetty(p17);
+
+//Ticker for display
+Ticker displayup; //ticker for displaying ball on lcd
+
+void display(){
+
+ // Erase old circles by writing over there locations using the screen color:
+ uLCD.filled_circle(lastx1, lasty1, ball1.radius, BLACK);
+ uLCD.filled_circle(lastx2, lasty2, ball2.radius, BLACK);
+
+ // Draw circles in the x and y positions stored by the ball objects:
+ uLCD.filled_circle(ball1.posx, ball1.posy, ball1.radius, get_LCD_color(ball1.color));
+ uLCD.filled_circle(ball2.posx, ball2.posy, ball2.radius, get_LCD_color(ball2.color));
+
+ //Sets previous ball position to be erased in next iteration
+ lastx1 = ball1.posx;
+ lasty1 = ball1.posy;
+ lastx2 = ball2.posx;
+ lasty2 = ball2.posy;
+ }
+
+int main(){
+
+ // Initialize uLCD
+ uLCD.baudrate(115200);
+ uLCD.background_color(BLACK);
+ uLCD.cls();
+
+ // Initialize accelerometer
+ accel.init();
+ // Initialize freefall
+ accel.freefall(0x04,0x03); //0x04 for pin 1, 0x00 for pin 2, threshold = (threshold)/0.063 = counts to set register to
+ // example, thresh <0.2g,
+
+ //Initialize balls:
+ ball1.set_state(START_X_1,START_Y_1,0,0); //speeds are set to zero
+ ball1.set_state(START_X_2,START_Y_2,0,0);
+
+ //Set ball radius and color:
+ ball1.set_param(RADIUS_1,0); //color is unimportant
+ ball2.set_param(RADIUS_2,1); //just making sure the colors are different
+
+ update1.attach(&ball1up,UPDATE_TIME_S); //ticker force position update ball 1
+ update2.attach(&ball2up,UPDATE_TIME_S); //ticker force position update ball 2
+
+ displayup.attach(&display,LCD_UPDATE); //ticker force lcd update
+
+ debounce.start(); //starts debounce timer
+ button.rise(&toggle); //toggles on button press
+ //FREEFALL.rise(&toggle); //interrupts on free fall
+ FREEFALL.fall(&toggle); //interrupts on free fall
+
+ while (1) { //execute 'forever'
+
+ uint8_t sixteen = accel.readRegister(0x16);
+ sixteen &= 0x80;
+ //pc.printf("%u\n\r",sixteen);
+
+
+ if (tompetty == 0){
+ pc.printf("LOW %u\n\r",sixteen);
+ }
+ else {
+ pc.printf("HIGH %u\n\r",sixteen);
+ }
+
+
+ if (DEBUG_MODE) {
+ //If compiled with DEBUG_MODE flag raised, print values to screen.
+ uLCD.locate(0,4);
+ uLCD.printf("X: %d.1\nY: %.1d",ball1.posx,ball1.posy);
+
+ uLCD.locate(0,6);
+ uLCD.printf("VX: %f.1\nVY: %.1f",ball1.speedx,ball1.speedy);
+
+ uLCD.locate(0,10);
+ uLCD.printf("AX: %f.1\nAY: %.1f\nAZ: %0.1f",accel.readX(),accel.readY(),accel.readZ());
+ }
+ }
+}
+
+//Interpret LCD colors.
+int get_LCD_color(int color_integer)
+{
+ switch (color_integer) {
+ case 0:
+ return(RED);
+ case 1:
+ return(BLUE);
+ case 2:
+ return(GREEN);
+ default:
+ return(WHITE);
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Dec 07 15:31:17 2017 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/mbed_official/code/mbed/builds/a330f0fddbec \ No newline at end of file
