“Race Collision” is a one player game in which a truck has to avoid “particles” that appear on the road. By the use of the joystick, the player can guide themselves through the menu system to start the game. The truck is the main element of the game and it can be moved from side to side with the joystick. The road curves randomly from time to time and the player has to be careful to keep the truck within the road boundaries. Particles appear on the screen at random positions and 4 collisions lead to the end of the game.
Dependencies: ELEC2645_JoystickLCD_LPC1768_2021
lib/Joystick.h@0:be41a15e7a86, 2020-12-11 (annotated)
- Committer:
- eencae
- Date:
- Fri Dec 11 12:25:25 2020 +0000
- Revision:
- 0:be41a15e7a86
Initial Commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eencae | 0:be41a15e7a86 | 1 | #ifndef JOYSTICK_H |
eencae | 0:be41a15e7a86 | 2 | #define JOYSTICK_H |
eencae | 0:be41a15e7a86 | 3 | |
eencae | 0:be41a15e7a86 | 4 | #include "mbed.h" |
eencae | 0:be41a15e7a86 | 5 | |
eencae | 0:be41a15e7a86 | 6 | // this value can be tuned to alter tolerance of joystick movement |
eencae | 0:be41a15e7a86 | 7 | #define TOL 0.1f |
eencae | 0:be41a15e7a86 | 8 | #define RAD2DEG 57.2957795131f |
eencae | 0:be41a15e7a86 | 9 | |
eencae | 0:be41a15e7a86 | 10 | enum Direction { |
eencae | 0:be41a15e7a86 | 11 | CENTRE, // 0 |
eencae | 0:be41a15e7a86 | 12 | N, // 1 |
eencae | 0:be41a15e7a86 | 13 | NE, // 2 |
eencae | 0:be41a15e7a86 | 14 | E, // 3 |
eencae | 0:be41a15e7a86 | 15 | SE, // 4 |
eencae | 0:be41a15e7a86 | 16 | S, // 5 |
eencae | 0:be41a15e7a86 | 17 | SW, // 6 |
eencae | 0:be41a15e7a86 | 18 | W, // 7 |
eencae | 0:be41a15e7a86 | 19 | NW // 8 |
eencae | 0:be41a15e7a86 | 20 | }; |
eencae | 0:be41a15e7a86 | 21 | |
eencae | 0:be41a15e7a86 | 22 | struct Vector2D { |
eencae | 0:be41a15e7a86 | 23 | float x; |
eencae | 0:be41a15e7a86 | 24 | float y; |
eencae | 0:be41a15e7a86 | 25 | }; |
eencae | 0:be41a15e7a86 | 26 | |
eencae | 0:be41a15e7a86 | 27 | struct Polar { |
eencae | 0:be41a15e7a86 | 28 | float mag; |
eencae | 0:be41a15e7a86 | 29 | float angle; |
eencae | 0:be41a15e7a86 | 30 | }; |
eencae | 0:be41a15e7a86 | 31 | |
eencae | 0:be41a15e7a86 | 32 | /** Joystick Class |
eencae | 0:be41a15e7a86 | 33 | @author Dr Craig A. Evans, University of Leeds |
eencae | 0:be41a15e7a86 | 34 | @brief Library for interfacing with analogue joystick |
eencae | 0:be41a15e7a86 | 35 | |
eencae | 0:be41a15e7a86 | 36 | Example: |
eencae | 0:be41a15e7a86 | 37 | |
eencae | 0:be41a15e7a86 | 38 | @code |
eencae | 0:be41a15e7a86 | 39 | |
eencae | 0:be41a15e7a86 | 40 | #include "mbed.h" |
eencae | 0:be41a15e7a86 | 41 | #include "Joystick.h" |
eencae | 0:be41a15e7a86 | 42 | |
eencae | 0:be41a15e7a86 | 43 | // y x button |
eencae | 0:be41a15e7a86 | 44 | Joystick joystick(PTB11,PTB10); |
eencae | 0:be41a15e7a86 | 45 | |
eencae | 0:be41a15e7a86 | 46 | int main() { |
eencae | 0:be41a15e7a86 | 47 | |
eencae | 0:be41a15e7a86 | 48 | joystick.init(); |
eencae | 0:be41a15e7a86 | 49 | |
eencae | 0:be41a15e7a86 | 50 | while(1) { |
eencae | 0:be41a15e7a86 | 51 | |
eencae | 0:be41a15e7a86 | 52 | Vector2D coord = joystick.get_coord(); |
eencae | 0:be41a15e7a86 | 53 | printf("Coord = %f,%f\n",coord.x,coord.y); |
eencae | 0:be41a15e7a86 | 54 | |
eencae | 0:be41a15e7a86 | 55 | Vector2D mapped_coord = joystick.get_mapped_coord(); |
eencae | 0:be41a15e7a86 | 56 | printf("Mapped coord = %f,%f\n",mapped_coord.x,mapped_coord.y); |
eencae | 0:be41a15e7a86 | 57 | |
eencae | 0:be41a15e7a86 | 58 | float mag = joystick.get_mag(); |
eencae | 0:be41a15e7a86 | 59 | float angle = joystick.get_angle(); |
eencae | 0:be41a15e7a86 | 60 | printf("Mag = %f Angle = %f\n",mag,angle); |
eencae | 0:be41a15e7a86 | 61 | |
eencae | 0:be41a15e7a86 | 62 | Direction d = joystick.get_direction(); |
eencae | 0:be41a15e7a86 | 63 | printf("Direction = %i\n",d); |
eencae | 0:be41a15e7a86 | 64 | |
eencae | 0:be41a15e7a86 | 65 | |
eencae | 0:be41a15e7a86 | 66 | wait(0.5); |
eencae | 0:be41a15e7a86 | 67 | } |
eencae | 0:be41a15e7a86 | 68 | |
eencae | 0:be41a15e7a86 | 69 | |
eencae | 0:be41a15e7a86 | 70 | } |
eencae | 0:be41a15e7a86 | 71 | |
eencae | 0:be41a15e7a86 | 72 | * @endcode |
eencae | 0:be41a15e7a86 | 73 | */ |
eencae | 0:be41a15e7a86 | 74 | class Joystick |
eencae | 0:be41a15e7a86 | 75 | { |
eencae | 0:be41a15e7a86 | 76 | public: |
eencae | 0:be41a15e7a86 | 77 | |
eencae | 0:be41a15e7a86 | 78 | // y-pot x-pot |
eencae | 0:be41a15e7a86 | 79 | Joystick(PinName vertPin,PinName horizPin); |
eencae | 0:be41a15e7a86 | 80 | |
eencae | 0:be41a15e7a86 | 81 | void init(); // needs to be called at start with joystick centred |
eencae | 0:be41a15e7a86 | 82 | float get_mag(); // polar |
eencae | 0:be41a15e7a86 | 83 | float get_angle(); // polar |
eencae | 0:be41a15e7a86 | 84 | Vector2D get_coord(); // cartesian co-ordinates x,y |
eencae | 0:be41a15e7a86 | 85 | Vector2D get_mapped_coord(); // x,y mapped to circle |
eencae | 0:be41a15e7a86 | 86 | Direction get_direction(); // N,NE,E,SE etc. |
eencae | 0:be41a15e7a86 | 87 | Polar get_polar(); // mag and angle in struct form |
eencae | 0:be41a15e7a86 | 88 | |
eencae | 0:be41a15e7a86 | 89 | private: |
eencae | 0:be41a15e7a86 | 90 | |
eencae | 0:be41a15e7a86 | 91 | AnalogIn *vert; |
eencae | 0:be41a15e7a86 | 92 | AnalogIn *horiz; |
eencae | 0:be41a15e7a86 | 93 | |
eencae | 0:be41a15e7a86 | 94 | // centred x,y values |
eencae | 0:be41a15e7a86 | 95 | float _x0; |
eencae | 0:be41a15e7a86 | 96 | float _y0; |
eencae | 0:be41a15e7a86 | 97 | |
eencae | 0:be41a15e7a86 | 98 | }; |
eencae | 0:be41a15e7a86 | 99 | |
eencae | 0:be41a15e7a86 | 100 | #endif |