ELEC2645 Embedded Systems Project (JOYSTICK)
Dependencies: N5110 SDFileSystem mbed
main.h@2:537b8388dc6a, 2016-05-07 (annotated)
- Committer:
- wuchyi
- Date:
- Sat May 07 14:35:21 2016 +0000
- Revision:
- 2:537b8388dc6a
- Child:
- 3:cea8b85dbbdd
final1
Who changed what in which revision?
User | Revision | Line number | New 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 |