IDD Fall 2015
/
idd_hw3_bryanthov_yinglongli_megabuster
Code for HW3 - Game Controller Mega Buster that interfaces with flash based Megaman - Megaman Project X
Revision 0:73fee9cd0094, committed 2015-09-21
- Comitter:
- bthov
- Date:
- Mon Sep 21 09:11:20 2015 +0000
- Commit message:
- Game Controller;
Changed in this revision
diff -r 000000000000 -r 73fee9cd0094 MMA8451Q.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MMA8451Q.lib Mon Sep 21 09:11:20 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/emilmont/code/MMA8451Q/#c4d879a39775
diff -r 000000000000 -r 73fee9cd0094 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Sep 21 09:11:20 2015 +0000 @@ -0,0 +1,124 @@ +// Bryan Thov and Yinglong Li +// HW 3 - Game Controller +// IDD Fall '15 + +#include "mbed.h" +#include "MMA8451Q.h" + +// Signals Sent +// s = Button Press = shoot +// j = Arm Raised = jump +// d = Arm Down = dash +// l = Arm turn left = left +// r = Arm turn right = right +// x = Null -> Not Active + +// I2C +PinName const SDA = PTE25; +PinName const SCL = PTE24; +#define MMA8451_I2C_ADDRESS (0x1d<<1) + +// LED +DigitalOut myled(LED_GREEN); +DigitalOut myled1(LED_RED); +DigitalOut myled2(LED_BLUE); + +// Serial +Serial pc(USBTX, USBRX); + +// Game Inputs +DigitalIn button(D9); + +// Initialize Instruction String +// _ _ _ _ _ \0 = j d l r s \0 +// If the instruction is not there, will be x, which is "Null" +// \0 = Terminiating String +char instr[7] = {'x', 'x', 'x', 'x', 'x' ,'a', '\0'}; + +int main() { + // Set up accelerometer + MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); + float x, y, z; + + // Turn off LEDs + myled = !myled; + myled1 = !myled1; + myled2 = !myled2; + + while(1) { + // Get accelerometer values + float x, y, z; + x = acc.getAccX(); + y = acc.getAccY(); + z = acc.getAccZ(); + wait(0.05f); + //pc.printf("%1.2f %1.2f %1.2f\r\n", x, y, z); + + // Neglect calculating roll/pitch and use raw analog data = saves time + // As x approaches 0 and y is positive, the controller is going up (jumping) + // As x approaches 0 and y is negative, the controller is going down (dashing) + // Threshold_Min = -0.7 (Tested -> We will finalize) + // For y: Threshold_Max and Threshold_Min = +- 0.75 to +- 1.1 + + wait_ms(100); + if (x > -0.7 & y > 0.75 & y < 1.1 & z > -0.2 & z < 0.2) { + instr[0] = 'j'; + } else { + instr[0] = 'x'; + } + + if (x > -0.7 & y < -0.75 & y > -1.1 & z > -0.2 & z < 0.2) { + instr[1] = 'd'; + } else { + instr[1] = 'x'; + } + + // For Directional Movement + // Rest is when z = 0 + // As z approaches -1, the controller is going right + // As z approaches 1, the controller is going left + // Threshold_Max and Threshold_Min = +- 0.4 + + if (z > 0.4) { + instr[2] = 'l'; + } else { + instr[2] = 'x'; + } + + if (z < -0.4) { + instr[3] = 'r'; + } else { + instr[3] = 'x'; + } + + // Jump + R/L + if (x > -0.7 & z < -0.4 & y > 0) { + instr[0] = 'j'; + instr[3] = 'r'; + } else if (x > -0.7 & z > 0.4 & y > 0) { + instr[0] = 'j'; + instr[2] = 'l'; + } + + // Dash + R/L + if (x > -0.7 & z < -0.4 & y < 0) { + instr[0] = 'd'; + instr[3] = 'l'; + } else if (x > -0.7 & z > 0.4 & y < 0) { + instr[0] = 'd'; + instr[2] = 'r'; + } + + // See if button is pressed + if(button == 0) { + instr[4] = 's'; + } else { + instr[4] = 'x'; + } + + // Print out instruction string and reset rest + pc.printf(instr); + wait_ms(50); + } +} +
diff -r 000000000000 -r 73fee9cd0094 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Sep 21 09:11:20 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/4f6c30876dfa \ No newline at end of file