Glove with light ring which plays http://www.raiden-x.net/
Dependencies: Adafruit_NeoPixel MMA8451Q USBDevice mbed
Fork of Raiden by
Diff: main.cpp
- Revision:
- 11:94c3adb68ec2
- Parent:
- 10:ca3a7890d146
--- a/main.cpp Mon Sep 21 03:25:34 2015 +0000 +++ b/main.cpp Mon Sep 21 05:55:49 2015 +0000 @@ -1,182 +1,40 @@ #include "mbed.h" #include "MMA8451Q.h" -//#include "USBKeyboard.h" -//#include "USBHID.h" +#include "USBKeyboard.h" +#include "USBHID.h" +#include "raiden_const.h" +#include "PololuLedStrip.h" +// you can't try to use USBKeyboard if it doesn't exist otherwise it will hang +#define DEBUG 0 #define MMA8451_I2C_ADDRESS (0x1d<<1) -#define THRESHOLD 0.1 +#define THRESHOLD 0.2 #define LED_COUNT 24 #define DATA_PIN D6 - -typedef struct { - unsigned char usage; - unsigned char modifier; -} KEYMAP; +PololuLedStrip LEDStrip(D8); uint8_t r = 255; uint8_t g = 255; uint8_t b = 255; -//#define KEYMAP_SIZE (152) -//const KEYMAP keymap[KEYMAP_SIZE] = { -// {0, 0}, /* NUL */ -// {0, 0}, /* SOH */ -// {0, 0}, /* STX */ -// {0, 0}, /* ETX */ -// {0, 0}, /* EOT */ -// {0, 0}, /* ENQ */ -// {0, 0}, /* ACK */ -// {0, 0}, /* BEL */ -// {0x2a, 0}, /* BS */ /* Keyboard Delete (Backspace) */ -// {0x2b, 0}, /* TAB */ /* Keyboard Tab */ -// {0x28, 0}, /* LF */ /* Keyboard Return (Enter) */ -// {0, 0}, /* VT */ -// {0, 0}, /* FF */ -// {0, 0}, /* CR */ -// {0, 0}, /* SO */ -// {0, 0}, /* SI */ -// {0, 0}, /* DEL */ -// {0, 0}, /* DC1 */ -// {0, 0}, /* DC2 */ -// {0, 0}, /* DC3 */ -// {0, 0}, /* DC4 */ -// {0, 0}, /* NAK */ -// {0, 0}, /* SYN */ -// {0, 0}, /* ETB */ -// {0, 0}, /* CAN */ -// {0, 0}, /* EM */ -// {0, 0}, /* SUB */ -// {0, 0}, /* ESC */ -// {0, 0}, /* FS */ -// {0, 0}, /* GS */ -// {0, 0}, /* RS */ -// {0, 0}, /* US */ -// {0x2c, 0}, /* */ -// {0x1e, KEY_SHIFT}, /* ! */ -// {0x34, KEY_SHIFT}, /* " */ -// {0x20, KEY_SHIFT}, /* # */ -// {0x21, KEY_SHIFT}, /* $ */ -// {0x22, KEY_SHIFT}, /* % */ -// {0x24, KEY_SHIFT}, /* & */ -// {0x34, 0}, /* ' */ -// {0x26, KEY_SHIFT}, /* ( */ -// {0x27, KEY_SHIFT}, /* ) */ -// {0x25, KEY_SHIFT}, /* * */ -// {0x2e, KEY_SHIFT}, /* + */ -// {0x36, 0}, /* , */ -// {0x2d, 0}, /* - */ -// {0x37, 0}, /* . */ -// {0x38, 0}, /* / */ -// {0x27, 0}, /* 0 */ -// {0x1e, 0}, /* 1 */ -// {0x1f, 0}, /* 2 */ -// {0x20, 0}, /* 3 */ -// {0x21, 0}, /* 4 */ -// {0x22, 0}, /* 5 */ -// {0x23, 0}, /* 6 */ -// {0x24, 0}, /* 7 */ -// {0x25, 0}, /* 8 */ -// {0x26, 0}, /* 9 */ -// {0x33, KEY_SHIFT}, /* : */ -// {0x33, 0}, /* ; */ -// {0x36, KEY_SHIFT}, /* < */ -// {0x2e, 0}, /* = */ -// {0x37, KEY_SHIFT}, /* > */ -// {0x38, KEY_SHIFT}, /* ? */ -// {0x1f, KEY_SHIFT}, /* @ */ -// {0x04, KEY_SHIFT}, /* A */ -// {0x05, KEY_SHIFT}, /* B */ -// {0x06, KEY_SHIFT}, /* C */ -// {0x07, KEY_SHIFT}, /* D */ -// {0x08, KEY_SHIFT}, /* E */ -// {0x09, KEY_SHIFT}, /* F */ -// {0x0a, KEY_SHIFT}, /* G */ -// {0x0b, KEY_SHIFT}, /* H */ -// {0x0c, KEY_SHIFT}, /* I */ -// {0x0d, KEY_SHIFT}, /* J */ -// {0x0e, KEY_SHIFT}, /* K */ -// {0x0f, KEY_SHIFT}, /* L */ -// {0x10, KEY_SHIFT}, /* M */ -// {0x11, KEY_SHIFT}, /* N */ -// {0x12, KEY_SHIFT}, /* O */ -// {0x13, KEY_SHIFT}, /* P */ -// {0x14, KEY_SHIFT}, /* Q */ -// {0x15, KEY_SHIFT}, /* R */ -// {0x16, KEY_SHIFT}, /* S */ -// {0x17, KEY_SHIFT}, /* T */ -// {0x18, KEY_SHIFT}, /* U */ -// {0x19, KEY_SHIFT}, /* V */ -// {0x1a, KEY_SHIFT}, /* W */ -// {0x1b, KEY_SHIFT}, /* X */ -// {0x1c, KEY_SHIFT}, /* Y */ -// {0x1d, KEY_SHIFT}, /* Z */ -// {0x2f, 0}, /* [ */ -// {0x31, 0}, /* \ */ -// {0x30, 0}, /* ] */ -// {0x23, KEY_SHIFT}, /* ^ */ -// {0x2d, KEY_SHIFT}, /* _ */ -// {0x35, 0}, /* ` */ -// {0x04, 0}, /* a */ -// {0x05, 0}, /* b */ -// {0x06, 0}, /* c */ -// {0x07, 0}, /* d */ -// {0x08, 0}, /* e */ -// {0x09, 0}, /* f */ -// {0x0a, 0}, /* g */ -// {0x0b, 0}, /* h */ -// {0x0c, 0}, /* i */ -// {0x0d, 0}, /* j */ -// {0x0e, 0}, /* k */ -// {0x0f, 0}, /* l */ -// {0x10, 0}, /* m */ -// {0x11, 0}, /* n */ -// {0x12, 0}, /* o */ -// {0x13, 0}, /* p */ -// {0x14, 0}, /* q */ -// {0x15, 0}, /* r */ -// {0x16, 0}, /* s */ -// {0x17, 0}, /* t */ -// {0x18, 0}, /* u */ -// {0x19, 0}, /* v */ -// {0x1a, 0}, /* w */ -// {0x1b, 0}, /* x */ -// {0x1c, 0}, /* y */ -// {0x1d, 0}, /* z */ -// {0x2f, KEY_SHIFT}, /* { */ -// {0x31, KEY_SHIFT}, /* | */ -// {0x30, KEY_SHIFT}, /* } */ -// {0x35, KEY_SHIFT}, /* ~ */ -// {0,0}, /* DEL */ -// -// {0x3a, 0}, /* F1 */ -// {0x3b, 0}, /* F2 */ -// {0x3c, 0}, /* F3 */ -// {0x3d, 0}, /* F4 */ -// {0x3e, 0}, /* F5 */ -// {0x3f, 0}, /* F6 */ -// {0x40, 0}, /* F7 */ -// {0x41, 0}, /* F8 */ -// {0x42, 0}, /* F9 */ -// {0x43, 0}, /* F10 */ -// {0x44, 0}, /* F11 */ -// {0x45, 0}, /* F12 */ -// -// {0x46, 0}, /* PRINT_SCREEN */ -// {0x47, 0}, /* SCROLL_LOCK */ -// {0x39, 0}, /* CAPS_LOCK */ -// {0x53, 0}, /* NUM_LOCK */ -// {0x49, 0}, /* INSERT */ -// {0x4a, 0}, /* HOME */ -// {0x4b, 0}, /* PAGE_UP */ -// {0x4e, 0}, /* PAGE_DOWN */ -// -// {0x4f, 0}, /* RIGHT_ARROW */ -// {0x50, 0}, /* LEFT_ARROW */ -// {0x51, 0}, /* DOWN_ARROW */ -// {0x52, 0}, /* UP_ARROW */ -//}; +void flash() { + rgb_color white = (rgb_color){254,254,254}; + rgb_color all_white[LED_COUNT]; + for (int i = 0; i < LED_COUNT; i++) { + all_white[i] = white; + } + LEDStrip.write(all_white, LED_COUNT); +} +void flashOff() { + rgb_color black = (rgb_color){0,0,0}; + rgb_color all_black[LED_COUNT]; + for (int i = 0; i < LED_COUNT; i++) { + all_black[i] = black; + } + LEDStrip.write(all_black, LED_COUNT); +} int main(void) { Serial mac(USBTX, USBRX); @@ -184,23 +42,29 @@ MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); PwmOut rled(LED_RED); PwmOut bled(LED_BLUE); + + AnalogIn flex(A0); -// USBKeyboard keyboard; -// HID_REPORT report; - - AnalogIn flex(A0); + #if DEBUG == 0 + USBKeyboard keyboard; + HID_REPORT report; - // report.data[0] = 1; // this is the USB ID -// report.data[1] = 0; // this is a modifier key (ie: ctrl/shift/alt) -// report.data[2] = 0; // i haven't figured this one out -// report.data[3] = 0; // UP -// report.data[4] = 0; // DOWN -// report.data[5] = 0; // LEFT -// report.data[6] = 0; // RIGHT -// report.data[7] = keymap['z'].usage; // SHOOT -// report.data[8] = 0; // BOMB -// report.length = 9; + report.data[0] = 1; // this is the USB ID + report.data[1] = 0; // this is a modifier key (ie: ctrl/shift/alt) + report.data[2] = 0; // i haven't figured this one out + report.data[3] = 0; // UP + report.data[4] = 0; // DOWN + report.data[5] = 0; // LEFT + report.data[6] = 0; // RIGHT + report.data[7] = 0; // SHOOT + report.data[8] = 0; // BOMB + report.length = 9; + #endif + mac.printf("R A I D E N X", flex.read()); + flash(); + wait(2); + flashOff(); while (true) { mac.printf("%f", flex.read()); @@ -208,40 +72,64 @@ float y = acc.getAccY(); if (x < 0 - THRESHOLD) { - mac.printf("Left\r\n"); -// report.data[6] = 0; -// report.data[5] = keymap[LEFT_ARROW].usage; - } - - if (x > 0 + THRESHOLD) { - mac.printf("Right\r\n"); -// report.data[6] = keymap[RIGHT_ARROW].usage; -// report.data[5] = 0; + mac.printf("Down\r\n"); + #if DEBUG == 0 + report.data[6] = 0; + report.data[5] = keymap[DOWN_ARROW].usage; + #endif + } else if (x > 0 + THRESHOLD) { + mac.printf("Up\r\n"); + #if DEBUG == 0 + report.data[6] = keymap[UP_ARROW].usage; + report.data[5] = 0; + #endif + } else { + #if DEBUG == 0 + report.data[5] = 0; + report.data[6] = 0; + #endif } if (y < 0 - THRESHOLD) { - mac.printf("Up\r\n"); -// report.data[3] = keymap[UP_ARROW].usage; -// report.data[4] = 0; - } - - if (y > 0 + THRESHOLD) { - mac.printf("Down\r\n"); -// report.data[3] = 0; -// report.data[4] = keymap[DOWN_ARROW].usage; + mac.printf("Left\r\n"); + #if DEBUG == 0 + report.data[3] = keymap[LEFT_ARROW].usage; + report.data[4] = 0; + #endif + } else if (y > 0 + THRESHOLD) { + mac.printf("Right\r\n"); + #if DEBUG == 0 + report.data[3] = 0; + report.data[4] = keymap[RIGHT_ARROW].usage; + #endif + } else { + #if DEBUG == 0 + report.data[3] = 0; + report.data[4] = 0; + #endif } - if (flex.read() < 0.4) { + if (flex.read() < 0.3) { mac.printf("Bomb"); -// report.data[8] = keymap['x'].usage; + flash(); + #if DEBUG == 0 + report.data[8] = keymap['x'].usage; + #endif } else { -// report.data[8] = 0; + flashOff(); + #if DEBUG == 0 + report.data[8] = 0; + #endif } rled = 1.0 - abs(acc.getAccX()); bled = 1.0 - abs(acc.getAccY()); -// keyboard.send(&report); - wait(0.5); + #if DEBUG == 0 + report.data[7] = keymap['z'].usage; + keyboard.send(&report); + #elif DEBUG == 1 + wait(0.5); + #endif } }