USB HID Device that emulates a Gamecontroller

Dependencies:   mbed

The notebook page for this application is here

Committer:
wim
Date:
Sat Jan 07 21:03:54 2012 +0000
Revision:
0:5037d4be5b6d
First version

Who changed what in which revision?

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