Code for left-hand controller for Clash. Orientation control and d-pad control corresponding to relative mouse position and WASD movement keys for the game Chivalry: Medieval Warfare.
Dependencies: DebounceIn MMA8451Q TSI USBDevice_modified mbed
main.cpp@0:b6b326df4c49, 2014-09-29 (annotated)
- Committer:
- fil
- Date:
- Mon Sep 29 01:52:18 2014 +0000
- Revision:
- 0:b6b326df4c49
final commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fil | 0:b6b326df4c49 | 1 | #include "mbed.h" |
fil | 0:b6b326df4c49 | 2 | //#include "USBMouse.h" |
fil | 0:b6b326df4c49 | 3 | #include "USBMouseKeyboard.h" |
fil | 0:b6b326df4c49 | 4 | #include "USBKeyboard.h" |
fil | 0:b6b326df4c49 | 5 | #include "MMA8451Q.h" |
fil | 0:b6b326df4c49 | 6 | #include "TSISensor.h" |
fil | 0:b6b326df4c49 | 7 | #include "math.h" |
fil | 0:b6b326df4c49 | 8 | #include "DebounceIn.h" |
fil | 0:b6b326df4c49 | 9 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
fil | 0:b6b326df4c49 | 10 | |
fil | 0:b6b326df4c49 | 11 | //USBMouse mouse(ABS_MOUSE); |
fil | 0:b6b326df4c49 | 12 | USBMouseKeyboard mouse; |
fil | 0:b6b326df4c49 | 13 | MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); |
fil | 0:b6b326df4c49 | 14 | TSISensor tsi; |
fil | 0:b6b326df4c49 | 15 | //Serial pc(USBTX, USBRX); |
fil | 0:b6b326df4c49 | 16 | |
fil | 0:b6b326df4c49 | 17 | DebounceIn wkey(D4); |
fil | 0:b6b326df4c49 | 18 | DebounceIn akey(D5); |
fil | 0:b6b326df4c49 | 19 | DebounceIn skey(D6); |
fil | 0:b6b326df4c49 | 20 | DebounceIn dkey(D7); |
fil | 0:b6b326df4c49 | 21 | |
fil | 0:b6b326df4c49 | 22 | main (void) |
fil | 0:b6b326df4c49 | 23 | { |
fil | 0:b6b326df4c49 | 24 | int16_t x_mouse = 0; |
fil | 0:b6b326df4c49 | 25 | int16_t y_mouse = 0; |
fil | 0:b6b326df4c49 | 26 | int t = 0; |
fil | 0:b6b326df4c49 | 27 | float x = 0; float x_cal = 0; |
fil | 0:b6b326df4c49 | 28 | float y = 0; float y_cal = 0; |
fil | 0:b6b326df4c49 | 29 | int calib_cnt = 0; |
fil | 0:b6b326df4c49 | 30 | int walks = 0, walka = 0, walkd = 0, walkw = 0; |
fil | 0:b6b326df4c49 | 31 | |
fil | 0:b6b326df4c49 | 32 | while (calib_cnt < 100) { |
fil | 0:b6b326df4c49 | 33 | x_cal += acc.getAccX(); |
fil | 0:b6b326df4c49 | 34 | y_cal += acc.getAccY(); |
fil | 0:b6b326df4c49 | 35 | calib_cnt++; |
fil | 0:b6b326df4c49 | 36 | wait(0.01); |
fil | 0:b6b326df4c49 | 37 | } |
fil | 0:b6b326df4c49 | 38 | x_cal = x_cal/calib_cnt; |
fil | 0:b6b326df4c49 | 39 | y_cal = y_cal/calib_cnt; |
fil | 0:b6b326df4c49 | 40 | |
fil | 0:b6b326df4c49 | 41 | while(1) { |
fil | 0:b6b326df4c49 | 42 | x = acc.getAccX(); |
fil | 0:b6b326df4c49 | 43 | y = acc.getAccY(); |
fil | 0:b6b326df4c49 | 44 | x_mouse = floor(-(x-x_cal)*10); |
fil | 0:b6b326df4c49 | 45 | y_mouse = floor(-(y-y_cal)*6); |
fil | 0:b6b326df4c49 | 46 | mouse.move(x_mouse,y_mouse); |
fil | 0:b6b326df4c49 | 47 | t = tsi.readDistance(); |
fil | 0:b6b326df4c49 | 48 | |
fil | 0:b6b326df4c49 | 49 | if (skey == 0) { |
fil | 0:b6b326df4c49 | 50 | mouse.printf("s"); |
fil | 0:b6b326df4c49 | 51 | walks = 1; |
fil | 0:b6b326df4c49 | 52 | } |
fil | 0:b6b326df4c49 | 53 | if (dkey == 0) { |
fil | 0:b6b326df4c49 | 54 | mouse.printf("d"); |
fil | 0:b6b326df4c49 | 55 | walkd = 1; |
fil | 0:b6b326df4c49 | 56 | } |
fil | 0:b6b326df4c49 | 57 | if (akey == 0){ |
fil | 0:b6b326df4c49 | 58 | mouse.printf("a"); |
fil | 0:b6b326df4c49 | 59 | walka = 1; |
fil | 0:b6b326df4c49 | 60 | } |
fil | 0:b6b326df4c49 | 61 | if (wkey == 0) { |
fil | 0:b6b326df4c49 | 62 | mouse.printf("w"); |
fil | 0:b6b326df4c49 | 63 | walkw = 1; |
fil | 0:b6b326df4c49 | 64 | } |
fil | 0:b6b326df4c49 | 65 | |
fil | 0:b6b326df4c49 | 66 | if (walks == 1 && skey == 1) { |
fil | 0:b6b326df4c49 | 67 | mouse.releaseKey('s',0); |
fil | 0:b6b326df4c49 | 68 | walks = 0; |
fil | 0:b6b326df4c49 | 69 | } |
fil | 0:b6b326df4c49 | 70 | if (walka == 1 && akey == 1) { |
fil | 0:b6b326df4c49 | 71 | mouse.releaseKey('a',0); |
fil | 0:b6b326df4c49 | 72 | walka = 0; |
fil | 0:b6b326df4c49 | 73 | } |
fil | 0:b6b326df4c49 | 74 | if (walkd == 1 && dkey == 1) { |
fil | 0:b6b326df4c49 | 75 | mouse.releaseKey('d',0); |
fil | 0:b6b326df4c49 | 76 | walkd = 0; |
fil | 0:b6b326df4c49 | 77 | } |
fil | 0:b6b326df4c49 | 78 | if (walkw == 1 && wkey == 1) { |
fil | 0:b6b326df4c49 | 79 | mouse.releaseKey('w',0); |
fil | 0:b6b326df4c49 | 80 | walkw = 0; |
fil | 0:b6b326df4c49 | 81 | } |
fil | 0:b6b326df4c49 | 82 | |
fil | 0:b6b326df4c49 | 83 | |
fil | 0:b6b326df4c49 | 84 | if (t != 0) { |
fil | 0:b6b326df4c49 | 85 | mouse.press(1); |
fil | 0:b6b326df4c49 | 86 | mouse.release(0); |
fil | 0:b6b326df4c49 | 87 | } |
fil | 0:b6b326df4c49 | 88 | else { |
fil | 0:b6b326df4c49 | 89 | mouse.release(1); |
fil | 0:b6b326df4c49 | 90 | mouse.press(0); |
fil | 0:b6b326df4c49 | 91 | } |
fil | 0:b6b326df4c49 | 92 | wait(0.001); |
fil | 0:b6b326df4c49 | 93 | } |
fil | 0:b6b326df4c49 | 94 | } |