Renato Grottesi
/
MaliUSBJoystick
USB HID Device that emulates a Gamecontroller
main.cpp@0:5037d4be5b6d, 2012-01-07 (annotated)
- Committer:
- wim
- Date:
- Sat Jan 07 21:03:54 2012 +0000
- Revision:
- 0:5037d4be5b6d
- Child:
- 1:018979eb4641
First version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wim | 0:5037d4be5b6d | 1 | #include "mbed.h" |
wim | 0:5037d4be5b6d | 2 | #include "USBMouse.h" |
wim | 0:5037d4be5b6d | 3 | #include "USBJoystick.h" |
wim | 0:5037d4be5b6d | 4 | |
wim | 0:5037d4be5b6d | 5 | //USBMouse mouse; |
wim | 0:5037d4be5b6d | 6 | USBJoystick joystick; |
wim | 0:5037d4be5b6d | 7 | |
wim | 0:5037d4be5b6d | 8 | // Variables for Heartbeat and Status monitoring |
wim | 0:5037d4be5b6d | 9 | DigitalOut myled1(LED1); |
wim | 0:5037d4be5b6d | 10 | DigitalOut myled2(LED2); |
wim | 0:5037d4be5b6d | 11 | DigitalOut myled3(LED3); |
wim | 0:5037d4be5b6d | 12 | DigitalOut heartbeatLED(LED4); |
wim | 0:5037d4be5b6d | 13 | |
wim | 0:5037d4be5b6d | 14 | Ticker heartbeat; |
wim | 0:5037d4be5b6d | 15 | Serial pc(USBTX, USBRX); // tx, rx |
wim | 0:5037d4be5b6d | 16 | |
wim | 0:5037d4be5b6d | 17 | // Heartbeat monitor |
wim | 0:5037d4be5b6d | 18 | void pulse() { |
wim | 0:5037d4be5b6d | 19 | heartbeatLED = !heartbeatLED; |
wim | 0:5037d4be5b6d | 20 | } |
wim | 0:5037d4be5b6d | 21 | |
wim | 0:5037d4be5b6d | 22 | void heartbeat_start() { |
wim | 0:5037d4be5b6d | 23 | heartbeat.attach(&pulse, 0.5); |
wim | 0:5037d4be5b6d | 24 | } |
wim | 0:5037d4be5b6d | 25 | |
wim | 0:5037d4be5b6d | 26 | void heartbeat_stop() { |
wim | 0:5037d4be5b6d | 27 | heartbeat.detach(); |
wim | 0:5037d4be5b6d | 28 | } |
wim | 0:5037d4be5b6d | 29 | |
wim | 0:5037d4be5b6d | 30 | |
wim | 0:5037d4be5b6d | 31 | int main() { |
wim | 0:5037d4be5b6d | 32 | int16_t i = 0; |
wim | 0:5037d4be5b6d | 33 | int16_t throttle = 0; |
wim | 0:5037d4be5b6d | 34 | int16_t rudder = 0; |
wim | 0:5037d4be5b6d | 35 | int16_t x = 0; |
wim | 0:5037d4be5b6d | 36 | int16_t y = 0; |
wim | 0:5037d4be5b6d | 37 | int32_t radius = 120; |
wim | 0:5037d4be5b6d | 38 | int32_t angle = 0; |
wim | 0:5037d4be5b6d | 39 | int8_t button = 0; |
wim | 0:5037d4be5b6d | 40 | int8_t hat = 0; |
wim | 0:5037d4be5b6d | 41 | |
wim | 0:5037d4be5b6d | 42 | pc.printf("Hello World!\n\r"); |
wim | 0:5037d4be5b6d | 43 | |
wim | 0:5037d4be5b6d | 44 | heartbeat_start(); |
wim | 0:5037d4be5b6d | 45 | |
wim | 0:5037d4be5b6d | 46 | while (1) { |
wim | 0:5037d4be5b6d | 47 | // Basic Joystick |
wim | 0:5037d4be5b6d | 48 | throttle = (i >> 8) & 0xFF; // value -127 .. 128 |
wim | 0:5037d4be5b6d | 49 | rudder = (i >> 8) & 0xFF; // value -127 .. 128 |
wim | 0:5037d4be5b6d | 50 | button = (i >> 8) & 0x0F; // value 0 .. 15, one bit per button |
wim | 0:5037d4be5b6d | 51 | // hat = (i >> 8) & 0x03; // value 0, 1, 2, 3 or 4 for neutral |
wim | 0:5037d4be5b6d | 52 | hat = (i >> 8) & 0x07; // value 0..7 or 8 for neutral |
wim | 0:5037d4be5b6d | 53 | i++; |
wim | 0:5037d4be5b6d | 54 | |
wim | 0:5037d4be5b6d | 55 | x = cos((double)angle*3.14/180.0)*radius; // value -127 .. 128 |
wim | 0:5037d4be5b6d | 56 | y = sin((double)angle*3.14/180.0)*radius; // value -127 .. 128 |
wim | 0:5037d4be5b6d | 57 | angle += 3; |
wim | 0:5037d4be5b6d | 58 | |
wim | 0:5037d4be5b6d | 59 | joystick.update(throttle, rudder, x, y, button, hat); |
wim | 0:5037d4be5b6d | 60 | |
wim | 0:5037d4be5b6d | 61 | wait(0.001); |
wim | 0:5037d4be5b6d | 62 | } |
wim | 0:5037d4be5b6d | 63 | |
wim | 0:5037d4be5b6d | 64 | pc.printf("Bye World!\n\r"); |
wim | 0:5037d4be5b6d | 65 | } |