Mynput: Game controller for Color Quest.

Dependencies:   Adafruit_NeoPixel MMA8451Q PinDetect_KL25Z USBDevice mbed

Fork of idd_hw3 by IDD HW3

Committer:
bkim54
Date:
Thu Sep 17 23:06:39 2015 +0000
Revision:
3:888c255f87a7
Parent:
2:bab0105de714
Child:
4:0527cd963c14
put in LEDs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bkim54 0:d307eb0be182 1 #include "mbed.h"
bkim54 0:d307eb0be182 2 #include "MMA8451Q.h"
bkim54 0:d307eb0be182 3 #include "Timer.h"
bkim54 1:1f45953fccf9 4 #include "USBKeyboard.h"
bkim54 1:1f45953fccf9 5 #include "PinDetect.h"
bkim54 3:888c255f87a7 6 #include "PololuLedStrip.h"
bkim54 0:d307eb0be182 7
bkim54 0:d307eb0be182 8 // define I2C Pins and address for KL25Z. Taken from default sample code.
bkim54 0:d307eb0be182 9 PinName const SDA = PTE25;
bkim54 0:d307eb0be182 10 PinName const SCL = PTE24;
bkim54 0:d307eb0be182 11 Timer timer;
bkim54 0:d307eb0be182 12 int timer_begin;
bkim54 3:888c255f87a7 13
bkim54 3:888c255f87a7 14 #define LED_COUNT 16
bkim54 0:d307eb0be182 15 #define MMA8451_I2C_ADDRESS (0x1d<<1)
bkim54 0:d307eb0be182 16
bkim54 1:1f45953fccf9 17 #define LEAN_LEFT_THRESH -0.4
bkim54 1:1f45953fccf9 18 #define LEAN_RIGHT_THRESH 0.4
bkim54 1:1f45953fccf9 19 #define LEAN_BACK_THRESH -0.5
bkim54 1:1f45953fccf9 20 #define JUMP_THRESH 0.4
bkim54 1:1f45953fccf9 21 #define FLEX_THRESH 0.4
bkim54 1:1f45953fccf9 22 const char LEFT = 'A';
bkim54 1:1f45953fccf9 23 const char RIGHT = 'D';
bkim54 1:1f45953fccf9 24 const char LASER = 'J';
bkim54 1:1f45953fccf9 25 const char SHIELD = 'K';
bkim54 1:1f45953fccf9 26 const char SLOW = 'L';
bkim54 1:1f45953fccf9 27 const char ENTER = '\n';
bkim54 1:1f45953fccf9 28 const char SPACE = ' ';
bkim54 0:d307eb0be182 29
bkim54 0:d307eb0be182 30 //serial connection to PC via USB
bkim54 0:d307eb0be182 31 Serial pc(USBTX, USBRX);
bkim54 0:d307eb0be182 32
bkim54 3:888c255f87a7 33 PololuLedStrip wristLedStrip(D6);
bkim54 3:888c255f87a7 34 PololuLedStrip chestLedStrip(D7);
bkim54 3:888c255f87a7 35
bkim54 3:888c255f87a7 36 rgb_color colors[LED_COUNT];
bkim54 3:888c255f87a7 37
bkim54 1:1f45953fccf9 38 USBKeyboard keyboard;
bkim54 2:bab0105de714 39 AnalogIn rightArm(A0);
bkim54 1:1f45953fccf9 40 AnalogIn wrist(A2);
bkim54 1:1f45953fccf9 41 PinDetect on_off(D15);
bkim54 1:1f45953fccf9 42 bool on = false;
bkim54 1:1f45953fccf9 43
bkim54 1:1f45953fccf9 44
bkim54 1:1f45953fccf9 45 void on_off_pressed() {
bkim54 1:1f45953fccf9 46 on = !on;
bkim54 1:1f45953fccf9 47 }
bkim54 3:888c255f87a7 48
bkim54 3:888c255f87a7 49 rgb_color getColor( char color, int intensity ) {
bkim54 3:888c255f87a7 50 rgb_color pixelColor;
bkim54 3:888c255f87a7 51 switch (color) {
bkim54 3:888c255f87a7 52 case 'r':
bkim54 3:888c255f87a7 53 pixelColor = (rgb_color){ intensity, 0, 0 };
bkim54 3:888c255f87a7 54 break;
bkim54 3:888c255f87a7 55 case 'g':
bkim54 3:888c255f87a7 56 pixelColor = (rgb_color){ 0, intensity, 0 };
bkim54 3:888c255f87a7 57 break;
bkim54 3:888c255f87a7 58 case 'b':
bkim54 3:888c255f87a7 59 pixelColor = (rgb_color){ 0, 0, intensity };
bkim54 3:888c255f87a7 60 break;
bkim54 3:888c255f87a7 61 case 'w':
bkim54 3:888c255f87a7 62 pixelColor = (rgb_color){ intensity, intensity, intensity};
bkim54 3:888c255f87a7 63 break;
bkim54 3:888c255f87a7 64 default:
bkim54 3:888c255f87a7 65 pixelColor = (rgb_color){ 0, 0 , intensity };
bkim54 3:888c255f87a7 66 break;
bkim54 3:888c255f87a7 67 }
bkim54 3:888c255f87a7 68 return pixelColor;
bkim54 3:888c255f87a7 69 }
bkim54 3:888c255f87a7 70
bkim54 3:888c255f87a7 71 void cleanRing() {
bkim54 3:888c255f87a7 72 for(uint32_t i = 0; i < LED_COUNT; i++) {
bkim54 3:888c255f87a7 73 colors[i] = (rgb_color){ 0, 0, 0 };
bkim54 3:888c255f87a7 74 }
bkim54 3:888c255f87a7 75 wristLedStrip.write(colors, LED_COUNT);
bkim54 3:888c255f87a7 76 }
bkim54 3:888c255f87a7 77
bkim54 3:888c255f87a7 78 void pulse(char color, PololuLedStrip led) {
bkim54 3:888c255f87a7 79 // Update the colors array.
bkim54 3:888c255f87a7 80 for( int j = 0; j < 255; j++) {
bkim54 3:888c255f87a7 81 for( uint32_t i = 0; i < LED_COUNT; i++ ) {
bkim54 3:888c255f87a7 82 colors[i] = getColor(color, j);
bkim54 3:888c255f87a7 83 }
bkim54 3:888c255f87a7 84 led.write(colors, LED_COUNT);
bkim54 3:888c255f87a7 85 }
bkim54 3:888c255f87a7 86 //wait_ms(100);
bkim54 3:888c255f87a7 87 }
bkim54 3:888c255f87a7 88
bkim54 0:d307eb0be182 89 int main(void)
bkim54 0:d307eb0be182 90 {
bkim54 0:d307eb0be182 91 //configure on-board I2C accelerometer on KL25Z
bkim54 0:d307eb0be182 92 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
bkim54 0:d307eb0be182 93 //map read acceleration to PWM output on red status LED
bkim54 0:d307eb0be182 94 PwmOut rled(LED_RED);
bkim54 1:1f45953fccf9 95 float x,y,z;
bkim54 1:1f45953fccf9 96
bkim54 1:1f45953fccf9 97 on_off.attach_asserted(&on_off_pressed);
bkim54 1:1f45953fccf9 98 on_off.setAssertValue(0); //pins are PullUp, so there activelow buttons.
bkim54 1:1f45953fccf9 99 on_off.setSampleFrequency(); // Defaults to 20ms.
bkim54 1:1f45953fccf9 100
bkim54 0:d307eb0be182 101 timer.start();
bkim54 0:d307eb0be182 102 timer_begin = timer.read_ms();
bkim54 2:bab0105de714 103 pc.printf("helllo\n");
bkim54 3:888c255f87a7 104 //pulse();
bkim54 0:d307eb0be182 105 while (true) {
bkim54 1:1f45953fccf9 106 if (on) {
bkim54 1:1f45953fccf9 107 x = acc.getAccX();
bkim54 1:1f45953fccf9 108 y = acc.getAccY();
bkim54 1:1f45953fccf9 109 z = acc.getAccZ();
bkim54 1:1f45953fccf9 110
bkim54 1:1f45953fccf9 111 if ( y > LEAN_RIGHT_THRESH ) {
bkim54 1:1f45953fccf9 112 pc.printf("Lean right\n");
bkim54 1:1f45953fccf9 113 keyboard.putc(RIGHT);
bkim54 1:1f45953fccf9 114 } else if (y < LEAN_LEFT_THRESH) {
bkim54 1:1f45953fccf9 115 pc.printf("Lean left\n");
bkim54 1:1f45953fccf9 116 keyboard.putc(LEFT);
bkim54 1:1f45953fccf9 117 }
bkim54 1:1f45953fccf9 118
bkim54 1:1f45953fccf9 119 if( x < JUMP_THRESH && timer.read_ms() - timer_begin > 300 ) {
bkim54 1:1f45953fccf9 120 timer_begin = timer.read_ms();
bkim54 1:1f45953fccf9 121 pc.printf("Jump\n");
bkim54 1:1f45953fccf9 122 keyboard.putc(ENTER);
bkim54 1:1f45953fccf9 123 keyboard.putc(SPACE);
bkim54 1:1f45953fccf9 124 }
bkim54 1:1f45953fccf9 125 if(wrist.read() < FLEX_THRESH) {
bkim54 2:bab0105de714 126 pc.printf("Shoot\n");
bkim54 1:1f45953fccf9 127 keyboard.putc(LASER);
bkim54 3:888c255f87a7 128 pulse('r', wristLedStrip);
bkim54 3:888c255f87a7 129 pulse('r', chestLedStrip);
bkim54 3:888c255f87a7 130 }
bkim54 3:888c255f87a7 131 else if(rightArm.read() < FLEX_THRESH) {
bkim54 1:1f45953fccf9 132 pc.printf("Shield\n");
bkim54 1:1f45953fccf9 133 keyboard.putc(SHIELD);
bkim54 3:888c255f87a7 134 pulse('g', wristLedStrip);
bkim54 3:888c255f87a7 135 pulse('g', chestLedStrip);
bkim54 3:888c255f87a7 136 }
bkim54 3:888c255f87a7 137 else if ( z < LEAN_BACK_THRESH) {
bkim54 3:888c255f87a7 138 pc.printf("Leaning back\n");
bkim54 3:888c255f87a7 139 keyboard.putc(SLOW);
bkim54 3:888c255f87a7 140 pulse('b', wristLedStrip);
bkim54 3:888c255f87a7 141 pulse('b', chestLedStrip);
bkim54 3:888c255f87a7 142 } else{
bkim54 3:888c255f87a7 143 pulse('w', wristLedStrip);
bkim54 3:888c255f87a7 144 pulse('w', chestLedStrip);
bkim54 1:1f45953fccf9 145 }
bkim54 0:d307eb0be182 146 }
bkim54 0:d307eb0be182 147 }
bkim54 0:d307eb0be182 148 }