Chris Dick
/
Gameduino_Invaders_game
Invaders game for the Gameduino
joystick.h@1:f44175dd69fd, 2012-09-29 (annotated)
- Committer:
- TheChrisyd
- Date:
- Sat Sep 29 13:01:42 2012 +0000
- Revision:
- 1:f44175dd69fd
- Parent:
- 0:8a7c58553b44
- Child:
- 2:20a89dc286d5
saved progress
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
TheChrisyd | 1:f44175dd69fd | 1 | #ifndef JOYSTICK_INCLUDED |
TheChrisyd | 1:f44175dd69fd | 2 | #define JOYSTICK_INCLUDED |
TheChrisyd | 1:f44175dd69fd | 3 | /*------------------------------------------------------------ |
TheChrisyd | 1:f44175dd69fd | 4 | Universal joystick driver for Gameduino |
TheChrisyd | 1:f44175dd69fd | 5 | |
TheChrisyd | 1:f44175dd69fd | 6 | http://www.artlum.com/gameduino/gameduino.html#joystick |
TheChrisyd | 1:f44175dd69fd | 7 | |
TheChrisyd | 1:f44175dd69fd | 8 | Important: Read the file "read_me_first.txt" *before* |
TheChrisyd | 1:f44175dd69fd | 9 | writing any code. Do it NOW! |
TheChrisyd | 1:f44175dd69fd | 10 | |
TheChrisyd | 1:f44175dd69fd | 11 | Thanks go to 'Guy" for his contributions to this |
TheChrisyd | 1:f44175dd69fd | 12 | ------------------------------------------------------------*/ |
TheChrisyd | 1:f44175dd69fd | 13 | |
TheChrisyd | 1:f44175dd69fd | 14 | //#include "WProgram.h" |
TheChrisyd | 1:f44175dd69fd | 15 | #include "arduino.h" |
TheChrisyd | 1:f44175dd69fd | 16 | class Joystick { |
TheChrisyd | 1:f44175dd69fd | 17 | byte buttons; // State of buttons, packed into a byte |
TheChrisyd | 1:f44175dd69fd | 18 | byte prev; // State of the buttons on previous read |
TheChrisyd | 1:f44175dd69fd | 19 | byte dpad; // State of Up/Down/Left/Right buttons plus some control flags |
TheChrisyd | 1:f44175dd69fd | 20 | signed char stickX,stickY;// Analogue x/y position |
TheChrisyd | 1:f44175dd69fd | 21 | char xCal,yCal; // Calibration |
TheChrisyd | 1:f44175dd69fd | 22 | public: |
TheChrisyd | 1:f44175dd69fd | 23 | // The constructor sets up the Arduino pins for input |
TheChrisyd | 1:f44175dd69fd | 24 | // and calibrates the joystick using the current position |
TheChrisyd | 1:f44175dd69fd | 25 | Joystick(); |
TheChrisyd | 1:f44175dd69fd | 26 | |
TheChrisyd | 1:f44175dd69fd | 27 | // Read the current state |
TheChrisyd | 1:f44175dd69fd | 28 | void read(); |
TheChrisyd | 1:f44175dd69fd | 29 | |
TheChrisyd | 1:f44175dd69fd | 30 | // Return "true" if analog X/Y position is available |
TheChrisyd | 1:f44175dd69fd | 31 | bool hasAnalogStick(); |
TheChrisyd | 1:f44175dd69fd | 32 | |
TheChrisyd | 1:f44175dd69fd | 33 | // Digital joystick functions |
TheChrisyd | 1:f44175dd69fd | 34 | enum button_name { |
TheChrisyd | 1:f44175dd69fd | 35 | buttonA = 0x01, |
TheChrisyd | 1:f44175dd69fd | 36 | buttonB = 0x02, |
TheChrisyd | 1:f44175dd69fd | 37 | buttonC = 0x04, |
TheChrisyd | 1:f44175dd69fd | 38 | buttonX = 0x08, |
TheChrisyd | 1:f44175dd69fd | 39 | buttonY = 0x10, |
TheChrisyd | 1:f44175dd69fd | 40 | buttonZ = 0x20, |
TheChrisyd | 1:f44175dd69fd | 41 | buttonStart = 0x40, |
TheChrisyd | 1:f44175dd69fd | 42 | buttonSelect = 0x80 |
TheChrisyd | 1:f44175dd69fd | 43 | }; |
TheChrisyd | 1:f44175dd69fd | 44 | // Test a named button |
TheChrisyd | 1:f44175dd69fd | 45 | // nb. You can combine button names to test multiple buttons at the same time |
TheChrisyd | 1:f44175dd69fd | 46 | bool isPressed(byte n) { return (buttons&n)!=0; } |
TheChrisyd | 1:f44175dd69fd | 47 | |
TheChrisyd | 1:f44175dd69fd | 48 | // This tells you if a button changed between the last two calls to "read()" |
TheChrisyd | 1:f44175dd69fd | 49 | bool changed(byte n) { return bool((buttons^prev)&n); } |
TheChrisyd | 1:f44175dd69fd | 50 | |
TheChrisyd | 1:f44175dd69fd | 51 | // Joystick up/down/left/right (or analog stick) |
TheChrisyd | 1:f44175dd69fd | 52 | bool left() { return (dpad&0x01)!=0; } |
TheChrisyd | 1:f44175dd69fd | 53 | bool right() { return (dpad&0x02)!=0; } |
TheChrisyd | 1:f44175dd69fd | 54 | bool up() { return (dpad&0x04)!=0; } |
TheChrisyd | 1:f44175dd69fd | 55 | bool down() { return (dpad&0x08)!=0; } |
TheChrisyd | 1:f44175dd69fd | 56 | |
TheChrisyd | 1:f44175dd69fd | 57 | |
TheChrisyd | 1:f44175dd69fd | 58 | // Analog joystick functions |
TheChrisyd | 1:f44175dd69fd | 59 | |
TheChrisyd | 1:f44175dd69fd | 60 | // Force the analog joystick to recalibrate itself |
TheChrisyd | 1:f44175dd69fd | 61 | void recalibrate(); |
TheChrisyd | 1:f44175dd69fd | 62 | |
TheChrisyd | 1:f44175dd69fd | 63 | // Current joystick position in range [-128..127] |
TheChrisyd | 1:f44175dd69fd | 64 | char analogX() { return stickX; } |
TheChrisyd | 1:f44175dd69fd | 65 | char analogY() { return stickY; } |
TheChrisyd | 1:f44175dd69fd | 66 | |
TheChrisyd | 1:f44175dd69fd | 67 | // For debugging - show all state onscreen at (x,y) |
TheChrisyd | 1:f44175dd69fd | 68 | void dump(int x, int y); |
TheChrisyd | 1:f44175dd69fd | 69 | }; |
TheChrisyd | 1:f44175dd69fd | 70 | |
TheChrisyd | 1:f44175dd69fd | 71 | |
TheChrisyd | 1:f44175dd69fd | 72 | // JOYSTICK_INCLUDED |
TheChrisyd | 1:f44175dd69fd | 73 | #endif |