ELEC2645 Embedded Systems Project (JOYSTICK)

Dependencies:   N5110 SDFileSystem mbed

Committer:
wuchyi
Date:
Sat May 07 14:35:21 2016 +0000
Revision:
2:537b8388dc6a
Child:
3:cea8b85dbbdd
final1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wuchyi 2:537b8388dc6a 1 /**
wuchyi 2:537b8388dc6a 2 @file main.h
wuchyi 2:537b8388dc6a 3 @brief Header file containing functions prototypes, defines and global variables.
wuchyi 2:537b8388dc6a 4 @brief Revision 1.0.
wuchyi 2:537b8388dc6a 5 @author Wu Chyi Woon
wuchyi 2:537b8388dc6a 6 @date May 2015
wuchyi 2:537b8388dc6a 7 */
wuchyi 2:537b8388dc6a 8
wuchyi 2:537b8388dc6a 9 #include "mbed.h"
wuchyi 2:537b8388dc6a 10 #include "N5110.h"
wuchyi 2:537b8388dc6a 11 #include "SDFileSystem.h"
wuchyi 2:537b8388dc6a 12 #define JOYSTICK_TOLERANCE 0.1 ///direction tolerance of joystick
wuchyi 2:537b8388dc6a 13
wuchyi 2:537b8388dc6a 14 /**
wuchyi 2:537b8388dc6a 15 @namespace lcd
wuchyi 2:537b8388dc6a 16 @brief Define output pins for lcd display
wuchyi 2:537b8388dc6a 17 VCC, SCE, RST, D/C, MOSI, SCLK, LED
wuchyi 2:537b8388dc6a 18 */
wuchyi 2:537b8388dc6a 19
wuchyi 2:537b8388dc6a 20 N5110 lcd (PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3);
wuchyi 2:537b8388dc6a 21
wuchyi 2:537b8388dc6a 22 /**
wuchyi 2:537b8388dc6a 23 @namespace sd
wuchyi 2:537b8388dc6a 24 @brief Define output pins for SD card
wuchyi 2:537b8388dc6a 25 VCC, SCE, RST, D/C, MOSI, SCLK, LED
wuchyi 2:537b8388dc6a 26 */
wuchyi 2:537b8388dc6a 27 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd");
wuchyi 2:537b8388dc6a 28
wuchyi 2:537b8388dc6a 29 /// VARIABLES
wuchyi 2:537b8388dc6a 30 int pdirection;/*!< temporary direction store for constant movement function */
wuchyi 2:537b8388dc6a 31 int gamemode; /*!< Decides game mode */
wuchyi 2:537b8388dc6a 32 int HiScoreTable[5]; /*!< Array to store high scores (read from SD, write to SD) */
wuchyi 2:537b8388dc6a 33 int level_array[5]; /*!< Array to store levels for highscores when reading from SD */
wuchyi 2:537b8388dc6a 34 int level; /*!< storage for current level */
wuchyi 2:537b8388dc6a 35 int fx,fy,score; /*!< global variables to hold data (food coordinates, score) */
wuchyi 2:537b8388dc6a 36 volatile int butt1_flag, butt2_flag; /*!< Button flags */
wuchyi 2:537b8388dc6a 37 float levelcalc ; /*!< storage for current speed depending on level */
wuchyi 2:537b8388dc6a 38 bool gameOver; /*!< decides if game has ended */
wuchyi 2:537b8388dc6a 39 FILE *fp; /*!< pointer for file storage system */
wuchyi 2:537b8388dc6a 40
wuchyi 2:537b8388dc6a 41 const int width = (84 - 2) / 2 ; /*!< Constant variable for screen width (playable by snake)*/
wuchyi 2:537b8388dc6a 42 const int height = (48 - 4) / 2 ; /*!< Constant variable for screen height (playable by snake) */
wuchyi 2:537b8388dc6a 43
wuchyi 2:537b8388dc6a 44 /**
wuchyi 2:537b8388dc6a 45 enum for joystick directions
wuchyi 2:537b8388dc6a 46 */
wuchyi 2:537b8388dc6a 47 enum DirectionName { //joystick directions
wuchyi 2:537b8388dc6a 48 CENTRE,
wuchyi 2:537b8388dc6a 49 UP,
wuchyi 2:537b8388dc6a 50 LEFT,
wuchyi 2:537b8388dc6a 51 DOWN,
wuchyi 2:537b8388dc6a 52 RIGHT,
wuchyi 2:537b8388dc6a 53 UNKNOWN
wuchyi 2:537b8388dc6a 54 };
wuchyi 2:537b8388dc6a 55
wuchyi 2:537b8388dc6a 56 /**
wuchyi 2:537b8388dc6a 57 struct for joystick data
wuchyi 2:537b8388dc6a 58 */
wuchyi 2:537b8388dc6a 59 typedef struct joystick1 Joystick;
wuchyi 2:537b8388dc6a 60 struct joystick1 {
wuchyi 2:537b8388dc6a 61 float x; /// current x value
wuchyi 2:537b8388dc6a 62 float x0; /// 'centred' x value
wuchyi 2:537b8388dc6a 63 float y; /// current y value
wuchyi 2:537b8388dc6a 64 float y0; /// 'centred' y value
wuchyi 2:537b8388dc6a 65 int button; /// button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
wuchyi 2:537b8388dc6a 66 DirectionName direction; // current direction
wuchyi 2:537b8388dc6a 67 };
wuchyi 2:537b8388dc6a 68
wuchyi 2:537b8388dc6a 69 Joystick joystick; /// defines joystick
wuchyi 2:537b8388dc6a 70
wuchyi 2:537b8388dc6a 71 typedef struct snake1 Snake;
wuchyi 2:537b8388dc6a 72 struct snake1 {
wuchyi 2:537b8388dc6a 73 int hx; /// head x value
wuchyi 2:537b8388dc6a 74 int hy; /// head y value
wuchyi 2:537b8388dc6a 75 int length; /// snake length
wuchyi 2:537b8388dc6a 76 int tailx[100],taily[100]; ///tail coordinates array
wuchyi 2:537b8388dc6a 77 };
wuchyi 2:537b8388dc6a 78
wuchyi 2:537b8388dc6a 79 Snake snake; ///defines snake
wuchyi 2:537b8388dc6a 80
wuchyi 2:537b8388dc6a 81
wuchyi 2:537b8388dc6a 82 /// FUNCTIONS
wuchyi 2:537b8388dc6a 83
wuchyi 2:537b8388dc6a 84 /**
wuchyi 2:537b8388dc6a 85 Initializes the display
wuchyi 2:537b8388dc6a 86 */
wuchyi 2:537b8388dc6a 87 void init_display();
wuchyi 2:537b8388dc6a 88
wuchyi 2:537b8388dc6a 89 /**
wuchyi 2:537b8388dc6a 90 Function to draw game screen, is called by ticker timer. Draws the hard wall, snake body and food.
wuchyi 2:537b8388dc6a 91 */
wuchyi 2:537b8388dc6a 92 void draw_screen();
wuchyi 2:537b8388dc6a 93
wuchyi 2:537b8388dc6a 94 /**
wuchyi 2:537b8388dc6a 95 Calibrates the joystick to get the offset for centering
wuchyi 2:537b8388dc6a 96 */
wuchyi 2:537b8388dc6a 97 void calibrate_joystick();
wuchyi 2:537b8388dc6a 98
wuchyi 2:537b8388dc6a 99 /**
wuchyi 2:537b8388dc6a 100 function to determine the direction the joystick is pointing
wuchyi 2:537b8388dc6a 101 */
wuchyi 2:537b8388dc6a 102 void joystick_pos();
wuchyi 2:537b8388dc6a 103
wuchyi 2:537b8388dc6a 104 /**
wuchyi 2:537b8388dc6a 105 generates food position by random
wuchyi 2:537b8388dc6a 106 */
wuchyi 2:537b8388dc6a 107 void food_pos();
wuchyi 2:537b8388dc6a 108
wuchyi 2:537b8388dc6a 109
wuchyi 2:537b8388dc6a 110 /**
wuchyi 2:537b8388dc6a 111 moves the snake (head) according to joystick position. Called in the game logic.
wuchyi 2:537b8388dc6a 112 */
wuchyi 2:537b8388dc6a 113 void snake_move();
wuchyi 2:537b8388dc6a 114
wuchyi 2:537b8388dc6a 115 /**
wuchyi 2:537b8388dc6a 116 Main logic of the snake game including growth rule, death rule
wuchyi 2:537b8388dc6a 117 */
wuchyi 2:537b8388dc6a 118 void snake_logic_1();
wuchyi 2:537b8388dc6a 119
wuchyi 2:537b8388dc6a 120 /**
wuchyi 2:537b8388dc6a 121 Displays the gameOver screen
wuchyi 2:537b8388dc6a 122 */
wuchyi 2:537b8388dc6a 123 void gameOver_screen();
wuchyi 2:537b8388dc6a 124
wuchyi 2:537b8388dc6a 125 /**
wuchyi 2:537b8388dc6a 126 Displays the gamePaused screen, activated via button in game
wuchyi 2:537b8388dc6a 127 */
wuchyi 2:537b8388dc6a 128 void gamePaused_screen();
wuchyi 2:537b8388dc6a 129
wuchyi 2:537b8388dc6a 130 /**
wuchyi 2:537b8388dc6a 131 Displays the main menu in game
wuchyi 2:537b8388dc6a 132 */
wuchyi 2:537b8388dc6a 133 void main_menu();
wuchyi 2:537b8388dc6a 134 /**
wuchyi 2:537b8388dc6a 135 Displays the highscores according to level. Called from main menu
wuchyi 2:537b8388dc6a 136 */
wuchyi 2:537b8388dc6a 137 void HiScoreScreen();
wuchyi 2:537b8388dc6a 138
wuchyi 2:537b8388dc6a 139 /**
wuchyi 2:537b8388dc6a 140 Displays the settings screen, called from main menu
wuchyi 2:537b8388dc6a 141 */
wuchyi 2:537b8388dc6a 142 void settingsScreen();
wuchyi 2:537b8388dc6a 143
wuchyi 2:537b8388dc6a 144 /**
wuchyi 2:537b8388dc6a 145 activates the gameplay, called from main menu
wuchyi 2:537b8388dc6a 146 */
wuchyi 2:537b8388dc6a 147 void game();
wuchyi 2:537b8388dc6a 148
wuchyi 2:537b8388dc6a 149
wuchyi 2:537b8388dc6a 150 /**
wuchyi 2:537b8388dc6a 151 ISR for button 1 to activate flag
wuchyi 2:537b8388dc6a 152 */
wuchyi 2:537b8388dc6a 153 void butt1_isr();
wuchyi 2:537b8388dc6a 154
wuchyi 2:537b8388dc6a 155 /**
wuchyi 2:537b8388dc6a 156 ISR for button 2 to activate flag
wuchyi 2:537b8388dc6a 157 */
wuchyi 2:537b8388dc6a 158 void butt2_isr();
wuchyi 2:537b8388dc6a 159
wuchyi 2:537b8388dc6a 160 /**
wuchyi 2:537b8388dc6a 161 @namespace gameTimer1
wuchyi 2:537b8388dc6a 162 @brief Ticker Used for game logic
wuchyi 2:537b8388dc6a 163 */
wuchyi 2:537b8388dc6a 164 Ticker gameTimer1;
wuchyi 2:537b8388dc6a 165
wuchyi 2:537b8388dc6a 166 /**
wuchyi 2:537b8388dc6a 167 @namespace gameTimer2
wuchyi 2:537b8388dc6a 168 @brief Ticker used for Draw Screen
wuchyi 2:537b8388dc6a 169 */
wuchyi 2:537b8388dc6a 170 Ticker gameTimer2;
wuchyi 2:537b8388dc6a 171
wuchyi 2:537b8388dc6a 172 /**
wuchyi 2:537b8388dc6a 173 @namespace joystickTimer
wuchyi 2:537b8388dc6a 174 @brief Ticker used for joystick position
wuchyi 2:537b8388dc6a 175 */
wuchyi 2:537b8388dc6a 176 Ticker joystickTimer;
wuchyi 2:537b8388dc6a 177
wuchyi 2:537b8388dc6a 178 /**
wuchyi 2:537b8388dc6a 179 @namespace xAxis
wuchyi 2:537b8388dc6a 180 @brief AnalogIn for xAxis of joystick
wuchyi 2:537b8388dc6a 181 */
wuchyi 2:537b8388dc6a 182 AnalogIn xAxis(A0);
wuchyi 2:537b8388dc6a 183
wuchyi 2:537b8388dc6a 184 /**
wuchyi 2:537b8388dc6a 185 @namespace yAxis
wuchyi 2:537b8388dc6a 186 @brief AnalogIn for yAxis of joystick
wuchyi 2:537b8388dc6a 187 */
wuchyi 2:537b8388dc6a 188 AnalogIn yAxis(A1);
wuchyi 2:537b8388dc6a 189
wuchyi 2:537b8388dc6a 190 /**
wuchyi 2:537b8388dc6a 191 @namespace Butt1
wuchyi 2:537b8388dc6a 192 @brief InterruptIn for joystick Button
wuchyi 2:537b8388dc6a 193 */
wuchyi 2:537b8388dc6a 194 InterruptIn Butt1(PTB11);
wuchyi 2:537b8388dc6a 195
wuchyi 2:537b8388dc6a 196 /**
wuchyi 2:537b8388dc6a 197 @namespace Butt2
wuchyi 2:537b8388dc6a 198 @brief InterruptIn for button
wuchyi 2:537b8388dc6a 199 */
wuchyi 2:537b8388dc6a 200 InterruptIn Butt2(PTB18);
wuchyi 2:537b8388dc6a 201
wuchyi 2:537b8388dc6a 202 /**
wuchyi 2:537b8388dc6a 203 @namespace LED
wuchyi 2:537b8388dc6a 204 @brief DigitalOut for LED
wuchyi 2:537b8388dc6a 205 */
wuchyi 2:537b8388dc6a 206 DigitalOut LED(PTC2);
wuchyi 2:537b8388dc6a 207
wuchyi 2:537b8388dc6a 208
wuchyi 2:537b8388dc6a 209
wuchyi 2:537b8388dc6a 210