A retro gaming programme, designed for use on a portable embedded system. Incorporates power saving techniques.
Dependencies: ConfigFile N5110 PowerControl beep mbed
tower.h@63:ff9b64b23d26, 2015-05-06 (annotated)
- Committer:
- el13drt
- Date:
- Wed May 06 00:18:31 2015 +0000
- Revision:
- 63:ff9b64b23d26
- Parent:
- 62:827cda7a2663
- Child:
- 64:715fb5a1e58b
pre ninja shift;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el13drt | 62:827cda7a2663 | 1 | /** |
el13drt | 62:827cda7a2663 | 2 | @file tower.h |
el13drt | 62:827cda7a2663 | 3 | @brief Revision 1.0. |
el13drt | 62:827cda7a2663 | 4 | @author Daniel R. Tomlinson |
el13drt | 62:827cda7a2663 | 5 | @date May 2015 |
el13drt | 13:a1b3a373c5a4 | 6 | |
el13drt | 62:827cda7a2663 | 7 | @brief Header file - Contains Global Variables, Inputs/Outputs and Function prototypes. |
el13drt | 62:827cda7a2663 | 8 | */ |
el13drt | 62:827cda7a2663 | 9 | |
el13drt | 62:827cda7a2663 | 10 | ///Alters tolerance of Joystick directions |
el13drt | 13:a1b3a373c5a4 | 11 | #define DIRECTION_TOLERANCE 0.05 |
el13drt | 54:8180eec1656d | 12 | #include "ConfigFile.h" |
el13drt | 12:eedda6554615 | 13 | |
el13drt | 62:827cda7a2663 | 14 | /** |
el13drt | 62:827cda7a2663 | 15 | @namespace lcd |
el13drt | 63:ff9b64b23d26 | 16 | @brief Object of the N5110 class, allocates pins to the LCD screen |
el13drt | 63:ff9b64b23d26 | 17 | (VCC, SCE, RST, D/C, MOSI, SCLK, LED). |
el13drt | 62:827cda7a2663 | 18 | */ |
el13drt | 62:827cda7a2663 | 19 | N5110 lcd(p7,p8,p9,p10,p11,p13,p22);//VCC, SCE, RST, D/C, MOSI, SCLK, LED - assign pins for LCD. |
el13drt | 55:bb4f6cc196c8 | 20 | |
el13drt | 62:827cda7a2663 | 21 | /** |
el13drt | 63:ff9b64b23d26 | 22 | @namespace cfg |
el13drt | 63:ff9b64b23d26 | 23 | @brief Object of the ConfigFile, used to create read/write file path within the Mbeds flash memory. |
el13drt | 62:827cda7a2663 | 24 | */ |
el13drt | 54:8180eec1656d | 25 | ConfigFile cfg; |
el13drt | 24:eb80956e2e95 | 26 | |
el13drt | 62:827cda7a2663 | 27 | /** |
el13drt | 63:ff9b64b23d26 | 28 | @namespace serial |
el13drt | 63:ff9b64b23d26 | 29 | @brief Serial port out - Generic protocol used to send and receive data, used for debugging. |
el13drt | 62:827cda7a2663 | 30 | */ |
el13drt | 54:8180eec1656d | 31 | Serial serial(USBTX, USBRX); |
el13drt | 54:8180eec1656d | 32 | |
el13drt | 62:827cda7a2663 | 33 | /** |
el13drt | 63:ff9b64b23d26 | 34 | @namespace timerA |
el13drt | 63:ff9b64b23d26 | 35 | @brief Calls the function, timerExpiredA(); at intervals of 0.1 sec. |
el13drt | 62:827cda7a2663 | 36 | */ |
el13drt | 35:9f55326c1b0a | 37 | Ticker timerA;//for buttonA |
el13drt | 62:827cda7a2663 | 38 | |
el13drt | 62:827cda7a2663 | 39 | /** |
el13drt | 63:ff9b64b23d26 | 40 | @namespace timerB |
el13drt | 63:ff9b64b23d26 | 41 | @brief Calls the function, timerExpiredB(); at intervals of 0.1 sec. |
el13drt | 62:827cda7a2663 | 42 | */ |
el13drt | 35:9f55326c1b0a | 43 | Ticker timerB;//for buttonB |
el13drt | 15:ff3eb0091453 | 44 | |
el13drt | 62:827cda7a2663 | 45 | /** |
el13drt | 63:ff9b64b23d26 | 46 | @namespace pollJoystick |
el13drt | 63:ff9b64b23d26 | 47 | @brief Calls the function, updateJoystick(); at intervals of 1/10 seconds. |
el13drt | 62:827cda7a2663 | 48 | */ |
el13drt | 62:827cda7a2663 | 49 | Ticker pollJoystick; |
el13drt | 62:827cda7a2663 | 50 | |
el13drt | 62:827cda7a2663 | 51 | /** |
el13drt | 63:ff9b64b23d26 | 52 | @namespace buzzer |
el13drt | 63:ff9b64b23d26 | 53 | @brief Object of the beep class, allocates a pin to the Piezo buzzer. |
el13drt | 62:827cda7a2663 | 54 | */ |
el13drt | 13:a1b3a373c5a4 | 55 | Beep buzzer(p21); |
el13drt | 13:a1b3a373c5a4 | 56 | |
el13drt | 62:827cda7a2663 | 57 | /** |
el13drt | 62:827cda7a2663 | 58 | @namespace buttonA |
el13drt | 63:ff9b64b23d26 | 59 | @brief Object of DigitalIn, allocates a pin to push button A. |
el13drt | 62:827cda7a2663 | 60 | */ |
el13drt | 62:827cda7a2663 | 61 | DigitalIn buttonA(p20); |
el13drt | 13:a1b3a373c5a4 | 62 | |
el13drt | 62:827cda7a2663 | 63 | /** |
el13drt | 62:827cda7a2663 | 64 | @namespace buttonB |
el13drt | 63:ff9b64b23d26 | 65 | @brief Object of DigitalIn, allocates a pin to push button B. |
el13drt | 62:827cda7a2663 | 66 | */ |
el13drt | 62:827cda7a2663 | 67 | DigitalIn buttonB(p19); |
el13drt | 62:827cda7a2663 | 68 | |
el13drt | 62:827cda7a2663 | 69 | /** |
el13drt | 62:827cda7a2663 | 70 | @namespace ledA. |
el13drt | 63:ff9b64b23d26 | 71 | @brief Object of AnalgOut,allocates a pin to the Action LED. |
el13drt | 62:827cda7a2663 | 72 | */ |
el13drt | 47:88e3e6c0452d | 73 | AnalogOut ledA(p18);//action LED |
el13drt | 62:827cda7a2663 | 74 | |
el13drt | 62:827cda7a2663 | 75 | /** |
el13drt | 62:827cda7a2663 | 76 | @namespace ledP. |
el13drt | 63:ff9b64b23d26 | 77 | @brief Object of DigitalOut, allocates a pin to the Power LED. |
el13drt | 62:827cda7a2663 | 78 | */ |
el13drt | 47:88e3e6c0452d | 79 | DigitalOut ledP(p24);//Power LED |
el13drt | 13:a1b3a373c5a4 | 80 | |
el13drt | 62:827cda7a2663 | 81 | /** |
el13drt | 62:827cda7a2663 | 82 | @namespace joyButton. |
el13drt | 63:ff9b64b23d26 | 83 | @brief Object of InterruptIn, allocates a pin to the Joy Stick button. |
el13drt | 62:827cda7a2663 | 84 | */ |
el13drt | 14:c2c969e1c6e8 | 85 | InterruptIn joyButton(p17);//Interrupt for ISR |
el13drt | 62:827cda7a2663 | 86 | |
el13drt | 62:827cda7a2663 | 87 | /** |
el13drt | 62:827cda7a2663 | 88 | @namespace xpot. |
el13drt | 63:ff9b64b23d26 | 89 | @brief Objct of AnalogIn, allocates a pin to xPot. |
el13drt | 62:827cda7a2663 | 90 | */ |
el13drt | 35:9f55326c1b0a | 91 | AnalogIn xPot(p15);//left/right |
el13drt | 62:827cda7a2663 | 92 | |
el13drt | 62:827cda7a2663 | 93 | /** |
el13drt | 62:827cda7a2663 | 94 | @namespace ypot. |
el13drt | 63:ff9b64b23d26 | 95 | @brief Objct of AnalogIn, allocates a pin to yPot. |
el13drt | 62:827cda7a2663 | 96 | */ |
el13drt | 35:9f55326c1b0a | 97 | AnalogIn yPot(p16);//up/down |
el13drt | 13:a1b3a373c5a4 | 98 | |
el13drt | 62:827cda7a2663 | 99 | //Globabl Variables |
el13drt | 12:eedda6554615 | 100 | |
el13drt | 35:9f55326c1b0a | 101 | //sound FX toggle |
el13drt | 62:827cda7a2663 | 102 | int FX = 0;/*!< Toggle for Sound FX. */ |
el13drt | 17:242ccf6a8442 | 103 | |
el13drt | 35:9f55326c1b0a | 104 | //previous Direction |
el13drt | 40:56ab6d368e9b | 105 | //stops continuous scrolling on some features |
el13drt | 62:827cda7a2663 | 106 | int preDirection;/*!< Used to stop continuous scrolling. */ |
el13drt | 34:9dc844bdc776 | 107 | |
el13drt | 35:9f55326c1b0a | 108 | //timer flags to check state of the buttons |
el13drt | 62:827cda7a2663 | 109 | int buttonFlagA = 0;/*!< Button flag set for ISR when state of buttonA changes. */ |
el13drt | 62:827cda7a2663 | 110 | int buttonFlagB = 0;/*!< Button flag set for ISR when state of buttonB changes. */ |
el13drt | 15:ff3eb0091453 | 111 | |
el13drt | 60:681bc941b94d | 112 | //button values for debounce problem |
el13drt | 60:681bc941b94d | 113 | int oldButtonA = 0; |
el13drt | 60:681bc941b94d | 114 | int newButtonA; |
el13drt | 60:681bc941b94d | 115 | |
el13drt | 60:681bc941b94d | 116 | int oldButtonB = 0; |
el13drt | 60:681bc941b94d | 117 | int newButtonB; |
el13drt | 60:681bc941b94d | 118 | |
el13drt | 35:9f55326c1b0a | 119 | //flag for joystick reading |
el13drt | 62:827cda7a2663 | 120 | int printFlag = 0;/*!< Print flag set for ISR when Joystick is moved. */ |
el13drt | 14:c2c969e1c6e8 | 121 | |
el13drt | 35:9f55326c1b0a | 122 | //boundary conditions |
el13drt | 62:827cda7a2663 | 123 | int cells [84][48];/*!< Boundary conditions for cells.*/ |
el13drt | 12:eedda6554615 | 124 | |
el13drt | 35:9f55326c1b0a | 125 | //real time score |
el13drt | 62:827cda7a2663 | 126 | int score = 0;/*!< Integer to show and print Scores. */ |
el13drt | 12:eedda6554615 | 127 | |
el13drt | 35:9f55326c1b0a | 128 | //stored high score variables |
el13drt | 35:9f55326c1b0a | 129 | int highScore1; |
el13drt | 35:9f55326c1b0a | 130 | int highScore2; |
el13drt | 35:9f55326c1b0a | 131 | int highScore3; |
el13drt | 21:1fbbd8ebb3d9 | 132 | |
el13drt | 35:9f55326c1b0a | 133 | //global char arrays to store initials/score |
el13drt | 62:827cda7a2663 | 134 | char player1initials[14] = {"1.AAA.....0"};/*!< Buffer for printing Initials and Top Score 1.*/ |
el13drt | 62:827cda7a2663 | 135 | char player2initials[14] = {"2.BBB.....0"};/*!< Buffer for printing Initials and Top Score 2.*/ |
el13drt | 62:827cda7a2663 | 136 | char player3initials[14] = {"3.CCC.....0"};/*!< Buffer for printing Initials and Top Score 3.*/ |
el13drt | 25:70048c7e02c7 | 137 | |
el13drt | 35:9f55326c1b0a | 138 | //difficulty variable - hazards fall at 2 pixels per refresh |
el13drt | 62:827cda7a2663 | 139 | int fall = 2;/*!< Increments hazards each Iteration by the Integer stored. */ |
el13drt | 12:eedda6554615 | 140 | |
el13drt | 35:9f55326c1b0a | 141 | //global variables for movement (pixelNinja) |
el13drt | 12:eedda6554615 | 142 | int a1 = 22; |
el13drt | 12:eedda6554615 | 143 | int a2 = 24; |
el13drt | 12:eedda6554615 | 144 | int a3 = 23; |
el13drt | 60:681bc941b94d | 145 | int a4 = 22; |
el13drt | 60:681bc941b94d | 146 | int a5 = 22; |
el13drt | 60:681bc941b94d | 147 | int a6 = 24; |
el13drt | 60:681bc941b94d | 148 | int a7 = 25; |
el13drt | 60:681bc941b94d | 149 | int a8 = 20; |
el13drt | 60:681bc941b94d | 150 | int a9 = 20; |
el13drt | 60:681bc941b94d | 151 | int a10 = 26; |
el13drt | 60:681bc941b94d | 152 | int a11 = 26; |
el13drt | 60:681bc941b94d | 153 | int a12 = 26; |
el13drt | 60:681bc941b94d | 154 | int a13 = 24; |
el13drt | 60:681bc941b94d | 155 | int a14 = 19; |
el13drt | 60:681bc941b94d | 156 | int a15 = 20; |
el13drt | 60:681bc941b94d | 157 | int a16 = 21; |
el13drt | 12:eedda6554615 | 158 | |
el13drt | 35:9f55326c1b0a | 159 | //global variable for hazard X co-ordinates |
el13drt | 62:827cda7a2663 | 160 | int randX1;/*!< X co-ordinate for Hazard 1. */ |
el13drt | 62:827cda7a2663 | 161 | int randX2;/*!< X co-ordinate for Hazard 2. */ |
el13drt | 62:827cda7a2663 | 162 | int randX3;/*!< X co-ordinate for Hazard 3. */ |
el13drt | 62:827cda7a2663 | 163 | int randX4;/*!< X co-ordinate for Hazard 4. */ |
el13drt | 62:827cda7a2663 | 164 | int randX5;/*!< X co-ordinate for Hazard 5. */ |
el13drt | 62:827cda7a2663 | 165 | int randX6;/*!< X co-ordinate for Hazard 6. */ |
el13drt | 12:eedda6554615 | 166 | |
el13drt | 35:9f55326c1b0a | 167 | //global variable for hazard Y co-ordinates |
el13drt | 62:827cda7a2663 | 168 | int randY1 = 1;/*!< Y co-ordinate for Hazard 1. */ |
el13drt | 62:827cda7a2663 | 169 | int randY2 = 1;/*!< Y co-ordinate for Hazard 2. */ |
el13drt | 62:827cda7a2663 | 170 | int randY3 = 1;/*!< Y co-ordinate for Hazard 3. */ |
el13drt | 62:827cda7a2663 | 171 | int randY4 = 1;/*!< Y co-ordinate for Hazard 4. */ |
el13drt | 62:827cda7a2663 | 172 | int randY5 = 1;/*!< Y co-ordinate for Hazard 5. */ |
el13drt | 62:827cda7a2663 | 173 | int randY6 = 1;/*!< Y co-ordinate for Hazard 6. */ |
el13drt | 12:eedda6554615 | 174 | |
el13drt | 35:9f55326c1b0a | 175 | //integers for changing struct ouput states |
el13drt | 62:827cda7a2663 | 176 | int state1 = 0;/*!< State number for Output 1.*/ |
el13drt | 62:827cda7a2663 | 177 | int state2 = 0;/*!< State number for output 2.*/ |
el13drt | 62:827cda7a2663 | 178 | int state3 = 0;/*!< State number for output 3.*/ |
el13drt | 35:9f55326c1b0a | 179 | |
el13drt | 35:9f55326c1b0a | 180 | //prototypes |
el13drt | 35:9f55326c1b0a | 181 | void calibrateJoystick(); |
el13drt | 35:9f55326c1b0a | 182 | void updateJoystick(); |
el13drt | 35:9f55326c1b0a | 183 | void timerExpiredA(); |
el13drt | 35:9f55326c1b0a | 184 | void timerExpiredB(); |
el13drt | 35:9f55326c1b0a | 185 | void actionButton(); |
el13drt | 35:9f55326c1b0a | 186 | void randomise(); |
el13drt | 35:9f55326c1b0a | 187 | void resetGame(); |
el13drt | 35:9f55326c1b0a | 188 | void startrek(); |
el13drt | 35:9f55326c1b0a | 189 | void refreshCursor1(); |
el13drt | 35:9f55326c1b0a | 190 | void refreshCursor2(); |
el13drt | 35:9f55326c1b0a | 191 | void refreshCursor3(); |
el13drt | 35:9f55326c1b0a | 192 | void ninjaBoundaries(); |
el13drt | 63:ff9b64b23d26 | 193 | |
el13drt | 63:ff9b64b23d26 | 194 | /** |
el13drt | 63:ff9b64b23d26 | 195 | */ |
el13drt | 60:681bc941b94d | 196 | void ninjaLeft(); |
el13drt | 63:ff9b64b23d26 | 197 | |
el13drt | 63:ff9b64b23d26 | 198 | /** |
el13drt | 63:ff9b64b23d26 | 199 | */ |
el13drt | 60:681bc941b94d | 200 | void ninjaRight(); |
el13drt | 63:ff9b64b23d26 | 201 | |
el13drt | 63:ff9b64b23d26 | 202 | /** |
el13drt | 63:ff9b64b23d26 | 203 | */ |
el13drt | 35:9f55326c1b0a | 204 | void hazardFall(); |
el13drt | 63:ff9b64b23d26 | 205 | |
el13drt | 63:ff9b64b23d26 | 206 | /** |
el13drt | 63:ff9b64b23d26 | 207 | */ |
el13drt | 51:df3bab1d6926 | 208 | void newScore(); |
el13drt | 63:ff9b64b23d26 | 209 | /** |
el13drt | 63:ff9b64b23d26 | 210 | */ |
el13drt | 35:9f55326c1b0a | 211 | void mainMenu(); |
el13drt | 63:ff9b64b23d26 | 212 | |
el13drt | 63:ff9b64b23d26 | 213 | /** |
el13drt | 63:ff9b64b23d26 | 214 | */ |
el13drt | 35:9f55326c1b0a | 215 | void exitMenu(); |
el13drt | 63:ff9b64b23d26 | 216 | |
el13drt | 63:ff9b64b23d26 | 217 | /** |
el13drt | 63:ff9b64b23d26 | 218 | */ |
el13drt | 35:9f55326c1b0a | 219 | void optionsMenu(); |
el13drt | 63:ff9b64b23d26 | 220 | |
el13drt | 63:ff9b64b23d26 | 221 | /** |
el13drt | 63:ff9b64b23d26 | 222 | */ |
el13drt | 35:9f55326c1b0a | 223 | void game(); |
el13drt | 63:ff9b64b23d26 | 224 | |
el13drt | 63:ff9b64b23d26 | 225 | /** |
el13drt | 63:ff9b64b23d26 | 226 | */ |
el13drt | 35:9f55326c1b0a | 227 | void difficultyMenu(); |
el13drt | 63:ff9b64b23d26 | 228 | |
el13drt | 63:ff9b64b23d26 | 229 | /** |
el13drt | 63:ff9b64b23d26 | 230 | */ |
el13drt | 35:9f55326c1b0a | 231 | void soundFXMenu(); |
el13drt | 63:ff9b64b23d26 | 232 | |
el13drt | 63:ff9b64b23d26 | 233 | /** |
el13drt | 63:ff9b64b23d26 | 234 | */ |
el13drt | 35:9f55326c1b0a | 235 | void scores(); |
el13drt | 35:9f55326c1b0a | 236 | |
el13drt | 62:827cda7a2663 | 237 | /** |
el13drt | 62:827cda7a2663 | 238 | */ |
el13drt | 35:9f55326c1b0a | 239 | void drawNinja(); |
el13drt | 62:827cda7a2663 | 240 | |
el13drt | 62:827cda7a2663 | 241 | /** |
el13drt | 62:827cda7a2663 | 242 | */ |
el13drt | 35:9f55326c1b0a | 243 | void drawHazards(); |
el13drt | 62:827cda7a2663 | 244 | |
el13drt | 62:827cda7a2663 | 245 | /** |
el13drt | 62:827cda7a2663 | 246 | */ |
el13drt | 35:9f55326c1b0a | 247 | void drawWelcome(); |
el13drt | 62:827cda7a2663 | 248 | |
el13drt | 62:827cda7a2663 | 249 | /** |
el13drt | 62:827cda7a2663 | 250 | */ |
el13drt | 35:9f55326c1b0a | 251 | void drawBackground(); |
el13drt | 62:827cda7a2663 | 252 | |
el13drt | 62:827cda7a2663 | 253 | /** |
el13drt | 62:827cda7a2663 | 254 | */ |
el13drt | 35:9f55326c1b0a | 255 | void drawSoundFXMenu(); |
el13drt | 62:827cda7a2663 | 256 | |
el13drt | 62:827cda7a2663 | 257 | /** |
el13drt | 62:827cda7a2663 | 258 | */ |
el13drt | 35:9f55326c1b0a | 259 | void drawDifficultyMenu(); |
el13drt | 62:827cda7a2663 | 260 | |
el13drt | 62:827cda7a2663 | 261 | /** |
el13drt | 62:827cda7a2663 | 262 | */ |
el13drt | 35:9f55326c1b0a | 263 | void drawMainMenu(); |
el13drt | 62:827cda7a2663 | 264 | |
el13drt | 62:827cda7a2663 | 265 | /** |
el13drt | 62:827cda7a2663 | 266 | */ |
el13drt | 35:9f55326c1b0a | 267 | void drawOptionsMenu(); |
el13drt | 62:827cda7a2663 | 268 | |
el13drt | 62:827cda7a2663 | 269 | /** |
el13drt | 62:827cda7a2663 | 270 | */ |
el13drt | 35:9f55326c1b0a | 271 | void drawExitMenu(); |
el13drt | 62:827cda7a2663 | 272 |