A retro gaming programme, designed for use on a portable embedded system. Incorporates power saving techniques.

Dependencies:   ConfigFile N5110 PowerControl beep mbed

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?

UserRevisionLine numberNew 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