Glove with light ring which plays http://www.raiden-x.net/
Dependencies: Adafruit_NeoPixel MMA8451Q USBDevice mbed
Fork of Raiden by
main.cpp@11:94c3adb68ec2, 2015-09-21 (annotated)
- Committer:
- phorust
- Date:
- Mon Sep 21 05:55:49 2015 +0000
- Revision:
- 11:94c3adb68ec2
- Parent:
- 10:ca3a7890d146
finish hw3 by adding working led code, fixing axis, increasing deadzone
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
chris | 2:41db78380a6e | 1 | #include "mbed.h" |
chris | 2:41db78380a6e | 2 | #include "MMA8451Q.h" |
phorust | 11:94c3adb68ec2 | 3 | #include "USBKeyboard.h" |
phorust | 11:94c3adb68ec2 | 4 | #include "USBHID.h" |
phorust | 11:94c3adb68ec2 | 5 | #include "raiden_const.h" |
phorust | 11:94c3adb68ec2 | 6 | #include "PololuLedStrip.h" |
christianle | 9:07e3e2f6d6a9 | 7 | |
phorust | 11:94c3adb68ec2 | 8 | // you can't try to use USBKeyboard if it doesn't exist otherwise it will hang |
phorust | 11:94c3adb68ec2 | 9 | #define DEBUG 0 |
chris | 2:41db78380a6e | 10 | |
chris | 2:41db78380a6e | 11 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
phorust | 11:94c3adb68ec2 | 12 | #define THRESHOLD 0.2 |
christianle | 8:de23747efc37 | 13 | |
christianle | 9:07e3e2f6d6a9 | 14 | #define LED_COUNT 24 |
christianle | 9:07e3e2f6d6a9 | 15 | #define DATA_PIN D6 |
phorust | 11:94c3adb68ec2 | 16 | PololuLedStrip LEDStrip(D8); |
christianle | 8:de23747efc37 | 17 | |
christianle | 9:07e3e2f6d6a9 | 18 | uint8_t r = 255; |
christianle | 9:07e3e2f6d6a9 | 19 | uint8_t g = 255; |
christianle | 9:07e3e2f6d6a9 | 20 | uint8_t b = 255; |
christianle | 8:de23747efc37 | 21 | |
phorust | 11:94c3adb68ec2 | 22 | void flash() { |
phorust | 11:94c3adb68ec2 | 23 | rgb_color white = (rgb_color){254,254,254}; |
phorust | 11:94c3adb68ec2 | 24 | rgb_color all_white[LED_COUNT]; |
phorust | 11:94c3adb68ec2 | 25 | for (int i = 0; i < LED_COUNT; i++) { |
phorust | 11:94c3adb68ec2 | 26 | all_white[i] = white; |
phorust | 11:94c3adb68ec2 | 27 | } |
phorust | 11:94c3adb68ec2 | 28 | LEDStrip.write(all_white, LED_COUNT); |
phorust | 11:94c3adb68ec2 | 29 | } |
phorust | 11:94c3adb68ec2 | 30 | void flashOff() { |
phorust | 11:94c3adb68ec2 | 31 | rgb_color black = (rgb_color){0,0,0}; |
phorust | 11:94c3adb68ec2 | 32 | rgb_color all_black[LED_COUNT]; |
phorust | 11:94c3adb68ec2 | 33 | for (int i = 0; i < LED_COUNT; i++) { |
phorust | 11:94c3adb68ec2 | 34 | all_black[i] = black; |
phorust | 11:94c3adb68ec2 | 35 | } |
phorust | 11:94c3adb68ec2 | 36 | LEDStrip.write(all_black, LED_COUNT); |
phorust | 11:94c3adb68ec2 | 37 | } |
chris | 2:41db78380a6e | 38 | |
chris | 4:367de1084ea9 | 39 | int main(void) { |
christianle | 9:07e3e2f6d6a9 | 40 | Serial mac(USBTX, USBRX); |
christianle | 9:07e3e2f6d6a9 | 41 | |
emilmont | 5:bf5becf7469c | 42 | MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); |
emilmont | 5:bf5becf7469c | 43 | PwmOut rled(LED_RED); |
emilmont | 5:bf5becf7469c | 44 | PwmOut bled(LED_BLUE); |
phorust | 11:94c3adb68ec2 | 45 | |
phorust | 11:94c3adb68ec2 | 46 | AnalogIn flex(A0); |
christianle | 8:de23747efc37 | 47 | |
phorust | 11:94c3adb68ec2 | 48 | #if DEBUG == 0 |
phorust | 11:94c3adb68ec2 | 49 | USBKeyboard keyboard; |
phorust | 11:94c3adb68ec2 | 50 | HID_REPORT report; |
christianle | 8:de23747efc37 | 51 | |
phorust | 11:94c3adb68ec2 | 52 | report.data[0] = 1; // this is the USB ID |
phorust | 11:94c3adb68ec2 | 53 | report.data[1] = 0; // this is a modifier key (ie: ctrl/shift/alt) |
phorust | 11:94c3adb68ec2 | 54 | report.data[2] = 0; // i haven't figured this one out |
phorust | 11:94c3adb68ec2 | 55 | report.data[3] = 0; // UP |
phorust | 11:94c3adb68ec2 | 56 | report.data[4] = 0; // DOWN |
phorust | 11:94c3adb68ec2 | 57 | report.data[5] = 0; // LEFT |
phorust | 11:94c3adb68ec2 | 58 | report.data[6] = 0; // RIGHT |
phorust | 11:94c3adb68ec2 | 59 | report.data[7] = 0; // SHOOT |
phorust | 11:94c3adb68ec2 | 60 | report.data[8] = 0; // BOMB |
phorust | 11:94c3adb68ec2 | 61 | report.length = 9; |
phorust | 11:94c3adb68ec2 | 62 | #endif |
chris | 4:367de1084ea9 | 63 | |
phorust | 11:94c3adb68ec2 | 64 | mac.printf("R A I D E N X", flex.read()); |
phorust | 11:94c3adb68ec2 | 65 | flash(); |
phorust | 11:94c3adb68ec2 | 66 | wait(2); |
phorust | 11:94c3adb68ec2 | 67 | flashOff(); |
emilmont | 5:bf5becf7469c | 68 | while (true) { |
christianle | 9:07e3e2f6d6a9 | 69 | mac.printf("%f", flex.read()); |
christianle | 9:07e3e2f6d6a9 | 70 | |
christianle | 8:de23747efc37 | 71 | float x = acc.getAccX(); |
christianle | 8:de23747efc37 | 72 | float y = acc.getAccY(); |
christianle | 8:de23747efc37 | 73 | |
christianle | 8:de23747efc37 | 74 | if (x < 0 - THRESHOLD) { |
phorust | 11:94c3adb68ec2 | 75 | mac.printf("Down\r\n"); |
phorust | 11:94c3adb68ec2 | 76 | #if DEBUG == 0 |
phorust | 11:94c3adb68ec2 | 77 | report.data[6] = 0; |
phorust | 11:94c3adb68ec2 | 78 | report.data[5] = keymap[DOWN_ARROW].usage; |
phorust | 11:94c3adb68ec2 | 79 | #endif |
phorust | 11:94c3adb68ec2 | 80 | } else if (x > 0 + THRESHOLD) { |
phorust | 11:94c3adb68ec2 | 81 | mac.printf("Up\r\n"); |
phorust | 11:94c3adb68ec2 | 82 | #if DEBUG == 0 |
phorust | 11:94c3adb68ec2 | 83 | report.data[6] = keymap[UP_ARROW].usage; |
phorust | 11:94c3adb68ec2 | 84 | report.data[5] = 0; |
phorust | 11:94c3adb68ec2 | 85 | #endif |
phorust | 11:94c3adb68ec2 | 86 | } else { |
phorust | 11:94c3adb68ec2 | 87 | #if DEBUG == 0 |
phorust | 11:94c3adb68ec2 | 88 | report.data[5] = 0; |
phorust | 11:94c3adb68ec2 | 89 | report.data[6] = 0; |
phorust | 11:94c3adb68ec2 | 90 | #endif |
christianle | 8:de23747efc37 | 91 | } |
christianle | 8:de23747efc37 | 92 | |
christianle | 8:de23747efc37 | 93 | if (y < 0 - THRESHOLD) { |
phorust | 11:94c3adb68ec2 | 94 | mac.printf("Left\r\n"); |
phorust | 11:94c3adb68ec2 | 95 | #if DEBUG == 0 |
phorust | 11:94c3adb68ec2 | 96 | report.data[3] = keymap[LEFT_ARROW].usage; |
phorust | 11:94c3adb68ec2 | 97 | report.data[4] = 0; |
phorust | 11:94c3adb68ec2 | 98 | #endif |
phorust | 11:94c3adb68ec2 | 99 | } else if (y > 0 + THRESHOLD) { |
phorust | 11:94c3adb68ec2 | 100 | mac.printf("Right\r\n"); |
phorust | 11:94c3adb68ec2 | 101 | #if DEBUG == 0 |
phorust | 11:94c3adb68ec2 | 102 | report.data[3] = 0; |
phorust | 11:94c3adb68ec2 | 103 | report.data[4] = keymap[RIGHT_ARROW].usage; |
phorust | 11:94c3adb68ec2 | 104 | #endif |
phorust | 11:94c3adb68ec2 | 105 | } else { |
phorust | 11:94c3adb68ec2 | 106 | #if DEBUG == 0 |
phorust | 11:94c3adb68ec2 | 107 | report.data[3] = 0; |
phorust | 11:94c3adb68ec2 | 108 | report.data[4] = 0; |
phorust | 11:94c3adb68ec2 | 109 | #endif |
christianle | 8:de23747efc37 | 110 | } |
christianle | 10:ca3a7890d146 | 111 | |
phorust | 11:94c3adb68ec2 | 112 | if (flex.read() < 0.3) { |
christianle | 10:ca3a7890d146 | 113 | mac.printf("Bomb"); |
phorust | 11:94c3adb68ec2 | 114 | flash(); |
phorust | 11:94c3adb68ec2 | 115 | #if DEBUG == 0 |
phorust | 11:94c3adb68ec2 | 116 | report.data[8] = keymap['x'].usage; |
phorust | 11:94c3adb68ec2 | 117 | #endif |
christianle | 10:ca3a7890d146 | 118 | } else { |
phorust | 11:94c3adb68ec2 | 119 | flashOff(); |
phorust | 11:94c3adb68ec2 | 120 | #if DEBUG == 0 |
phorust | 11:94c3adb68ec2 | 121 | report.data[8] = 0; |
phorust | 11:94c3adb68ec2 | 122 | #endif |
christianle | 10:ca3a7890d146 | 123 | } |
christianle | 8:de23747efc37 | 124 | |
chris | 3:f2d3e041d8f2 | 125 | rled = 1.0 - abs(acc.getAccX()); |
christianle | 8:de23747efc37 | 126 | bled = 1.0 - abs(acc.getAccY()); |
christianle | 8:de23747efc37 | 127 | |
phorust | 11:94c3adb68ec2 | 128 | #if DEBUG == 0 |
phorust | 11:94c3adb68ec2 | 129 | report.data[7] = keymap['z'].usage; |
phorust | 11:94c3adb68ec2 | 130 | keyboard.send(&report); |
phorust | 11:94c3adb68ec2 | 131 | #elif DEBUG == 1 |
phorust | 11:94c3adb68ec2 | 132 | wait(0.5); |
phorust | 11:94c3adb68ec2 | 133 | #endif |
chris | 2:41db78380a6e | 134 | } |
chris | 2:41db78380a6e | 135 | } |