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/

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?

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