ELEC2645 Embedded Systems Project (JOYSTICK)

Dependencies:   N5110 SDFileSystem mbed

Committer:
wuchyi
Date:
Sat May 07 14:45:02 2016 +0000
Revision:
4:f17082a43006
Parent:
3:cea8b85dbbdd
updated documentation

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