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

Committer:
fil
Date:
Mon Sep 29 01:52:18 2014 +0000
Revision:
0:b6b326df4c49
final commit

Who changed what in which revision?

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