Code for HW3 - Game Controller Mega Buster that interfaces with flash based Megaman - Megaman Project X

Dependencies:   MMA8451Q mbed

Files at this revision

API Documentation at this revision

Comitter:
bthov
Date:
Mon Sep 21 09:11:20 2015 +0000
Commit message:
Game Controller;

Changed in this revision

MMA8451Q.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
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