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