“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

Committer:
alex_20
Date:
Thu May 06 12:04:45 2021 +0000
Revision:
9:6f060f495536
Parent:
0:be41a15e7a86
Race Collision for ELEC2645

Who changed what in which revision?

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