Adjusts the great pinscape controller to work with a cheap linear potentiometer instead of the expensive CCD array

Dependencies:   USBDevice mbed

Fork of Pinscape_Controller by Mike R

Revision:
3:3514575d4f86
Parent:
0:5acbbe3f4cf4
Child:
4:02c7cd7b2183
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/USBJoystick/USBJoystick.h	Wed Jul 23 17:53:28 2014 +0000
@@ -0,0 +1,165 @@
+/* USBJoystick.h */
+/* USB device example: Joystick*/
+/* Copyright (c) 2011 ARM Limited. All rights reserved. */
+/* Modified Mouse code for Joystick - WH 2012 */
+ 
+#ifndef USBJOYSTICK_H
+#define USBJOYSTICK_H
+ 
+#include "USBHID.h"
+ 
+#define REPORT_ID_JOYSTICK  4
+ 
+/* Common usage */
+enum JOY_BUTTON {
+     JOY_B0 = 0x0001,
+     JOY_B1 = 0x0002,
+     JOY_B2 = 0x0004,
+     JOY_B3 = 0x0008,
+     JOY_B4 = 0x0010,
+     JOY_B5 = 0x0020,
+     JOY_B6 = 0x0040,
+     JOY_B7 = 0x0080,
+     JOY_B8 = 0x0100,
+     JOY_B9 = 0x0200,
+     JOY_B10 = 0x0400,
+     JOY_B11 = 0x0800,
+     JOY_B12 = 0x1000,
+     JOY_B13 = 0x2000,
+     JOY_B14 = 0x4000,
+     JOY_B15 = 0x8000
+};
+ 
+/* X, Y and T limits */
+/* These values do not directly map to screen pixels */
+/* Zero may be interpreted as meaning 'no movement' */
+#define JX_MIN_ABS    (-127)     /*!< The maximum value that we can move to the left on the x-axis */
+#define JY_MIN_ABS    (-127)     /*!< The maximum value that we can move up on the y-axis */
+#define JZ_MIN_ABS    (-127)     /*!< The minimum value for the Z axis */
+#define JX_MAX_ABS    (127)      /*!< The maximum value that we can move to the right on the x-axis */
+#define JY_MAX_ABS    (127)      /*!< The maximum value that we can move down on the y-axis */
+#define JZ_MAX_ABS    (127)      /*!< The maximum value for the Z axis */
+ 
+/**
+ *
+ * USBJoystick example
+ * @code
+ * #include "mbed.h"
+ * #include "USBJoystick.h"
+ *
+ * USBJoystick joystick;
+ *
+ * int main(void)
+ * {
+ *   while (1)
+ *   {
+ *      joystick.move(20, 0);
+ *      wait(0.5);
+ *   }
+ * }
+ *
+ * @endcode
+ *
+ *
+ * @code
+ * #include "mbed.h"
+ * #include "USBJoystick.h"
+ * #include <math.h>
+ *
+ * USBJoystick joystick;
+ *
+ * int main(void)
+ * {   
+ *   while (1) {
+ *       // Basic Joystick
+ *       joystick.update(tx, y, z, buttonBits);
+ *       wait(0.001);
+ *   }
+ * }
+ * @endcode
+ */
+ 
+ 
+class USBJoystick: public USBHID {
+   public:
+ 
+        /**
+         *   Constructor
+         *
+         * @param vendor_id Your vendor_id (default: 0x1234)
+         * @param product_id Your product_id (default: 0x0002)
+         * @param product_release Your product_release (default: 0x0001)
+         */
+         USBJoystick(uint16_t vendor_id = 0x1234, uint16_t product_id = 0x0100, uint16_t product_release = 0x0001): 
+             USBHID(8, 8, vendor_id, product_id, product_release, false)
+             { 
+                 _init();
+                 connect();
+             };
+         
+         /**
+         * Write a state of the mouse
+         *
+         * @param x x-axis position
+         * @param y y-axis position
+         * @param z z-axis position
+         * @param buttons buttons state, as a bit mask (combination with '|' of JOY_Bn values)
+         * @returns true if there is no error, false otherwise
+         */
+         bool update(int16_t x, int16_t y, int16_t z, int16_t rx, int16_t ry, uint16_t buttons);
+ 
+         /**
+         * Write a state of the mouse
+         *
+         * @returns true if there is no error, false otherwise
+         */
+         bool update();
+ 
+         /**
+         * Move the cursor to (x, y)
+         *
+         * @param x x-axis position
+         * @param y y-axis position
+         * @returns true if there is no error, false otherwise
+         */
+         bool move(int16_t x, int16_t y);
+         
+         /**
+         * Set the z position
+         *
+         * @param z z-axis osition
+         */
+         bool setZ(int16_t z);
+         
+         /**
+         * Press one or several buttons
+         *
+         * @param buttons button state, as a bitwise combination of JOY_Bn values
+         * @returns true if there is no error, false otherwise
+         */
+         bool buttons(uint16_t buttons);
+         
+         /*
+         * To define the report descriptor. Warning: this method has to store the length of the report descriptor in reportLength.
+         *
+         * @returns pointer to the report descriptor
+         */
+         virtual uint8_t * reportDesc();
+ 
+         /* USB descriptor string overrides */
+         virtual uint8_t *stringImanufacturerDesc();
+         virtual uint8_t *stringIserialDesc();
+         virtual uint8_t *stringIproductDesc();
+ 
+     private:
+         int8_t _x;                       
+         int8_t _y;     
+         int8_t _z;
+         int8_t _rx;
+         int8_t _ry;
+         uint16_t _buttons;
+         
+         void _init();                 
+};
+ 
+#endif
\ No newline at end of file