Library for communicating with a Wii classic controller using the I2C bus.
Dependents: WiiClassicControllerTest
Note that you will also need the CommonTypes library to use this.
Get it here:http://mbed.org/users/RichardE/code/CommonTypes/
WiiClassicControllerWithCalibration.h@2:52c4a0b3a509, 2013-06-30 (annotated)
- Committer:
- RichardE
- Date:
- Sun Jun 30 12:05:27 2013 +0000
- Revision:
- 2:52c4a0b3a509
- Child:
- 3:ecae3d286a99
Added WiiClassicControllerWithCalibration class. Scale and offset are present but there is currently no way to perform a calibration.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RichardE | 2:52c4a0b3a509 | 1 | /* |
RichardE | 2:52c4a0b3a509 | 2 | * SOURCE FILE : WiiClassicControllerWithCalibration.h |
RichardE | 2:52c4a0b3a509 | 3 | * |
RichardE | 2:52c4a0b3a509 | 4 | * Definition of class WiiClassicControllerWithCalibration. |
RichardE | 2:52c4a0b3a509 | 5 | * |
RichardE | 2:52c4a0b3a509 | 6 | */ |
RichardE | 2:52c4a0b3a509 | 7 | |
RichardE | 2:52c4a0b3a509 | 8 | #ifndef WiiClassicControllerWithCalibrationDefined |
RichardE | 2:52c4a0b3a509 | 9 | |
RichardE | 2:52c4a0b3a509 | 10 | #define WiiClassicControllerWithCalibrationDefined |
RichardE | 2:52c4a0b3a509 | 11 | |
RichardE | 2:52c4a0b3a509 | 12 | #include "WiiClassicController.h" |
RichardE | 2:52c4a0b3a509 | 13 | |
RichardE | 2:52c4a0b3a509 | 14 | /// Derived from WiiClassicController but with calibrated analogue inputs. |
RichardE | 2:52c4a0b3a509 | 15 | class WiiClassicControllerWithCalibration : public WiiClassicController { |
RichardE | 2:52c4a0b3a509 | 16 | |
RichardE | 2:52c4a0b3a509 | 17 | public : |
RichardE | 2:52c4a0b3a509 | 18 | |
RichardE | 2:52c4a0b3a509 | 19 | /// Enumeration of all the analogue inputs on the Wii classic controller. |
RichardE | 2:52c4a0b3a509 | 20 | enum AnaIn { |
RichardE | 2:52c4a0b3a509 | 21 | LeftJoyX, |
RichardE | 2:52c4a0b3a509 | 22 | LeftJoyY, |
RichardE | 2:52c4a0b3a509 | 23 | RightJoyX, |
RichardE | 2:52c4a0b3a509 | 24 | RightJoyY, |
RichardE | 2:52c4a0b3a509 | 25 | LeftTrigger, |
RichardE | 2:52c4a0b3a509 | 26 | RightTrigger, |
RichardE | 2:52c4a0b3a509 | 27 | AnaInCount // MUST COME LAST! |
RichardE | 2:52c4a0b3a509 | 28 | }; |
RichardE | 2:52c4a0b3a509 | 29 | |
RichardE | 2:52c4a0b3a509 | 30 | /** Constructor |
RichardE | 2:52c4a0b3a509 | 31 | * @param sda pin to use for SDA. |
RichardE | 2:52c4a0b3a509 | 32 | * @param scl pin to use for SCL. |
RichardE | 2:52c4a0b3a509 | 33 | */ |
RichardE | 2:52c4a0b3a509 | 34 | WiiClassicControllerWithCalibration( PinName sda, PinName scl ); |
RichardE | 2:52c4a0b3a509 | 35 | |
RichardE | 2:52c4a0b3a509 | 36 | /** Destructor |
RichardE | 2:52c4a0b3a509 | 37 | */ |
RichardE | 2:52c4a0b3a509 | 38 | virtual ~WiiClassicControllerWithCalibration(); |
RichardE | 2:52c4a0b3a509 | 39 | |
RichardE | 2:52c4a0b3a509 | 40 | /** Set scaling for a particular analogue input. |
RichardE | 2:52c4a0b3a509 | 41 | * @param m scale (multiplier) for this analogue input. |
RichardE | 2:52c4a0b3a509 | 42 | * @param c offset for this analogue input. |
RichardE | 2:52c4a0b3a509 | 43 | */ |
RichardE | 2:52c4a0b3a509 | 44 | void SetScaling( AnaIn input, float m, float c ); |
RichardE | 2:52c4a0b3a509 | 45 | |
RichardE | 2:52c4a0b3a509 | 46 | /** Get calibrated left joystick X reading. |
RichardE | 2:52c4a0b3a509 | 47 | * @returns a reading between -1 and +1. |
RichardE | 2:52c4a0b3a509 | 48 | */ |
RichardE | 2:52c4a0b3a509 | 49 | float GetCalLJoyX( void ) const; |
RichardE | 2:52c4a0b3a509 | 50 | |
RichardE | 2:52c4a0b3a509 | 51 | /** Get calibrated left joystick Y reading. |
RichardE | 2:52c4a0b3a509 | 52 | * @returns a reading between -1 and +1. |
RichardE | 2:52c4a0b3a509 | 53 | */ |
RichardE | 2:52c4a0b3a509 | 54 | float GetCalLJoyY( void ) const; |
RichardE | 2:52c4a0b3a509 | 55 | |
RichardE | 2:52c4a0b3a509 | 56 | /** Get calibrated right joystick X reading. |
RichardE | 2:52c4a0b3a509 | 57 | * @returns a reading between -1 and +1. |
RichardE | 2:52c4a0b3a509 | 58 | */ |
RichardE | 2:52c4a0b3a509 | 59 | float GetCalRJoyX( void ) const; |
RichardE | 2:52c4a0b3a509 | 60 | |
RichardE | 2:52c4a0b3a509 | 61 | /** Get calibrated right joystick Y reading. |
RichardE | 2:52c4a0b3a509 | 62 | * @returns a reading between -1 and +1. |
RichardE | 2:52c4a0b3a509 | 63 | */ |
RichardE | 2:52c4a0b3a509 | 64 | float GetCalRJoyY( void ) const; |
RichardE | 2:52c4a0b3a509 | 65 | |
RichardE | 2:52c4a0b3a509 | 66 | /** Get calibrated left trigger reading. |
RichardE | 2:52c4a0b3a509 | 67 | * @returns a reading between 0 and +1. |
RichardE | 2:52c4a0b3a509 | 68 | */ |
RichardE | 2:52c4a0b3a509 | 69 | float GetCalLeftTrigger( void ) const; |
RichardE | 2:52c4a0b3a509 | 70 | |
RichardE | 2:52c4a0b3a509 | 71 | /** Get calibrated right trigger reading. |
RichardE | 2:52c4a0b3a509 | 72 | * @returns a reading between 0 and +1. |
RichardE | 2:52c4a0b3a509 | 73 | */ |
RichardE | 2:52c4a0b3a509 | 74 | float GetCalRightTrigger( void ) const; |
RichardE | 2:52c4a0b3a509 | 75 | |
RichardE | 2:52c4a0b3a509 | 76 | private : |
RichardE | 2:52c4a0b3a509 | 77 | |
RichardE | 2:52c4a0b3a509 | 78 | // Record for each analogue input. |
RichardE | 2:52c4a0b3a509 | 79 | class AnaInRec { |
RichardE | 2:52c4a0b3a509 | 80 | public : |
RichardE | 2:52c4a0b3a509 | 81 | float Scale; |
RichardE | 2:52c4a0b3a509 | 82 | float Offset; |
RichardE | 2:52c4a0b3a509 | 83 | }; |
RichardE | 2:52c4a0b3a509 | 84 | |
RichardE | 2:52c4a0b3a509 | 85 | // Records for all analogue inputs. |
RichardE | 2:52c4a0b3a509 | 86 | AnaInRec records[ (int)AnaInCount ]; |
RichardE | 2:52c4a0b3a509 | 87 | |
RichardE | 2:52c4a0b3a509 | 88 | /** Get scaled reading. |
RichardE | 2:52c4a0b3a509 | 89 | * @param input analogue input to scale. |
RichardE | 2:52c4a0b3a509 | 90 | * @param raw raw readings in counts. |
RichardE | 2:52c4a0b3a509 | 91 | * @returns scaled reading. |
RichardE | 2:52c4a0b3a509 | 92 | */ |
RichardE | 2:52c4a0b3a509 | 93 | float GetScaled( AnaIn input, UInt8 raw ) const; |
RichardE | 2:52c4a0b3a509 | 94 | |
RichardE | 2:52c4a0b3a509 | 95 | }; |
RichardE | 2:52c4a0b3a509 | 96 | |
RichardE | 2:52c4a0b3a509 | 97 | #endif |
RichardE | 2:52c4a0b3a509 | 98 | |
RichardE | 2:52c4a0b3a509 | 99 | /* END of WiiClassicControllerWithCalibration.h */ |
RichardE | 2:52c4a0b3a509 | 100 |