Demo for USBJoystick updated for 32 buttons.

Dependencies:   USBDevice USBJoystick_SIM mbed USBJoystick_2

Dependents:   USBJoystick_2

Fork of USBJoystick_HelloWorld2 by Wim Huiskamp

Revision:
4:dc3556a31262
Parent:
3:3ddaf1227e1b
--- a/main.cpp	Sun Sep 16 09:57:12 2018 +0000
+++ b/main.cpp	Sat Sep 29 09:28:24 2018 +0000
@@ -35,12 +35,12 @@
 DigitalOut myled3(LED3);
 DigitalOut heartbeatLED(LED1);
 
-AnalogIn inX(A0);
-AnalogIn inY(A1);
-AnalogIn inRudder(A2);
-AnalogIn inThrottle(A3);
-AnalogIn inBreaks(A4);
-AnalogIn inFlaps(A5);
+AnalogIn inX(A0);               // X
+AnalogIn inY(A1);               // Y
+AnalogIn inRudder(A2);          // Rz (Rudder)
+AnalogIn inThrottle(A3);        // Slider (Throttle)
+AnalogIn inBreaks(A4);          // Z (Breaks)
+AnalogIn inFlaps(A5);           // Rx (Flaps)
 
 Ticker heartbeat;
 Serial pc(USBTX, USBRX); // tx, rx
@@ -91,7 +91,7 @@
 void initButtons()
 {
     // create the digital inputs
-    for (int i = 0 ; i < countof(buttonDigIn) ; ++i)
+    for (int i = 0 ; i < countof(buttonDigIn) ; i++)
     {
         if (i < countof(buttonMap) && buttonMap[i] != NC)
             buttonDigIn[i] = new DigitalIn(buttonMap[i]);
@@ -120,7 +120,7 @@
     uint32_t bit = 1;
     DigitalIn **di = buttonDigIn;
     ButtonState *bs = buttonState;
-    for (int i = 0 ; i < countof(buttonDigIn) ; ++i, ++di, ++bs, bit <<= 1)
+    for (int i = 0 ; i < countof(buttonDigIn) ; i++, di++, bs++, bit <<= 1)
     {
         // read this button
         if (*di != 0)
@@ -157,6 +157,7 @@
             // if it's pressed, OR its bit into the state
             if (bs->pressed)
                 buttons |= bit;
+            pc.printf("Buttons: %d\n", buttons);
         }
     }
     
@@ -184,13 +185,16 @@
 void initHat()
 {
     // create the digital inputs
-    for (int i = 0 ; i < countof(hatDigIn) ; ++i)
+    for (int i = 0 ; i <= countof(hatDigIn) ; i++)
     {
         if (i < countof(hatMap) && hatMap[i] != NC)
             hatDigIn[i] = new DigitalIn(hatMap[i]);
         else
             hatDigIn[i] = 0;
     }
+    
+    // start the hat timer
+    hatTimer.start();
 }
 
 // read the hat button input state
@@ -209,7 +213,7 @@
     uint8_t bit = 1;
     DigitalIn **di = hatDigIn;
     HatState *hs = hatState;
-    for (int i = 0 ; i < countof(hatDigIn) ; ++i, ++di, ++hs, bit <<= 1)
+    for (int i = 0 ; i < countof(hatDigIn) ; i++, di++, hs++)
     {
         // read this button
         if (*di != 0)
@@ -246,8 +250,9 @@
             // if it's pressed, OR its bit into the state
             if (hs->pressed)
                 hat |= bit;
-                pc.printf("Hat: %d\n", hat);
+            pc.printf("Hat: %d\n", hat);
         }
+        bit <<= 1;
     }
     
     // translate values read to descriptor values
@@ -305,34 +310,24 @@
 #endif
     
     // return the new button list
-    //pc.printf("Hat: %d", hat);
+    pc.printf("Return Hat: %d", hat);
     return hat;
 }
 
 int main()
 {
-    //uint16_t i = 0;
-    int16_t throttle = 0;
-    int16_t rudder = 0;
-    int16_t breaks = 0;
-    int16_t flaps = 0;
-    int16_t x = 0;
-    int16_t y = 0;
-    //int32_t radius = 120;
-    //int32_t angle = 0;
-    //uint8_t tmp = 0;
-    //uint32_t tmp = 1;
+    uint16_t x = 0;
+    uint16_t y = 0;
+    uint16_t breaks = 0;
+    uint16_t flaps = 0;
+    uint16_t rudder = 0;
+    uint16_t throttle = 0;
+    uint8_t hat = 0;
     uint32_t buttons = 0;
-    uint8_t hat = 0;
     
-#if (SBYTE == 1)
-    const int16_t l = 127;
-    const int16_t m = 256;
-#endif
-#if (SWORD == 1)
-    const int16_t l = 32767;
-    const int16_t m = 65535;
-#endif
+
+//    const int16_t l = 32767;
+    const uint16_t m = 65535;
 
     pc.printf("Hello World from Joystick!\n\r");
 
@@ -341,92 +336,22 @@
     
     heartbeat_start();
 
+    pc.printf("x, y, breaks, flaps, rudder, throttle, hat, buttons\n\n\r");
+
     while (1) {
-        // Basic Joystick
-        // throttle = (i >> 8) & 0xFF; // value -127 .. 128
-        // rudder = (i >> 8) & 0xFF;   // value -127 .. 128
-        // breaks = (i >> 8) & 0xFF;   // value 0 .. 255
-        // flaps = (i >> 8) & 0xFF;   // value 0 .. 255
 
-/*
-#if (BUTTONS4 == 1)
-        buttons = (i >> 8) & 0x0F;   // value    0 ..  15, one bit per button
-#endif
-#if (BUTTONS8 == 1)
-        buttons = (i >> 8) & 0xFF;   // value    0 .. 255, one bit per button
-#endif
-#if (BUTTONS32 == 1)
-        //tmp     = (i >> 8) & 0xFF;   // value    0 .. 255, one bit per button
-        //buttons =           (( tmp <<  0) & 0x000000FF);
-        //buttons = buttons | ((~tmp <<  8) & 0x0000FF00);
-        //buttons = buttons | (( tmp << 16) & 0x00FF0000);
-        //buttons = buttons | ((~tmp << 24) & 0xFF000000);//
-        buttons = tmp;
-        tmp += 1;
-        pc.printf("Tmp: %u\n", tmp);
-#endif
-
-#if (HAT4 == 1)
-        hat    = (i >> 8) & 0x03;   // value 0, 1, 2, 3 or 4 for neutral
-#endif
-#if (HAT8 == 1)
-        hat    = (i >> 8) & 0x07;   // value 0..7 or 8 for neutral
-#endif
-        i++;
-
-        //x = cos((double)angle*3.14/180.0)*radius;  // value -127 .. 128
-        //y = sin((double)angle*3.14/180.0)*radius;  // value -127 .. 128
-        //angle += 3;
-*/        
-
+        x = inX.read() * m;
+        y = inY.read() * m;
+        breaks = inBreaks.read() * m;
+        flaps = inFlaps.read() * m;
+        rudder = inRudder.read() * m;
+        throttle = inThrottle.read() * m;
+        hat = readHat();
         buttons = readButtons();
-        hat = readHat();
-        //pc.printf("Hat: %d\n", hat);
-
         
-        throttle = inThrottle.read() * m - l;
-        if(throttle < -l)
-            throttle = -l;
-        if(throttle > l)
-            throttle = l;
-        rudder = inRudder.read() * m - l;
-        if(rudder < -l)
-            rudder = -l;
-        if(rudder > l)
-            rudder = l;
-        breaks = inBreaks.read() * m - l;
-        if(breaks < -l)
-            breaks = -l;
-        if(breaks > l)
-            breaks = l;
-        flaps = inFlaps.read() * m - l;
-        if(flaps < -l)
-            flaps = -l;
-        if(flaps > l)
-            flaps = l;
+        pc.printf("%d, %d, %d, %d, %d, %d, %d, %d\n\r", x, y, breaks, flaps, rudder, throttle, hat, buttons);
 
-        x = inX.read() * m - l;
-        if(x < -l)
-            x = -l;
-        if(x > l)
-            x = l;
-            
-        y = inY.read() * m - l;
-        if(y < -l)
-            y = -l;
-        if(y > l)
-            y = l;
-
-
-/*        x = int(((double)inX.read() - 0.5) * 254);
-        y = int(((double)inY.read() - 0.5) * 254);
-        flaps = int(((double)inFlaps.read() - 0.5) * 254);
-        breaks = int(((double)inBreaks.read() - 0.5) * 254);
-        rudder = int(((double)inRudder.read() - 0.5) * 254);
-        throttle = int(((double)inThrottle.read() - 0.5) * 254);
-*/
-
-        joystick.update(throttle, rudder, breaks, flaps, x, y, buttons, hat);
+        joystick.update(x, y, breaks, flaps, rudder, throttle, hat, buttons);
         wait(0.01);
     }