Glove with light ring which plays http://www.raiden-x.net/

Dependencies:   Adafruit_NeoPixel MMA8451Q USBDevice mbed

Fork of Raiden by Christian Le

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?

UserRevisionLine numberNew 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 }