A class to handle reading, scaling and filtering horizontal and vertical position, and rise/fall interrupts for the button.
Joystick.h@0:9c486d50434e, 2010-09-28 (annotated)
- Committer:
- alex89_2
- Date:
- Tue Sep 28 14:59:57 2010 +0000
- Revision:
- 0:9c486d50434e
- Child:
- 1:e55694d8a418
Release to public
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
alex89_2 | 0:9c486d50434e | 1 | //remove repetition |
alex89_2 | 0:9c486d50434e | 2 | #ifndef MBED_JOYSTICK_H |
alex89_2 | 0:9c486d50434e | 3 | #define MBED_JOYSTICK_H |
alex89_2 | 0:9c486d50434e | 4 | |
alex89_2 | 0:9c486d50434e | 5 | //required to use mbed functions |
alex89_2 | 0:9c486d50434e | 6 | #include "mbed.h" |
alex89_2 | 0:9c486d50434e | 7 | |
alex89_2 | 0:9c486d50434e | 8 | struct joyhv { |
alex89_2 | 0:9c486d50434e | 9 | double h; |
alex89_2 | 0:9c486d50434e | 10 | double v; |
alex89_2 | 0:9c486d50434e | 11 | }; |
alex89_2 | 0:9c486d50434e | 12 | |
alex89_2 | 0:9c486d50434e | 13 | /* Class: Joystick |
alex89_2 | 0:9c486d50434e | 14 | * Used for reading from an analog joystick |
alex89_2 | 0:9c486d50434e | 15 | * |
alex89_2 | 0:9c486d50434e | 16 | * Example: |
alex89_2 | 0:9c486d50434e | 17 | * > #include "mbed.h" |
alex89_2 | 0:9c486d50434e | 18 | * > Joystick joy(p20, p19, p18); |
alex89_2 | 0:9c486d50434e | 19 | */ |
alex89_2 | 0:9c486d50434e | 20 | |
alex89_2 | 0:9c486d50434e | 21 | class Joystick { |
alex89_2 | 0:9c486d50434e | 22 | public: |
alex89_2 | 0:9c486d50434e | 23 | /* Constructor: Joystick |
alex89_2 | 0:9c486d50434e | 24 | * |
alex89_2 | 0:9c486d50434e | 25 | * |
alex89_2 | 0:9c486d50434e | 26 | * Variables: |
alex89_2 | 0:9c486d50434e | 27 | * b - DigitalIn pin for button |
alex89_2 | 0:9c486d50434e | 28 | * h - AnalogIn pin for horizontal |
alex89_2 | 0:9c486d50434e | 29 | * v - AnalogIn pin for vertical |
alex89_2 | 0:9c486d50434e | 30 | */ |
alex89_2 | 0:9c486d50434e | 31 | Joystick(PinName b, PinName h, PinName v); |
alex89_2 | 0:9c486d50434e | 32 | |
alex89_2 | 0:9c486d50434e | 33 | /* Function: read |
alex89_2 | 0:9c486d50434e | 34 | * Read the joystick position, represented as a joyhv value - h and v are doubles in the range [0.0, 1.0] |
alex89_2 | 0:9c486d50434e | 35 | * |
alex89_2 | 0:9c486d50434e | 36 | * Variables: |
alex89_2 | 0:9c486d50434e | 37 | * returns - A structure of two double values representing the position of the joystick, |
alex89_2 | 0:9c486d50434e | 38 | * measured as a percentage vertically (joyhv.v) or horizontally (joyhv.h) |
alex89_2 | 0:9c486d50434e | 39 | */ |
alex89_2 | 0:9c486d50434e | 40 | joyhv read(); |
alex89_2 | 0:9c486d50434e | 41 | |
alex89_2 | 0:9c486d50434e | 42 | /* Function: getV |
alex89_2 | 0:9c486d50434e | 43 | * Read the joystick's vertical position, represented as a double value in the range [0.0, 1.0] |
alex89_2 | 0:9c486d50434e | 44 | * |
alex89_2 | 0:9c486d50434e | 45 | * Variables: |
alex89_2 | 0:9c486d50434e | 46 | * returns - A double values representing the vertical position of the joystick, |
alex89_2 | 0:9c486d50434e | 47 | * measured as a percentage |
alex89_2 | 0:9c486d50434e | 48 | */ |
alex89_2 | 0:9c486d50434e | 49 | double getV(); |
alex89_2 | 0:9c486d50434e | 50 | |
alex89_2 | 0:9c486d50434e | 51 | /* Function: getH |
alex89_2 | 0:9c486d50434e | 52 | * Read the joystick's horizontal position, represented as a double value in the range [0.0, 1.0] |
alex89_2 | 0:9c486d50434e | 53 | * |
alex89_2 | 0:9c486d50434e | 54 | * Variables: |
alex89_2 | 0:9c486d50434e | 55 | * returns - A double values representing the horizontal position of the joystick, |
alex89_2 | 0:9c486d50434e | 56 | * measured as a percentage |
alex89_2 | 0:9c486d50434e | 57 | */ |
alex89_2 | 0:9c486d50434e | 58 | double getH(); |
alex89_2 | 0:9c486d50434e | 59 | |
alex89_2 | 0:9c486d50434e | 60 | /* Function: rise |
alex89_2 | 0:9c486d50434e | 61 | * Attach a function to call when a rising edge occurs on the button input |
alex89_2 | 0:9c486d50434e | 62 | * |
alex89_2 | 0:9c486d50434e | 63 | * Variables: |
alex89_2 | 0:9c486d50434e | 64 | * fptr - A pointer to a void function, or 0 to set as none |
alex89_2 | 0:9c486d50434e | 65 | */ |
alex89_2 | 0:9c486d50434e | 66 | void rise (void (*fptr)(void)); |
alex89_2 | 0:9c486d50434e | 67 | |
alex89_2 | 0:9c486d50434e | 68 | /* Function: fall |
alex89_2 | 0:9c486d50434e | 69 | * Attach a function to call when a falling edge occurs on the button input |
alex89_2 | 0:9c486d50434e | 70 | * |
alex89_2 | 0:9c486d50434e | 71 | * Variables: |
alex89_2 | 0:9c486d50434e | 72 | * fptr - A pointer to a void function, or 0 to set as none |
alex89_2 | 0:9c486d50434e | 73 | */ |
alex89_2 | 0:9c486d50434e | 74 | void fall (void (*fptr)(void)); |
alex89_2 | 0:9c486d50434e | 75 | |
alex89_2 | 0:9c486d50434e | 76 | /* Function: operator joyhv |
alex89_2 | 0:9c486d50434e | 77 | * An operator shorthand for <read()> |
alex89_2 | 0:9c486d50434e | 78 | * |
alex89_2 | 0:9c486d50434e | 79 | * The joyhv() operator can be used as a shorthand for <read()> to simplify common code sequences |
alex89_2 | 0:9c486d50434e | 80 | * |
alex89_2 | 0:9c486d50434e | 81 | */ |
alex89_2 | 0:9c486d50434e | 82 | operator joyhv (); |
alex89_2 | 0:9c486d50434e | 83 | |
alex89_2 | 0:9c486d50434e | 84 | |
alex89_2 | 0:9c486d50434e | 85 | joyhv scale(joyhv read); |
alex89_2 | 0:9c486d50434e | 86 | joyhv filter(joyhv read, double factor); |
alex89_2 | 0:9c486d50434e | 87 | |
alex89_2 | 0:9c486d50434e | 88 | |
alex89_2 | 0:9c486d50434e | 89 | private: |
alex89_2 | 0:9c486d50434e | 90 | InterruptIn _b; |
alex89_2 | 0:9c486d50434e | 91 | AnalogIn _h; |
alex89_2 | 0:9c486d50434e | 92 | AnalogIn _v; |
alex89_2 | 0:9c486d50434e | 93 | }; |
alex89_2 | 0:9c486d50434e | 94 | |
alex89_2 | 0:9c486d50434e | 95 | |
alex89_2 | 0:9c486d50434e | 96 | #endif |