idd hw3

Dependencies:   mbed DebounceIn USBDevice PinDetect

Files at this revision

API Documentation at this revision

Comitter:
emilychen55
Date:
Mon Sep 29 03:03:54 2014 +0000
Parent:
7:7abb32ab30b6
Commit message:
Final Code with HID Reporting Mechanisms

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Sun Sep 28 22:02:27 2014 +0000
+++ b/main.cpp	Mon Sep 29 03:03:54 2014 +0000
@@ -1,13 +1,21 @@
 #include "mbed.h"
+#include "PinDetect.h"
 #include "USBKeyboard.h"
 #include "DebounceIn.h"
 
-BusOut leds(LED1, LED2, LED3);
+#define PINDETECT_SAMPLE_FREQUENCY 10000
+
+DigitalOut led(LED_GREEN);
+DebounceIn mode(D12);
 DebounceIn accelerate(D11);
 DebounceIn powerUp(D10);
 DebounceIn breakz(D13);
+DebounceIn up(D9); 
+DebounceIn down(D7); 
+DebounceIn left(D6); 
+DebounceIn right(D8);
 
-Serial pc(USBTX, USBRX);
+HID_REPORT report;
 
 AnalogIn accelZ(A0);
 AnalogIn accelY(A1);
@@ -22,51 +30,93 @@
 float CENTER_RIGHT = 0.51;
 float CENTER_UP = 0.47;
 float CENTER_DOWN = 0.57;
+int flag = 1; // to change modes between directions via 1.buttons or 2.accelerometer
  
 int main(void) {
-    pc.baud(115200);
-    while (1) {
-        if (!accelerate) {
-            controller.keyCode('x');
+    report.data[0] = 1;
+    report.length = 9;
+    while (true) {
+        if (!mode) {
+            flag = !flag;
+            wait(0.5);
+        }
+        
+        //KL25Z Debugging Purposes
+        led=!led;
+        wait(0.05);
+        
+        //Mode 1: Accelerometer
+        if (flag) {
+            if (!accelerate) { 
+                report.data[3] = 0x1B; //x 
+            } else {
+                report.data[3] = 0;
+            }
+            if (!powerUp) { 
+                report.data[8] = 0x16; //s
+            } else {
+                report.data[8] = 0;
+            }
             if (accelX.read() <= CENTER_LEFT) {
-                //controller.move(-1, 0);
-                controller.keyCode(LEFT_ARROW);
-                controller.keyCode('x');
+                report.data[4] = 0x50;
+            } else {
+                report.data[4] = 0;
             }
             if (accelX.read() >= CENTER_RIGHT) {
-                //controller.move(1, 0);
-                controller.keyCode(RIGHT_ARROW);
-                controller.keyCode('x');
+                report.data[5] = 0x4F;
+            } else {
+                report.data[5] = 0;
             }
-        }
-        if (!powerUp) {
-            controller.keyCode('x');
-            controller.keyCode('s');
-            controller.keyCode('x');
-        }
-        if (!breakz) {
-            controller.keyCode('z');
+            if (accelZ.read() <= CENTER_UP) {
+                report.data[6] = 0x52;
+            } else if (!breakz) {
+                report.data[6] = 0x1D; //z
+            } else {
+                report.data[6] = 0;
+            }
+            if (accelZ.read() >= CENTER_DOWN) {
+                report.data[7] = 0x51;
+            } else {
+                report.data[7] = 0;
+            }
+            controller.send(&report);
         }
-        // Navigation in Game Menu 
-        if (accelX.read() <= CENTER_LEFT) {
-            controller.keyCode(LEFT_ARROW);
-            pc.printf("left\n");
-            wait(0.1);
-        }
-        if (accelX.read() >= CENTER_RIGHT) {
-            controller.keyCode(RIGHT_ARROW);
-            pc.printf("right\n");
-            wait(0.1);
-        }
-        if (accelZ.read() <= CENTER_UP) {
-            controller.keyCode(UP_ARROW);
-            pc.printf("up\n");
-            wait(0.1);
-        }
-        if (accelZ.read() >= CENTER_DOWN) {
-            controller.keyCode(DOWN_ARROW);
-            pc.printf("down\n");
-            wait(0.1);
+
+        //Mode 2: Buttons 
+        if (!flag) {
+            if (!accelerate) { 
+                report.data[3] = 0x1B; //x 
+            } else {
+                report.data[3] = 0;
+            }
+            if (!powerUp) { 
+                report.data[8] = 0x16; //s
+            } else {
+                report.data[8] = 0;
+            }
+            if (!up) { 
+                report.data[4] = 0x52; 
+            } else if (!breakz) {
+                report.data[4] = 0x1D; //z
+            } else {
+                report.data[4] = 0;
+            }
+            if (!down) {
+                report.data[5] = 0x51;
+            } else {
+                report.data[5] = 0;
+            }
+            if (!left) {
+                report.data[6] = 0x50;
+            } else {
+                report.data[6] = 0;
+            }
+            if (!right) {
+                report.data[7] = 0x4F;
+            } else {
+                report.data[7] = 0;
+            }
+            controller.send(&report);
         }
     }
 }
\ No newline at end of file