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:
Sat Apr 18 18:59:13 2015 +0000
Revision:
22:e5bfe0e7c508
Parent:
21:1fbbd8ebb3d9
Child:
23:548299d45a60
pre array;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el13drt 13:a1b3a373c5a4 1
el13drt 13:a1b3a373c5a4 2 // change this to alter tolerance of joystick direction
el13drt 13:a1b3a373c5a4 3 #define DIRECTION_TOLERANCE 0.05
el13drt 12:eedda6554615 4
el13drt 12:eedda6554615 5 // VCC,SCE,RST,D/C,MOSI,SCLK,LED - set pins for LCD
el13drt 12:eedda6554615 6 N5110 lcd(p7,p8,p9,p10,p11,p13,p22);
el13drt 12:eedda6554615 7
el13drt 15:ff3eb0091453 8 // timers to check state of buttons
el13drt 17:242ccf6a8442 9 Ticker timerA;//buttonA
el13drt 17:242ccf6a8442 10 Ticker timerB;//buttonB
el13drt 15:ff3eb0091453 11
el13drt 13:a1b3a373c5a4 12 // create buzzer objecct
el13drt 13:a1b3a373c5a4 13 Beep buzzer(p21);
el13drt 13:a1b3a373c5a4 14
el13drt 13:a1b3a373c5a4 15 // create local file system
el13drt 13:a1b3a373c5a4 16 //LocalFileSytem local("local");
el13drt 13:a1b3a373c5a4 17
el13drt 13:a1b3a373c5a4 18 // navigation/action buttons
el13drt 13:a1b3a373c5a4 19 DigitalIn buttonA(p19);
el13drt 13:a1b3a373c5a4 20 DigitalIn buttonB(p20);
el13drt 13:a1b3a373c5a4 21
el13drt 13:a1b3a373c5a4 22 // LED indicators
el13drt 13:a1b3a373c5a4 23 AnalogOut ledR(p18);// RED LED
el13drt 13:a1b3a373c5a4 24 DigitalOut ledY(p24);// YELLOW LED
el13drt 13:a1b3a373c5a4 25
el13drt 13:a1b3a373c5a4 26 // connections for joystick
el13drt 14:c2c969e1c6e8 27 InterruptIn joyButton(p17);//Interrupt for ISR
el13drt 13:a1b3a373c5a4 28 AnalogIn xPot(p15);
el13drt 13:a1b3a373c5a4 29 AnalogIn yPot(p16);
el13drt 13:a1b3a373c5a4 30
el13drt 12:eedda6554615 31 // Globabl Variables /////////////////////////
el13drt 12:eedda6554615 32
el13drt 22:e5bfe0e7c508 33 char enterInitials[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M',
el13drt 22:e5bfe0e7c508 34 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
el13drt 22:e5bfe0e7c508 35
el13drt 17:242ccf6a8442 36 // sound FX toggle
el13drt 17:242ccf6a8442 37 int FX = 0;
el13drt 17:242ccf6a8442 38
el13drt 15:ff3eb0091453 39 // timer flags to check state of buttons
el13drt 15:ff3eb0091453 40 int buttonFlagA = 0;
el13drt 15:ff3eb0091453 41 int buttonFlagB = 0;
el13drt 15:ff3eb0091453 42
el13drt 14:c2c969e1c6e8 43 // flag for joystick reading
el13drt 14:c2c969e1c6e8 44 int printFlag = 0;
el13drt 14:c2c969e1c6e8 45
el13drt 12:eedda6554615 46 // boundary conditions
el13drt 12:eedda6554615 47 int cells [84][48];
el13drt 12:eedda6554615 48
el13drt 12:eedda6554615 49 // player's score
el13drt 12:eedda6554615 50 int score = 0;
el13drt 12:eedda6554615 51
el13drt 21:1fbbd8ebb3d9 52 int highScore1 = 5;
el13drt 21:1fbbd8ebb3d9 53 int highScore2 = 3;
el13drt 21:1fbbd8ebb3d9 54 int highScore3 = 1;
el13drt 21:1fbbd8ebb3d9 55
el13drt 12:eedda6554615 56 // difficulty - number of pixels hazards incrememnt by
el13drt 12:eedda6554615 57 int fall = 2;
el13drt 12:eedda6554615 58
el13drt 12:eedda6554615 59 // global variables for movement (pixelNinja)
el13drt 12:eedda6554615 60 int a1 = 22;
el13drt 12:eedda6554615 61 int a2 = 24;
el13drt 12:eedda6554615 62 int a3 = 23;
el13drt 12:eedda6554615 63 int a4 = 25;
el13drt 12:eedda6554615 64 int a5 = 20;
el13drt 12:eedda6554615 65 int a6 = 26;
el13drt 12:eedda6554615 66 int a7 = 19;
el13drt 12:eedda6554615 67 int a8 = 21;
el13drt 12:eedda6554615 68
el13drt 12:eedda6554615 69 //global variable for random X co-ordinates
el13drt 12:eedda6554615 70 int randX1;
el13drt 12:eedda6554615 71 int randX2;
el13drt 12:eedda6554615 72 int randX3;
el13drt 12:eedda6554615 73 int randX4;
el13drt 12:eedda6554615 74 int randX5;
el13drt 12:eedda6554615 75 int randX6;
el13drt 12:eedda6554615 76
el13drt 12:eedda6554615 77 // global variable for Y co-ordinates
el13drt 12:eedda6554615 78 int randY1 = 0;
el13drt 12:eedda6554615 79 int randY2 = 0;
el13drt 12:eedda6554615 80 int randY3 = 0;
el13drt 12:eedda6554615 81 int randY4 = 0;
el13drt 12:eedda6554615 82 int randY5 = 0;
el13drt 12:eedda6554615 83 int randY6 = 0;
el13drt 12:eedda6554615 84
el13drt 13:a1b3a373c5a4 85 // function prototypes
el13drt 13:a1b3a373c5a4 86 void calibrateJoystick();
el13drt 13:a1b3a373c5a4 87 void updateJoystick();
el13drt 13:a1b3a373c5a4 88
el13drt 13:a1b3a373c5a4 89 // timer to regularly read the joystick
el13drt 13:a1b3a373c5a4 90 Ticker pollJoystick;
el13drt 13:a1b3a373c5a4 91
el13drt 13:a1b3a373c5a4 92 // serial for debug
el13drt 13:a1b3a373c5a4 93 Serial serial(USBTX,USBRX);
el13drt 13:a1b3a373c5a4 94
el13drt 13:a1b3a373c5a4 95 // create enumerated type (0,1,2,3 etc. for direction)
el13drt 13:a1b3a373c5a4 96 // could be extended for diagonals etc.
el13drt 13:a1b3a373c5a4 97 enum DirectionName {
el13drt 13:a1b3a373c5a4 98 UP,
el13drt 13:a1b3a373c5a4 99 DOWN,
el13drt 13:a1b3a373c5a4 100 LEFT,
el13drt 13:a1b3a373c5a4 101 RIGHT,
el13drt 13:a1b3a373c5a4 102 CENTRE,
el13drt 13:a1b3a373c5a4 103 UNKNOWN
el13drt 13:a1b3a373c5a4 104 };
el13drt 13:a1b3a373c5a4 105
el13drt 13:a1b3a373c5a4 106 // struct for Joystick
el13drt 13:a1b3a373c5a4 107 typedef struct JoyStick Joystick;
el13drt 13:a1b3a373c5a4 108 struct JoyStick {
el13drt 13:a1b3a373c5a4 109 float x; // current x value
el13drt 13:a1b3a373c5a4 110 float x0; // 'centred' x value
el13drt 13:a1b3a373c5a4 111 float y; // current y value
el13drt 13:a1b3a373c5a4 112 float y0; // 'centred' y value
el13drt 13:a1b3a373c5a4 113 int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
el13drt 13:a1b3a373c5a4 114 DirectionName direction; // current direction
el13drt 13:a1b3a373c5a4 115 };
el13drt 13:a1b3a373c5a4 116
el13drt 13:a1b3a373c5a4 117 // create struct variable
el13drt 13:a1b3a373c5a4 118 Joystick joystick;
el13drt 22:e5bfe0e7c508 119
el13drt 22:e5bfe0e7c508 120 // if buttonA set flag A
el13drt 15:ff3eb0091453 121 void timerExpiredA()
el13drt 15:ff3eb0091453 122 {
el13drt 15:ff3eb0091453 123 if(buttonA == 1) {
el13drt 15:ff3eb0091453 124 buttonFlagA = 1;
el13drt 15:ff3eb0091453 125 serial.printf("flagA set\n");
el13drt 15:ff3eb0091453 126 }
el13drt 15:ff3eb0091453 127 }
el13drt 15:ff3eb0091453 128
el13drt 22:e5bfe0e7c508 129 // if buttonB set flag B
el13drt 15:ff3eb0091453 130 void timerExpiredB()
el13drt 15:ff3eb0091453 131 {
el13drt 15:ff3eb0091453 132 if(buttonB == 1) {
el13drt 15:ff3eb0091453 133 buttonFlagB = 1;
el13drt 15:ff3eb0091453 134 serial.printf("flagB set\n");
el13drt 15:ff3eb0091453 135 }
el13drt 15:ff3eb0091453 136 }
el13drt 13:a1b3a373c5a4 137
el13drt 13:a1b3a373c5a4 138 // set seed/randomise initial co-Ordinates
el13drt 13:a1b3a373c5a4 139 void randomise()
el13drt 13:a1b3a373c5a4 140 {
el13drt 13:a1b3a373c5a4 141 srand (time(NULL));//initial seed for randomisation
el13drt 13:a1b3a373c5a4 142
el13drt 13:a1b3a373c5a4 143 // initial random x co-ordinates
el13drt 13:a1b3a373c5a4 144 // for falling hazards
el13drt 13:a1b3a373c5a4 145 // (values between 3 and 76)
el13drt 13:a1b3a373c5a4 146 randX1 = rand() % 74 + 5;
el13drt 13:a1b3a373c5a4 147 randX2 = rand() % 74 + 5;
el13drt 13:a1b3a373c5a4 148 randX3 = rand() % 74 + 5;
el13drt 13:a1b3a373c5a4 149 randX4 = rand() % 74 + 5;
el13drt 13:a1b3a373c5a4 150 randX5 = rand() % 74 + 5;
el13drt 13:a1b3a373c5a4 151 randX6 = rand() % 74 + 5;
el13drt 13:a1b3a373c5a4 152 }
el13drt 13:a1b3a373c5a4 153
el13drt 12:eedda6554615 154 // static background
el13drt 12:eedda6554615 155 void backGround()
el13drt 12:eedda6554615 156 {
el13drt 12:eedda6554615 157 // x, y, w, h, fill - draw ground
el13drt 12:eedda6554615 158 lcd.drawRect(0,47,84,0,1);
el13drt 12:eedda6554615 159
el13drt 12:eedda6554615 160 // x, y, w, h, fill - draw left wall
el13drt 12:eedda6554615 161 lcd.drawRect(2,0,0,47,1);
el13drt 12:eedda6554615 162 // left wall - brick line 1
el13drt 12:eedda6554615 163 for(int x=0; x<47; x+=4)
el13drt 12:eedda6554615 164 lcd.drawLine(1,1,1,48,2);
el13drt 12:eedda6554615 165 // left wall - brick line 2
el13drt 12:eedda6554615 166 for(int x=0; x<47; x+=4)
el13drt 12:eedda6554615 167 lcd.drawLine(0,0,0,48,2);
el13drt 12:eedda6554615 168
el13drt 12:eedda6554615 169 // x, y, w, h, fill - draw right wall
el13drt 12:eedda6554615 170 lcd.drawRect(81,0,0,47,1);
el13drt 12:eedda6554615 171 // right wall - brick line 1
el13drt 12:eedda6554615 172 for(int x=0; x<WIDTH; x+=4)
el13drt 12:eedda6554615 173 lcd.drawLine(82,0,82,48,2);
el13drt 12:eedda6554615 174 // right wall - brick line 2
el13drt 12:eedda6554615 175 for(int x=0; x<WIDTH; x+=4)
el13drt 12:eedda6554615 176 lcd.drawLine(83,1,83,48,2);
el13drt 12:eedda6554615 177
el13drt 12:eedda6554615 178 lcd.refresh();
el13drt 12:eedda6554615 179 }
el13drt 12:eedda6554615 180
el13drt 12:eedda6554615 181 //intro screen
el13drt 12:eedda6554615 182 void welcome()
el13drt 12:eedda6554615 183 {
el13drt 12:eedda6554615 184 //bottom border
el13drt 12:eedda6554615 185 lcd.drawRect(0,44,84,2,1);
el13drt 12:eedda6554615 186
el13drt 12:eedda6554615 187 //top border
el13drt 12:eedda6554615 188 lcd.drawRect(0,1,84,2,1);
el13drt 12:eedda6554615 189
el13drt 12:eedda6554615 190 //print initials 'DRT'
el13drt 12:eedda6554615 191 lcd.printChar('D',30,14);
el13drt 12:eedda6554615 192 wait(0.6);
el13drt 12:eedda6554615 193 lcd.printChar('R',37,14);
el13drt 12:eedda6554615 194 wait(0.6);
el13drt 12:eedda6554615 195 lcd.printChar('T',44,14);
el13drt 12:eedda6554615 196 wait(0.6);
el13drt 12:eedda6554615 197
el13drt 12:eedda6554615 198 //print 'presents...'
el13drt 12:eedda6554615 199 lcd.printString("presents...",8,21);
el13drt 12:eedda6554615 200 wait(1.0);
el13drt 12:eedda6554615 201
el13drt 12:eedda6554615 202 //dramatic flashing
el13drt 13:a1b3a373c5a4 203 buzzer.beep(5000,0.3);
el13drt 12:eedda6554615 204 lcd.inverseMode();
el13drt 12:eedda6554615 205 wait(0.2);
el13drt 12:eedda6554615 206 lcd.normalMode();
el13drt 12:eedda6554615 207 wait(0.2);
el13drt 13:a1b3a373c5a4 208 buzzer.beep(5000,0.3);
el13drt 12:eedda6554615 209 lcd.inverseMode();
el13drt 12:eedda6554615 210 wait(0.2);
el13drt 12:eedda6554615 211 lcd.normalMode();
el13drt 12:eedda6554615 212 wait(1.0);
el13drt 12:eedda6554615 213
el13drt 12:eedda6554615 214 //more dramatic flashing
el13drt 13:a1b3a373c5a4 215 buzzer.beep(5000,0.3);
el13drt 12:eedda6554615 216 lcd.inverseMode();
el13drt 12:eedda6554615 217 wait(0.2);
el13drt 12:eedda6554615 218 lcd.normalMode();
el13drt 12:eedda6554615 219 wait(0.2);
el13drt 13:a1b3a373c5a4 220 buzzer.beep(5000,0.3);
el13drt 12:eedda6554615 221 lcd.inverseMode();
el13drt 12:eedda6554615 222 wait(0.2);
el13drt 12:eedda6554615 223 lcd.normalMode();
el13drt 12:eedda6554615 224 wait(0.6);
el13drt 12:eedda6554615 225 }
el13drt 12:eedda6554615 226
el13drt 12:eedda6554615 227 //pixel ninja character
el13drt 12:eedda6554615 228 void pixelNinja()
el13drt 12:eedda6554615 229 {
el13drt 12:eedda6554615 230 //x, y, w, h, fill - left leg
el13drt 12:eedda6554615 231 lcd.drawRect(a1,39,0,7,1);
el13drt 12:eedda6554615 232 //right leg
el13drt 12:eedda6554615 233 lcd.drawRect(a2,39,0,7,1);
el13drt 12:eedda6554615 234 //centre stick
el13drt 12:eedda6554615 235 lcd.drawRect(a3,37,0,7,1);
el13drt 12:eedda6554615 236 //back of the head
el13drt 12:eedda6554615 237 lcd.drawRect(a1,33,0,4,1);
el13drt 12:eedda6554615 238 //top of the head
el13drt 12:eedda6554615 239 lcd.drawRect(a1,33,4,0,1);
el13drt 12:eedda6554615 240 //jaw
el13drt 12:eedda6554615 241 lcd.drawRect(a2,38,2,0,1);
el13drt 12:eedda6554615 242 //right shoulder
el13drt 12:eedda6554615 243 lcd.drawRect(a4,40,1,0,1);
el13drt 12:eedda6554615 244 //left shoulder
el13drt 12:eedda6554615 245 lcd.drawRect(a5,40,1,0,1);
el13drt 12:eedda6554615 246 //left arm
el13drt 12:eedda6554615 247 lcd.drawRect(a5,41,0,1,1);
el13drt 12:eedda6554615 248 //right arm
el13drt 12:eedda6554615 249 lcd.drawRect(a6,41,0,1,1);
el13drt 12:eedda6554615 250 //right eye
el13drt 12:eedda6554615 251 lcd.drawRect(a6,35,0,0,1);
el13drt 12:eedda6554615 252 //mouth piece
el13drt 12:eedda6554615 253 lcd.drawRect(a6,37,0,0,1);
el13drt 12:eedda6554615 254 //left eye
el13drt 12:eedda6554615 255 lcd.drawRect(a2,35,0,0,1);
el13drt 12:eedda6554615 256 //sword handle
el13drt 12:eedda6554615 257 lcd.drawRect(a7,36,0,0,1);
el13drt 12:eedda6554615 258 lcd.drawRect(a5,37,0,0,1);
el13drt 12:eedda6554615 259 lcd.drawRect(a8,38,0,0,1);
el13drt 12:eedda6554615 260 }
el13drt 12:eedda6554615 261
el13drt 12:eedda6554615 262 // stops ninja going through walls
el13drt 12:eedda6554615 263 void ninjaBoundaries()
el13drt 12:eedda6554615 264 {
el13drt 12:eedda6554615 265 if(a6 > 79 )
el13drt 12:eedda6554615 266 a6 = 79;
el13drt 12:eedda6554615 267 if(a4 > 78)
el13drt 12:eedda6554615 268 a4 = 78;
el13drt 12:eedda6554615 269 if(a2 > 77)
el13drt 12:eedda6554615 270 a2 = 77;
el13drt 12:eedda6554615 271 if(a3 > 76)
el13drt 12:eedda6554615 272 a3 = 76;
el13drt 12:eedda6554615 273 if(a1 > 75)
el13drt 12:eedda6554615 274 a1 = 75;
el13drt 12:eedda6554615 275 if(a8 > 74)
el13drt 12:eedda6554615 276 a8 = 74;
el13drt 12:eedda6554615 277 if(a5 > 73)
el13drt 12:eedda6554615 278 a5 = 73;
el13drt 12:eedda6554615 279 if(a7 > 72)
el13drt 12:eedda6554615 280 a7 = 72;
el13drt 12:eedda6554615 281
el13drt 12:eedda6554615 282 if(a6 < 11 )
el13drt 12:eedda6554615 283 a6 = 11;
el13drt 12:eedda6554615 284 if(a4 < 10)
el13drt 12:eedda6554615 285 a4 = 10;
el13drt 12:eedda6554615 286 if(a2 < 9)
el13drt 12:eedda6554615 287 a2 = 9;
el13drt 12:eedda6554615 288 if(a3 < 8)
el13drt 12:eedda6554615 289 a3 = 8;
el13drt 12:eedda6554615 290 if(a1 < 7)
el13drt 12:eedda6554615 291 a1 = 7;
el13drt 12:eedda6554615 292 if(a8 < 6)
el13drt 12:eedda6554615 293 a8 = 6;
el13drt 12:eedda6554615 294 if(a5 < 5)
el13drt 12:eedda6554615 295 a5 = 5;
el13drt 12:eedda6554615 296 if(a7 < 4)
el13drt 12:eedda6554615 297 a7 = 4;
el13drt 12:eedda6554615 298 }
el13drt 12:eedda6554615 299
el13drt 12:eedda6554615 300 // resets back to initial values
el13drt 12:eedda6554615 301 void resetGame()
el13drt 22:e5bfe0e7c508 302 {
el13drt 12:eedda6554615 303 score = 0;
el13drt 12:eedda6554615 304
el13drt 12:eedda6554615 305 a1 = 22;
el13drt 12:eedda6554615 306 a2 = 24;
el13drt 12:eedda6554615 307 a3 = 23;
el13drt 12:eedda6554615 308 a4 = 25;
el13drt 12:eedda6554615 309 a5 = 20;
el13drt 12:eedda6554615 310 a6 = 26;
el13drt 12:eedda6554615 311 a7 = 19;
el13drt 12:eedda6554615 312 a8 = 21;
el13drt 12:eedda6554615 313
el13drt 12:eedda6554615 314 // in this case the X values are given a
el13drt 12:eedda6554615 315 // new random variable each time the player
el13drt 12:eedda6554615 316 // dies or exits and starts a new game
el13drt 12:eedda6554615 317 randX1 = rand() % 74 + 5;
el13drt 12:eedda6554615 318 randX2 = rand() % 74 + 5;
el13drt 12:eedda6554615 319 randX3 = rand() % 74 + 5;
el13drt 12:eedda6554615 320 randX4 = rand() % 74 + 5;
el13drt 12:eedda6554615 321 randX5 = rand() % 74 + 5;
el13drt 12:eedda6554615 322 randX6 = rand() % 74 + 5;
el13drt 12:eedda6554615 323
el13drt 12:eedda6554615 324 randY1 = 0;
el13drt 12:eedda6554615 325 randY2 = 0;
el13drt 12:eedda6554615 326 randY3 = 0;
el13drt 12:eedda6554615 327 randY4 = 0;
el13drt 12:eedda6554615 328 randY5 = 0;
el13drt 12:eedda6554615 329 randY6 = 0;
el13drt 12:eedda6554615 330 lcd.clear();
el13drt 12:eedda6554615 331 }
el13drt 12:eedda6554615 332
el13drt 12:eedda6554615 333 // draws falling hazards
el13drt 12:eedda6554615 334 void hazards()
el13drt 12:eedda6554615 335 {
el13drt 12:eedda6554615 336 // X, Y, radius, fill
el13drt 12:eedda6554615 337 lcd.drawCircle(randX1,randY1,2,1);
el13drt 12:eedda6554615 338 lcd.drawCircle(randX2,randY2,2,1);
el13drt 12:eedda6554615 339 lcd.drawCircle(randX3,randY3,2,1);
el13drt 12:eedda6554615 340 lcd.drawCircle(randX4,randY4,2,1);
el13drt 12:eedda6554615 341 lcd.drawCircle(randX5,randY5,2,1);
el13drt 12:eedda6554615 342 lcd.drawCircle(randX6,randY6,2,1);
el13drt 12:eedda6554615 343
el13drt 12:eedda6554615 344 lcd.refresh();
el13drt 12:eedda6554615 345 }
el13drt 12:eedda6554615 346
el13drt 12:eedda6554615 347 // makes hazards fall - randomises X axis co-ordinates
el13drt 12:eedda6554615 348 void hazardFall()
el13drt 12:eedda6554615 349 {
el13drt 12:eedda6554615 350 // increments randY1 variables
el13drt 12:eedda6554615 351 // appearing to make them fall
el13drt 12:eedda6554615 352 randY1 = randY1 += fall;
el13drt 12:eedda6554615 353 randY2 = randY2 += fall;
el13drt 12:eedda6554615 354 randY3 = randY3 += fall;
el13drt 12:eedda6554615 355 randY4 = randY4 += fall;
el13drt 12:eedda6554615 356 randY5 = randY5 += fall;
el13drt 12:eedda6554615 357 randY6 = randY6 += fall;
el13drt 12:eedda6554615 358
el13drt 12:eedda6554615 359 // loops the objects once they 'hit the floor'
el13drt 12:eedda6554615 360 // this imitates a new set of objects falling
el13drt 12:eedda6554615 361
el13drt 12:eedda6554615 362 if (randY1>=48)
el13drt 12:eedda6554615 363 randY1=0;
el13drt 12:eedda6554615 364
el13drt 12:eedda6554615 365 if (randY2>=48)
el13drt 12:eedda6554615 366 randY2=0;
el13drt 12:eedda6554615 367
el13drt 12:eedda6554615 368 if (randY3>=48)
el13drt 12:eedda6554615 369 randY3=0;
el13drt 12:eedda6554615 370
el13drt 12:eedda6554615 371 if (randY4>=48)
el13drt 12:eedda6554615 372 randY4=0;
el13drt 12:eedda6554615 373
el13drt 12:eedda6554615 374 if (randY5>=48)
el13drt 12:eedda6554615 375 randY5=0;
el13drt 12:eedda6554615 376
el13drt 12:eedda6554615 377 // each time the objects loop, a new pseudo random value
el13drt 12:eedda6554615 378 // is assigned to the global variables (randX) to
el13drt 12:eedda6554615 379 // randomise their positions
el13drt 12:eedda6554615 380
el13drt 12:eedda6554615 381 if (randY6>=48) {
el13drt 12:eedda6554615 382 randY6=0;
el13drt 12:eedda6554615 383
el13drt 12:eedda6554615 384 score = score++;//increment score by 1 after each wave of hazards
el13drt 12:eedda6554615 385
el13drt 12:eedda6554615 386 randX1 = rand() % 74 + 5;// psuedo random number
el13drt 12:eedda6554615 387 randX2 = rand() % 74 + 5;// between 5 and 74
el13drt 12:eedda6554615 388 randX3 = rand() % 74 + 5;
el13drt 12:eedda6554615 389 randX4 = rand() % 74 + 5;
el13drt 12:eedda6554615 390 randX5 = rand() % 74 + 5;
el13drt 12:eedda6554615 391 randX6 = rand() % 74 + 5;
el13drt 12:eedda6554615 392 }
el13drt 12:eedda6554615 393 }
el13drt 12:eedda6554615 394
el13drt 12:eedda6554615 395 // clears old pixels and keeps set pixels
el13drt 12:eedda6554615 396 void startrek()
el13drt 12:eedda6554615 397 {
el13drt 12:eedda6554615 398 for (int i=3; i<81; i++)// loops through rows
el13drt 12:eedda6554615 399 for (int j=0; j<47; j++)
el13drt 12:eedda6554615 400 if (cells[i][j]) {// if there's a pixel then keep it
el13drt 12:eedda6554615 401 lcd.setPixel(i,j);
el13drt 12:eedda6554615 402 } else {
el13drt 12:eedda6554615 403 lcd.clearPixel(i,j);// else remove the old ones
el13drt 12:eedda6554615 404 }
el13drt 12:eedda6554615 405 lcd.refresh();
el13drt 12:eedda6554615 406 }
el13drt 12:eedda6554615 407
el13drt 12:eedda6554615 408 // clears old pixels and keeps set pixels
el13drt 12:eedda6554615 409 void refreshCursor1()
el13drt 12:eedda6554615 410 {
el13drt 12:eedda6554615 411 for (int i=70; i<80; i++)// loops through rows
el13drt 12:eedda6554615 412 for (int j=17; j<25; j++)
el13drt 12:eedda6554615 413 if (cells[i][j]) {// if there's a pixel then keep it
el13drt 12:eedda6554615 414 lcd.setPixel(i,j);
el13drt 12:eedda6554615 415 } else {
el13drt 12:eedda6554615 416 lcd.clearPixel(i,j);// else remove the old ones
el13drt 12:eedda6554615 417 }
el13drt 12:eedda6554615 418 lcd.refresh();
el13drt 12:eedda6554615 419 }
el13drt 12:eedda6554615 420
el13drt 12:eedda6554615 421 // clears old pixels and keeps set pixels
el13drt 12:eedda6554615 422 void refreshCursor2()
el13drt 12:eedda6554615 423 {
el13drt 12:eedda6554615 424 for (int i=70; i<80; i++)// loops through rows
el13drt 12:eedda6554615 425 for (int j=25; j<32; j++)
el13drt 12:eedda6554615 426 if (cells[i][j]) {// if there's a pixel then keep it
el13drt 12:eedda6554615 427 lcd.setPixel(i,j);
el13drt 12:eedda6554615 428 } else {
el13drt 12:eedda6554615 429 lcd.clearPixel(i,j);// else remove the old ones
el13drt 12:eedda6554615 430 }
el13drt 12:eedda6554615 431 lcd.refresh();
el13drt 12:eedda6554615 432 }
el13drt 12:eedda6554615 433
el13drt 12:eedda6554615 434 // clears old pixels and keeps set pixels
el13drt 12:eedda6554615 435 void refreshCursor3()
el13drt 12:eedda6554615 436 {
el13drt 12:eedda6554615 437 for (int i=70; i<80; i++)// loops through rows
el13drt 12:eedda6554615 438 for (int j=32; j<40; j++)
el13drt 12:eedda6554615 439 if (cells[i][j]) {// if there's a pixel then keep it
el13drt 12:eedda6554615 440 lcd.setPixel(i,j);
el13drt 12:eedda6554615 441 } else {
el13drt 12:eedda6554615 442 lcd.clearPixel(i,j);// else remove the old ones
el13drt 12:eedda6554615 443 }
el13drt 12:eedda6554615 444 lcd.refresh();
el13drt 12:eedda6554615 445 }
el13drt 12:eedda6554615 446
el13drt 17:242ccf6a8442 447 // beep/light when buttons are closed
el13drt 17:242ccf6a8442 448 void actionButtons()
el13drt 17:242ccf6a8442 449 {
el13drt 17:242ccf6a8442 450 if((FX == 0)&&(buttonA||buttonB)) {
el13drt 17:242ccf6a8442 451 ledY = 1;
el13drt 17:242ccf6a8442 452 buzzer.beep(1500,0.3);
el13drt 17:242ccf6a8442 453 }
el13drt 17:242ccf6a8442 454 if (buttonA || buttonB) {
el13drt 17:242ccf6a8442 455 ledY = 1;
el13drt 17:242ccf6a8442 456 } else {
el13drt 17:242ccf6a8442 457 ledY = 0;
el13drt 17:242ccf6a8442 458 }
el13drt 17:242ccf6a8442 459 }
el13drt 17:242ccf6a8442 460
el13drt 12:eedda6554615 461 // presents main menu options
el13drt 12:eedda6554615 462 void mainMenu(int& mainOption)
el13drt 12:eedda6554615 463 {
el13drt 17:242ccf6a8442 464 actionButtons();//set audible/light for button
el13drt 12:eedda6554615 465
el13drt 12:eedda6554615 466 // joystick selection
el13drt 14:c2c969e1c6e8 467 if (printFlag) {//if flag set, clear flag and print joystick values to serial port
el13drt 12:eedda6554615 468 printFlag = 0;
el13drt 12:eedda6554615 469
el13drt 12:eedda6554615 470 // option up
el13drt 12:eedda6554615 471 if (joystick.direction == UP) {
el13drt 12:eedda6554615 472 serial.printf(" UP\n");
el13drt 12:eedda6554615 473 mainOption = mainOption--;
el13drt 12:eedda6554615 474 if (mainOption < 0)mainOption = 0;
el13drt 12:eedda6554615 475 }
el13drt 12:eedda6554615 476 // option down
el13drt 12:eedda6554615 477 if (joystick.direction == DOWN) {
el13drt 12:eedda6554615 478 serial.printf(" DOWN\n");
el13drt 12:eedda6554615 479 mainOption = mainOption++;
el13drt 12:eedda6554615 480 if (mainOption > 2)mainOption = 2;
el13drt 12:eedda6554615 481 }
el13drt 12:eedda6554615 482 // Centre / Unknown orientation
el13drt 12:eedda6554615 483 if (joystick.direction == CENTRE)
el13drt 12:eedda6554615 484 serial.printf(" CENTRE\n");
el13drt 12:eedda6554615 485 if (joystick.direction == UNKNOWN)
el13drt 12:eedda6554615 486 serial.printf(" Unsupported direction\n");
el13drt 12:eedda6554615 487
el13drt 12:eedda6554615 488 // 'Play Game' option 1
el13drt 12:eedda6554615 489 if (mainOption == 0) {
el13drt 12:eedda6554615 490 lcd.printString("Play Game",3,4);
el13drt 12:eedda6554615 491 }
el13drt 12:eedda6554615 492 // 'High Scores' option 2
el13drt 12:eedda6554615 493 if (mainOption == 1) {
el13drt 12:eedda6554615 494 lcd.printString(" Scores ",3,4);
el13drt 12:eedda6554615 495 }
el13drt 12:eedda6554615 496 // 'Options' option 3
el13drt 12:eedda6554615 497 if (mainOption == 2) {
el13drt 12:eedda6554615 498 lcd.printString(" Options ",3,4);
el13drt 12:eedda6554615 499 }
el13drt 12:eedda6554615 500 }
el13drt 12:eedda6554615 501 }
el13drt 12:eedda6554615 502
el13drt 12:eedda6554615 503 // draws main menu
el13drt 12:eedda6554615 504 void drawMainMenu()
el13drt 12:eedda6554615 505 {
el13drt 12:eedda6554615 506 //bottom border
el13drt 12:eedda6554615 507 lcd.drawRect(0,47,84,0,1);
el13drt 12:eedda6554615 508 //top border
el13drt 12:eedda6554615 509 lcd.drawRect(0,0,84,2,1);
el13drt 12:eedda6554615 510
el13drt 12:eedda6554615 511 //print 'Xtreme Tower'
el13drt 12:eedda6554615 512 lcd.printString("Xtreme",4,25);
el13drt 12:eedda6554615 513 lcd.printString("Tower",44,25);
el13drt 12:eedda6554615 514
el13drt 12:eedda6554615 515 //title outline
el13drt 12:eedda6554615 516 lcd.drawRect(3,6,77,10,0);
el13drt 12:eedda6554615 517
el13drt 12:eedda6554615 518 ////castle //x, y, w, h, fill//////////////////////
el13drt 12:eedda6554615 519
el13drt 12:eedda6554615 520 //castle main bulk
el13drt 12:eedda6554615 521 lcd.drawRect(59,32,21,8,1);
el13drt 12:eedda6554615 522
el13drt 12:eedda6554615 523 //left window bulk
el13drt 12:eedda6554615 524 lcd.drawRect(59,22,2,10,1);
el13drt 12:eedda6554615 525 //centre left window bulk
el13drt 12:eedda6554615 526 lcd.drawRect(65,22,2,10,1);
el13drt 12:eedda6554615 527 //centre right window bulk
el13drt 12:eedda6554615 528 lcd.drawRect(72,22,2,10,1);
el13drt 12:eedda6554615 529 //right window bulk
el13drt 12:eedda6554615 530 lcd.drawRect(78,22,2,10,1);
el13drt 12:eedda6554615 531 //central window bulk
el13drt 12:eedda6554615 532 lcd.drawRect(68,25,3,7,1);
el13drt 12:eedda6554615 533
el13drt 12:eedda6554615 534 //central window bulk
el13drt 12:eedda6554615 535 lcd.drawRect(75,28,0,0,1);
el13drt 12:eedda6554615 536 lcd.drawRect(77,28,0,0,1);
el13drt 12:eedda6554615 537 lcd.drawRect(64,28,0,0,1);
el13drt 12:eedda6554615 538 lcd.drawRect(62,28,0,0,1);
el13drt 12:eedda6554615 539
el13drt 12:eedda6554615 540 //above left window bulk
el13drt 12:eedda6554615 541 lcd.drawRect(62,25,3,2,1);
el13drt 12:eedda6554615 542 //above right window bulk
el13drt 12:eedda6554615 543 lcd.drawRect(75,25,2,2,1);
el13drt 12:eedda6554615 544
el13drt 12:eedda6554615 545 //lower right line
el13drt 12:eedda6554615 546 lcd.drawRect(71,42,9,0,1);
el13drt 12:eedda6554615 547 //upper right line
el13drt 12:eedda6554615 548 lcd.drawRect(70,41,10,0,1);
el13drt 12:eedda6554615 549
el13drt 12:eedda6554615 550 //upper left line
el13drt 12:eedda6554615 551 lcd.drawRect(59,41,10,0,1);
el13drt 12:eedda6554615 552 //lower left line
el13drt 12:eedda6554615 553 lcd.drawRect(59,42,9,0,1);
el13drt 12:eedda6554615 554
el13drt 12:eedda6554615 555 //bottom left bulk
el13drt 12:eedda6554615 556 lcd.drawRect(59,43,8,3,1);
el13drt 12:eedda6554615 557 //bottom right bulk
el13drt 12:eedda6554615 558 lcd.drawRect(72,43,8,3,1);
el13drt 12:eedda6554615 559
el13drt 12:eedda6554615 560 //option arrows - lower
el13drt 12:eedda6554615 561 lcd.drawRect(27,42,4,0,1);
el13drt 12:eedda6554615 562 lcd.drawRect(28,43,2,0,1);
el13drt 12:eedda6554615 563 lcd.drawRect(29,44,0,0,1);
el13drt 12:eedda6554615 564
el13drt 12:eedda6554615 565 //option arrows - higher
el13drt 12:eedda6554615 566 lcd.drawRect(27,29,4,0,1);
el13drt 12:eedda6554615 567 lcd.drawRect(28,28,2,0,1);
el13drt 12:eedda6554615 568 lcd.drawRect(29,27,0,0,1);
el13drt 12:eedda6554615 569 }
el13drt 12:eedda6554615 570
el13drt 12:eedda6554615 571 // presents exit menu options
el13drt 12:eedda6554615 572 void exitMenu(int& exitOption)
el13drt 12:eedda6554615 573 {
el13drt 17:242ccf6a8442 574 actionButtons();
el13drt 14:c2c969e1c6e8 575 if (printFlag) {//if flag set, clear flag and print joystick values to serial port
el13drt 12:eedda6554615 576 printFlag = 0;
el13drt 12:eedda6554615 577
el13drt 12:eedda6554615 578 // check joystick direction
el13drt 12:eedda6554615 579 if (joystick.direction == LEFT) {
el13drt 12:eedda6554615 580 serial.printf(" LEFT\n");
el13drt 12:eedda6554615 581 exitOption--;
el13drt 12:eedda6554615 582 if(exitOption < 0)exitOption = 0;
el13drt 12:eedda6554615 583 }
el13drt 12:eedda6554615 584 if (joystick.direction == RIGHT) {
el13drt 12:eedda6554615 585 serial.printf(" RIGHT\n");
el13drt 12:eedda6554615 586 exitOption++;
el13drt 12:eedda6554615 587 if(exitOption > 1)exitOption = 1;
el13drt 12:eedda6554615 588 }
el13drt 12:eedda6554615 589 if (joystick.direction == CENTRE)
el13drt 12:eedda6554615 590 serial.printf(" CENTRE\n");
el13drt 12:eedda6554615 591 if (joystick.direction == UNKNOWN)
el13drt 12:eedda6554615 592 serial.printf(" Unsupported direction\n");
el13drt 12:eedda6554615 593 }
el13drt 12:eedda6554615 594 // draws option cursor
el13drt 12:eedda6554615 595 if(exitOption == 0) {
el13drt 12:eedda6554615 596 lcd.printString("YES",29,27);
el13drt 12:eedda6554615 597 }
el13drt 12:eedda6554615 598 if(exitOption == 1) {
el13drt 12:eedda6554615 599 lcd.printString(" NO",29,27);
el13drt 12:eedda6554615 600 }
el13drt 12:eedda6554615 601 }
el13drt 12:eedda6554615 602
el13drt 12:eedda6554615 603 // draws exit menu
el13drt 12:eedda6554615 604 void drawExitMenu()
el13drt 12:eedda6554615 605 {
el13drt 12:eedda6554615 606 // set exit menu
el13drt 12:eedda6554615 607 lcd.clear();
el13drt 12:eedda6554615 608 lcd.drawRect(8,6,70,30,0);//title outline
el13drt 12:eedda6554615 609 lcd.printString("Exit Game?",10,25);
el13drt 12:eedda6554615 610 backGround();
el13drt 12:eedda6554615 611
el13drt 12:eedda6554615 612 // option arrow - right
el13drt 12:eedda6554615 613 lcd.drawRect(55,25,0,4,1);
el13drt 12:eedda6554615 614 lcd.drawRect(56,26,0,2,1);
el13drt 12:eedda6554615 615 lcd.drawRect(57,27,0,0,1);
el13drt 12:eedda6554615 616
el13drt 12:eedda6554615 617 // option arrow - left
el13drt 12:eedda6554615 618 lcd.drawRect(27,25,0,4,1);
el13drt 12:eedda6554615 619 lcd.drawRect(26,26,0,2,1);
el13drt 12:eedda6554615 620 lcd.drawRect(25,27,0,0,1);
el13drt 12:eedda6554615 621 }
el13drt 12:eedda6554615 622
el13drt 12:eedda6554615 623 // presents the options
el13drt 12:eedda6554615 624 void optionsMenu(int& option)
el13drt 12:eedda6554615 625 {
el13drt 12:eedda6554615 626 // joystick selection
el13drt 12:eedda6554615 627 if (printFlag) { //if flag set, clear flag and print joystick values to serial port
el13drt 12:eedda6554615 628 printFlag = 0;
el13drt 12:eedda6554615 629
el13drt 12:eedda6554615 630 // option up
el13drt 12:eedda6554615 631 if (joystick.direction == UP) {
el13drt 12:eedda6554615 632 serial.printf(" UP\n");
el13drt 12:eedda6554615 633 option = option--;
el13drt 12:eedda6554615 634 if (option < 0)option = 0;
el13drt 12:eedda6554615 635 }
el13drt 12:eedda6554615 636 // option down
el13drt 12:eedda6554615 637 if (joystick.direction == DOWN) {
el13drt 12:eedda6554615 638 serial.printf(" DOWN\n");
el13drt 12:eedda6554615 639 option = option++;
el13drt 12:eedda6554615 640 if (option > 1)option = 1;
el13drt 12:eedda6554615 641 }
el13drt 12:eedda6554615 642 // Centre / Unknown orientation
el13drt 12:eedda6554615 643 if (joystick.direction == CENTRE)
el13drt 12:eedda6554615 644 serial.printf(" CENTRE\n");
el13drt 12:eedda6554615 645 if (joystick.direction == UNKNOWN)
el13drt 12:eedda6554615 646 serial.printf(" Unsupported direction\n");
el13drt 12:eedda6554615 647
el13drt 12:eedda6554615 648 // 'Difficulty' option 1
el13drt 12:eedda6554615 649 if (option == 0) {
el13drt 12:eedda6554615 650 lcd.drawCircle(72,27,2,1);
el13drt 12:eedda6554615 651 refreshCursor3();
el13drt 12:eedda6554615 652 }
el13drt 12:eedda6554615 653 // 'Sound FX' option 2
el13drt 12:eedda6554615 654 if (option == 1) {
el13drt 12:eedda6554615 655 lcd.drawCircle(72,35,2,1);
el13drt 12:eedda6554615 656 refreshCursor2();
el13drt 12:eedda6554615 657 }
el13drt 12:eedda6554615 658 }
el13drt 12:eedda6554615 659 }
el13drt 12:eedda6554615 660
el13drt 12:eedda6554615 661 // draws options menu
el13drt 12:eedda6554615 662 void drawOptionsMenu()
el13drt 12:eedda6554615 663 {
el13drt 12:eedda6554615 664 lcd.clear();//clear screen
el13drt 12:eedda6554615 665 backGround();
el13drt 12:eedda6554615 666 lcd.drawRect(3,6,77,10,0);//title outline
el13drt 12:eedda6554615 667 lcd.drawRect(0,47,84,0,1);//bottom border
el13drt 12:eedda6554615 668 lcd.drawRect(0,0,84,2,1);//top border
el13drt 12:eedda6554615 669 lcd.printString("Options",20,7);//title
el13drt 12:eedda6554615 670 lcd.printString("Difficulty",3,9);
el13drt 12:eedda6554615 671 lcd.printString("Sound FX",3,10);
el13drt 12:eedda6554615 672 }
el13drt 12:eedda6554615 673
el13drt 12:eedda6554615 674 // present difficulty options
el13drt 12:eedda6554615 675 void difficultyMenu(int& subOption)
el13drt 12:eedda6554615 676 {
el13drt 17:242ccf6a8442 677 actionButtons();
el13drt 12:eedda6554615 678
el13drt 12:eedda6554615 679 // joystick selection
el13drt 12:eedda6554615 680 if (printFlag) {//if flag set, clear flag,print joystick values
el13drt 12:eedda6554615 681 printFlag = 0;
el13drt 12:eedda6554615 682
el13drt 12:eedda6554615 683 // option up
el13drt 12:eedda6554615 684 if (joystick.direction == UP) {
el13drt 12:eedda6554615 685 serial.printf(" UP\n");
el13drt 12:eedda6554615 686 subOption = subOption--;
el13drt 12:eedda6554615 687 if (subOption < 0)subOption = 0;
el13drt 12:eedda6554615 688 }
el13drt 12:eedda6554615 689 // option down
el13drt 12:eedda6554615 690 if (joystick.direction == DOWN) {
el13drt 12:eedda6554615 691 serial.printf(" DOWN\n");
el13drt 12:eedda6554615 692 subOption = subOption++;
el13drt 12:eedda6554615 693 if (subOption > 2)subOption = 2;
el13drt 12:eedda6554615 694 }
el13drt 12:eedda6554615 695 // Centre / Unknown orientation
el13drt 12:eedda6554615 696 if (joystick.direction == CENTRE)
el13drt 12:eedda6554615 697 serial.printf(" CENTRE\n");
el13drt 12:eedda6554615 698 if (joystick.direction == UNKNOWN)
el13drt 12:eedda6554615 699 serial.printf(" Unsupported direction\n");
el13drt 12:eedda6554615 700
el13drt 12:eedda6554615 701 // 'Easy' option 1
el13drt 12:eedda6554615 702 if (subOption == 0) {
el13drt 12:eedda6554615 703 lcd.drawCircle(72,19,2,1);
el13drt 12:eedda6554615 704 refreshCursor2();
el13drt 12:eedda6554615 705 refreshCursor3();
el13drt 18:c38e1966d870 706 if(buttonFlagA) { //select easy
el13drt 18:c38e1966d870 707 buttonFlagA = 0;
el13drt 12:eedda6554615 708 fall = 1;
el13drt 12:eedda6554615 709 }
el13drt 12:eedda6554615 710 }
el13drt 12:eedda6554615 711 // 'Normal' option 2
el13drt 12:eedda6554615 712 if (subOption == 1) {
el13drt 12:eedda6554615 713 lcd.drawCircle(72,27,2,1);
el13drt 12:eedda6554615 714 refreshCursor1();
el13drt 12:eedda6554615 715 refreshCursor3();
el13drt 12:eedda6554615 716
el13drt 18:c38e1966d870 717 if(buttonFlagA) { //select normal
el13drt 18:c38e1966d870 718 buttonFlagA = 0;
el13drt 12:eedda6554615 719 fall = 2;
el13drt 12:eedda6554615 720 }
el13drt 12:eedda6554615 721 }
el13drt 12:eedda6554615 722 // 'Forget It' option 3
el13drt 12:eedda6554615 723 if (subOption == 2) {
el13drt 12:eedda6554615 724 lcd.drawCircle(72,35,2,1);
el13drt 12:eedda6554615 725 refreshCursor1();
el13drt 12:eedda6554615 726 refreshCursor2();
el13drt 12:eedda6554615 727
el13drt 18:c38e1966d870 728 if(buttonFlagA) { //select difficult
el13drt 18:c38e1966d870 729 buttonFlagA = 0;
el13drt 12:eedda6554615 730 fall = 3;
el13drt 12:eedda6554615 731 }
el13drt 12:eedda6554615 732 }
el13drt 12:eedda6554615 733 }
el13drt 12:eedda6554615 734 }
el13drt 12:eedda6554615 735
el13drt 12:eedda6554615 736 // draw difficulty settings
el13drt 12:eedda6554615 737 void drawDifficultyMenu()
el13drt 12:eedda6554615 738 {
el13drt 12:eedda6554615 739 lcd.clear();
el13drt 12:eedda6554615 740 backGround();
el13drt 12:eedda6554615 741 lcd.drawRect(0,47,84,0,1);//bottom border
el13drt 12:eedda6554615 742 lcd.drawRect(0,0,84,2,1);//top border
el13drt 12:eedda6554615 743 lcd.printString("*Difficulty*",5,7);//title
el13drt 12:eedda6554615 744 lcd.printString("Easy",5,8);//title
el13drt 12:eedda6554615 745 lcd.printString("Normal",5,9);//title
el13drt 12:eedda6554615 746 lcd.printString("Forget It",5,10);//title
el13drt 12:eedda6554615 747 }
el13drt 12:eedda6554615 748
el13drt 13:a1b3a373c5a4 749 // present sound FX options
el13drt 13:a1b3a373c5a4 750 void soundFXMenu(int& fxOption)
el13drt 13:a1b3a373c5a4 751 {
el13drt 17:242ccf6a8442 752 actionButtons();
el13drt 13:a1b3a373c5a4 753
el13drt 13:a1b3a373c5a4 754 // joystick selection
el13drt 13:a1b3a373c5a4 755 if (printFlag) {//if flag set, clear flag,print joystick values
el13drt 13:a1b3a373c5a4 756 printFlag = 0;
el13drt 13:a1b3a373c5a4 757
el13drt 13:a1b3a373c5a4 758 // option up
el13drt 13:a1b3a373c5a4 759 if (joystick.direction == UP) {
el13drt 13:a1b3a373c5a4 760 serial.printf(" UP\n");
el13drt 13:a1b3a373c5a4 761 fxOption = fxOption--;
el13drt 13:a1b3a373c5a4 762 if (fxOption < 0)fxOption = 0;
el13drt 13:a1b3a373c5a4 763 }
el13drt 13:a1b3a373c5a4 764 // option down
el13drt 13:a1b3a373c5a4 765 if (joystick.direction == DOWN) {
el13drt 13:a1b3a373c5a4 766 serial.printf(" DOWN\n");
el13drt 13:a1b3a373c5a4 767 fxOption = fxOption++;
el13drt 20:993c12c6a7bc 768 if (fxOption > 1)fxOption = 1;
el13drt 13:a1b3a373c5a4 769 }
el13drt 13:a1b3a373c5a4 770 // Centre / Unknown orientation
el13drt 13:a1b3a373c5a4 771 if (joystick.direction == CENTRE)
el13drt 13:a1b3a373c5a4 772 serial.printf(" CENTRE\n");
el13drt 13:a1b3a373c5a4 773 if (joystick.direction == UNKNOWN)
el13drt 13:a1b3a373c5a4 774 serial.printf(" Unsupported direction\n");
el13drt 17:242ccf6a8442 775 }
el13drt 13:a1b3a373c5a4 776
el13drt 17:242ccf6a8442 777 // 'ON' option 1
el13drt 17:242ccf6a8442 778 if (fxOption == 0) {
el13drt 17:242ccf6a8442 779 lcd.drawCircle(72,27,2,1);//draw cursor 'ON'
el13drt 17:242ccf6a8442 780 refreshCursor1();
el13drt 17:242ccf6a8442 781 refreshCursor3();
el13drt 13:a1b3a373c5a4 782
el13drt 17:242ccf6a8442 783 if(buttonFlagA) {
el13drt 17:242ccf6a8442 784 buttonFlagA =0;
el13drt 17:242ccf6a8442 785 FX = 0;
el13drt 19:e0fd493816ae 786 serial.printf("FX = %d\n",FX);
el13drt 13:a1b3a373c5a4 787 }
el13drt 17:242ccf6a8442 788 }
el13drt 17:242ccf6a8442 789 // 'OFF' option 2
el13drt 17:242ccf6a8442 790 if (fxOption == 1) {
el13drt 17:242ccf6a8442 791 lcd.drawCircle(72,35,2,1);//draw cursor 'OFF'
el13drt 17:242ccf6a8442 792 refreshCursor1();
el13drt 17:242ccf6a8442 793 refreshCursor2();
el13drt 13:a1b3a373c5a4 794
el13drt 17:242ccf6a8442 795 if(buttonFlagA) {
el13drt 17:242ccf6a8442 796 buttonFlagA =0;
el13drt 17:242ccf6a8442 797 FX = 1;
el13drt 19:e0fd493816ae 798 serial.printf("FX = %d\n",FX);
el13drt 13:a1b3a373c5a4 799 }
el13drt 13:a1b3a373c5a4 800 }
el13drt 13:a1b3a373c5a4 801 }
el13drt 13:a1b3a373c5a4 802
el13drt 13:a1b3a373c5a4 803 // draw Sound FX settings
el13drt 13:a1b3a373c5a4 804 void drawSoundFXMenu()
el13drt 13:a1b3a373c5a4 805 {
el13drt 13:a1b3a373c5a4 806 lcd.clear();
el13drt 13:a1b3a373c5a4 807 backGround();
el13drt 13:a1b3a373c5a4 808 lcd.drawRect(0,47,84,0,1);//bottom border
el13drt 13:a1b3a373c5a4 809 lcd.drawRect(0,0,84,2,1);//top border
el13drt 13:a1b3a373c5a4 810 lcd.printString("*Sound FX*",10,7);//title
el13drt 13:a1b3a373c5a4 811 lcd.printString("ON",35,9);//title
el13drt 13:a1b3a373c5a4 812 lcd.printString("OFF",33,10);//title
el13drt 13:a1b3a373c5a4 813 }
el13drt 13:a1b3a373c5a4 814
el13drt 21:1fbbd8ebb3d9 815 // if any of the high scores are beaten, they are replaced.
el13drt 22:e5bfe0e7c508 816 // player enters initials using array
el13drt 21:1fbbd8ebb3d9 817 void newScore()
el13drt 22:e5bfe0e7c508 818 {
el13drt 21:1fbbd8ebb3d9 819 if(score >= highScore3) {
el13drt 22:e5bfe0e7c508 820
el13drt 22:e5bfe0e7c508 821 int initialCounter = 0;
el13drt 22:e5bfe0e7c508 822
el13drt 22:e5bfe0e7c508 823 lcd.clear();
el13drt 22:e5bfe0e7c508 824 backGround();
el13drt 22:e5bfe0e7c508 825 lcd.printString("High Score!!",10,0);//title
el13drt 22:e5bfe0e7c508 826 lcd.printString("Enter ID",17,4);//title
el13drt 22:e5bfe0e7c508 827
el13drt 22:e5bfe0e7c508 828 int n;//local variable used for storing temporary global variable
el13drt 22:e5bfe0e7c508 829
el13drt 22:e5bfe0e7c508 830 // if player beats High Score 3, replace it with new score
el13drt 22:e5bfe0e7c508 831 if(score >= highScore3) {
el13drt 22:e5bfe0e7c508 832 n = score;
el13drt 22:e5bfe0e7c508 833 highScore3 = n;
el13drt 22:e5bfe0e7c508 834 }
el13drt 22:e5bfe0e7c508 835 // if player beats High Score 3 and 2, replace HighScore2 with new score
el13drt 22:e5bfe0e7c508 836 if(score >= highScore2) {
el13drt 22:e5bfe0e7c508 837 highScore3 = highScore2;
el13drt 22:e5bfe0e7c508 838 n = score;
el13drt 22:e5bfe0e7c508 839 highScore2 = n;
el13drt 22:e5bfe0e7c508 840 }
el13drt 22:e5bfe0e7c508 841 // if player beats High Score 1, 2 and 3, replace highScore1 with new score
el13drt 22:e5bfe0e7c508 842 if(score >= highScore1) {
el13drt 21:1fbbd8ebb3d9 843
el13drt 22:e5bfe0e7c508 844 highScore3 = highScore2;
el13drt 22:e5bfe0e7c508 845 highScore2 = highScore1;
el13drt 22:e5bfe0e7c508 846 n = score;
el13drt 22:e5bfe0e7c508 847 highScore1 = n;
el13drt 22:e5bfe0e7c508 848 }
el13drt 22:e5bfe0e7c508 849 while(1) {
el13drt 22:e5bfe0e7c508 850
el13drt 22:e5bfe0e7c508 851 actionButtons();
el13drt 22:e5bfe0e7c508 852
el13drt 22:e5bfe0e7c508 853 // joystick selection
el13drt 22:e5bfe0e7c508 854 if (printFlag) {//if flag set, clear flag,print joystick values
el13drt 22:e5bfe0e7c508 855 printFlag = 0;
el13drt 22:e5bfe0e7c508 856
el13drt 22:e5bfe0e7c508 857 // option up
el13drt 22:e5bfe0e7c508 858 if (joystick.direction == UP) {
el13drt 22:e5bfe0e7c508 859 serial.printf(" UP\n");
el13drt 22:e5bfe0e7c508 860 initialCounter = initialCounter--;
el13drt 22:e5bfe0e7c508 861 if (initialCounter < 0)initialCounter = 0;
el13drt 22:e5bfe0e7c508 862 }
el13drt 22:e5bfe0e7c508 863 // option down
el13drt 22:e5bfe0e7c508 864 if (joystick.direction == DOWN) {
el13drt 22:e5bfe0e7c508 865 serial.printf(" DOWN\n");
el13drt 22:e5bfe0e7c508 866 initialCounter = initialCounter++;
el13drt 22:e5bfe0e7c508 867 if (initialCounter > 25)initialCounter = 25;
el13drt 22:e5bfe0e7c508 868 }
el13drt 22:e5bfe0e7c508 869 // Centre / Unknown orientation
el13drt 22:e5bfe0e7c508 870 if (joystick.direction == CENTRE)
el13drt 22:e5bfe0e7c508 871 serial.printf(" CENTRE\n");
el13drt 22:e5bfe0e7c508 872 if (joystick.direction == UNKNOWN)
el13drt 22:e5bfe0e7c508 873 serial.printf(" Unsupported direction\n");
el13drt 22:e5bfe0e7c508 874 }
el13drt 22:e5bfe0e7c508 875 //inwhile
el13drt 22:e5bfe0e7c508 876
el13drt 22:e5bfe0e7c508 877 }
el13drt 21:1fbbd8ebb3d9 878 }
el13drt 21:1fbbd8ebb3d9 879 }
el13drt 21:1fbbd8ebb3d9 880
el13drt 12:eedda6554615 881 // actual game
el13drt 12:eedda6554615 882 void game(int& exitFlag, int& exitOption)
el13drt 12:eedda6554615 883 {
el13drt 17:242ccf6a8442 884 actionButtons();
el13drt 12:eedda6554615 885 lcd.clear();//clears screen
el13drt 12:eedda6554615 886 backGround();//draw background
el13drt 12:eedda6554615 887
el13drt 12:eedda6554615 888 ///game///
el13drt 12:eedda6554615 889 while(1) {
el13drt 12:eedda6554615 890 // print score - top left of display
el13drt 12:eedda6554615 891 char buffer[14];//create buffer for string
el13drt 12:eedda6554615 892 int length = sprintf(buffer,"Level:%d",score);//insert buffer
el13drt 12:eedda6554615 893 if (length <= 14) //ensure length is smaller than screen
el13drt 12:eedda6554615 894 lcd.printString(buffer,3,0);//display
el13drt 12:eedda6554615 895
el13drt 17:242ccf6a8442 896 actionButtons();
el13drt 12:eedda6554615 897 pixelNinja();//set character
el13drt 12:eedda6554615 898 hazards();//initiates hazards
el13drt 12:eedda6554615 899 hazardFall();//increments hazards towards floor
el13drt 12:eedda6554615 900
el13drt 12:eedda6554615 901 if (printFlag) { //if flag set, clear flag and print joystick values to serial port
el13drt 12:eedda6554615 902 printFlag = 0;
el13drt 12:eedda6554615 903
el13drt 12:eedda6554615 904 // check joystick direction
el13drt 12:eedda6554615 905 if (joystick.direction == LEFT) {
el13drt 12:eedda6554615 906 serial.printf(" LEFT\n");
el13drt 12:eedda6554615 907 a1 = a1-=2;
el13drt 12:eedda6554615 908 a2 = a2-=2;
el13drt 12:eedda6554615 909 a3 = a3-=2;
el13drt 12:eedda6554615 910 a4 = a4-=2;
el13drt 12:eedda6554615 911 a5 = a5-=2;
el13drt 12:eedda6554615 912 a6 = a6-=2;
el13drt 12:eedda6554615 913 a7 = a7-=2;
el13drt 12:eedda6554615 914 a8 = a8-=2;
el13drt 12:eedda6554615 915 ninjaBoundaries();
el13drt 12:eedda6554615 916 }
el13drt 12:eedda6554615 917 if (joystick.direction == RIGHT) {
el13drt 12:eedda6554615 918 serial.printf(" RIGHT\n");
el13drt 12:eedda6554615 919 a1 = a1+=2;
el13drt 12:eedda6554615 920 a2 = a2+=2;
el13drt 12:eedda6554615 921 a3 = a3+=2;
el13drt 12:eedda6554615 922 a4 = a4+=2;
el13drt 12:eedda6554615 923 a5 = a5+=2;
el13drt 12:eedda6554615 924 a6 = a6+=2;
el13drt 12:eedda6554615 925 a7 = a7+=2;
el13drt 12:eedda6554615 926 a8 = a8+=2;
el13drt 12:eedda6554615 927 ninjaBoundaries();
el13drt 12:eedda6554615 928 }
el13drt 22:e5bfe0e7c508 929
el13drt 21:1fbbd8ebb3d9 930 /////////////////////readWrite();
el13drt 22:e5bfe0e7c508 931
el13drt 12:eedda6554615 932 if (joystick.direction == CENTRE)
el13drt 12:eedda6554615 933 serial.printf(" CENTRE\n");
el13drt 12:eedda6554615 934 if (joystick.direction == UNKNOWN)
el13drt 12:eedda6554615 935 serial.printf(" Unsupported direction\n");
el13drt 22:e5bfe0e7c508 936
el13drt 12:eedda6554615 937 // integer to represent character being
el13drt 12:eedda6554615 938 // struck by falling object
el13drt 12:eedda6554615 939 int contactPoint = 0;
el13drt 12:eedda6554615 940
el13drt 12:eedda6554615 941 // contact points
el13drt 12:eedda6554615 942 if(lcd.getPixel((a1+4),32))
el13drt 12:eedda6554615 943 contactPoint++;
el13drt 12:eedda6554615 944 if(lcd.getPixel((a1),32))
el13drt 12:eedda6554615 945 contactPoint++;
el13drt 12:eedda6554615 946 if(lcd.getPixel((a7),32))
el13drt 12:eedda6554615 947 contactPoint++;
el13drt 12:eedda6554615 948
el13drt 12:eedda6554615 949 // if contact point is not zero
el13drt 12:eedda6554615 950 // character has been hit
el13drt 12:eedda6554615 951 // and the game ends
el13drt 12:eedda6554615 952 if ( contactPoint !=0) {
el13drt 22:e5bfe0e7c508 953 //newScore();
el13drt 12:eedda6554615 954 lcd.printString("Game Over",17,2);
el13drt 12:eedda6554615 955 lcd.inverseMode();
el13drt 13:a1b3a373c5a4 956 buzzer.beep(2000,0.2);//frequeny/duration
el13drt 12:eedda6554615 957 wait(0.5);
el13drt 12:eedda6554615 958 lcd.normalMode();
el13drt 12:eedda6554615 959 wait(0.5);
el13drt 12:eedda6554615 960 lcd.inverseMode();
el13drt 13:a1b3a373c5a4 961 buzzer.beep(2000,0.2);
el13drt 12:eedda6554615 962 wait(0.5);
el13drt 12:eedda6554615 963 lcd.normalMode();
el13drt 12:eedda6554615 964 wait(0.5);
el13drt 13:a1b3a373c5a4 965 lcd.inverseMode();
el13drt 13:a1b3a373c5a4 966 buzzer.beep(2000,0.2);
el13drt 13:a1b3a373c5a4 967 wait(0.5);
el13drt 13:a1b3a373c5a4 968 lcd.normalMode();
el13drt 22:e5bfe0e7c508 969 newScore();
el13drt 12:eedda6554615 970 resetGame();
el13drt 12:eedda6554615 971 break;
el13drt 12:eedda6554615 972 }
el13drt 12:eedda6554615 973 startrek();//clears unset pixels, keeps set pixels
el13drt 17:242ccf6a8442 974
el13drt 12:eedda6554615 975
el13drt 12:eedda6554615 976 /// Exit Menu (Back button pressed)///
el13drt 18:c38e1966d870 977 if(buttonFlagB) {
el13drt 20:993c12c6a7bc 978 buttonFlagB = 0;//reset flags
el13drt 20:993c12c6a7bc 979 buttonFlagA = 0;
el13drt 17:242ccf6a8442 980 actionButtons();
el13drt 12:eedda6554615 981 drawExitMenu();//draws the exit menu
el13drt 12:eedda6554615 982
el13drt 12:eedda6554615 983 while(1) {
el13drt 12:eedda6554615 984 exitMenu(exitOption);//presents exit options
el13drt 12:eedda6554615 985
el13drt 12:eedda6554615 986 // 'exit' option YES
el13drt 18:c38e1966d870 987 if((buttonFlagA)&&(exitOption == 0)) { //returns to menu
el13drt 20:993c12c6a7bc 988 buttonFlagA = 0;//reset flags
el13drt 20:993c12c6a7bc 989 buttonFlagB = 0;
el13drt 17:242ccf6a8442 990 actionButtons();
el13drt 12:eedda6554615 991 lcd.clear();//clears screen
el13drt 12:eedda6554615 992 resetGame();//resets scores/objects
el13drt 12:eedda6554615 993 exitFlag = 1;//sets exit flag
el13drt 12:eedda6554615 994 break;
el13drt 12:eedda6554615 995 }
el13drt 12:eedda6554615 996 // 'exit' option NO - returns to game
el13drt 18:c38e1966d870 997 if((buttonFlagA)&&(exitOption == 1)) {
el13drt 20:993c12c6a7bc 998 buttonFlagA = 0;//resets flags
el13drt 20:993c12c6a7bc 999 buttonFlagB = 0;
el13drt 12:eedda6554615 1000 break;
el13drt 12:eedda6554615 1001 }
el13drt 18:c38e1966d870 1002 sleep();//put while to sleep
el13drt 12:eedda6554615 1003 }
el13drt 12:eedda6554615 1004 // if 'exit' option YES, resets
el13drt 12:eedda6554615 1005 // game values returns to main menu
el13drt 12:eedda6554615 1006 if (exitFlag!=0) { //if exit flag set
el13drt 12:eedda6554615 1007 exitFlag = 0;//reset flag
el13drt 12:eedda6554615 1008 break;//break to main menu
el13drt 12:eedda6554615 1009 }
el13drt 12:eedda6554615 1010 }
el13drt 12:eedda6554615 1011 serial.printf("Score: %i \n",score);
el13drt 12:eedda6554615 1012 }
el13drt 12:eedda6554615 1013 }
el13drt 12:eedda6554615 1014 }
el13drt 12:eedda6554615 1015
el13drt 12:eedda6554615 1016 // high scores screen
el13drt 12:eedda6554615 1017 void scores()
el13drt 12:eedda6554615 1018 {
el13drt 17:242ccf6a8442 1019 actionButtons();
el13drt 12:eedda6554615 1020 lcd.clear();//clear screen
el13drt 12:eedda6554615 1021 backGround();//set background
el13drt 12:eedda6554615 1022 lcd.printString("High Scores",10,0);//title
el13drt 12:eedda6554615 1023
el13drt 12:eedda6554615 1024 // players high scores - highest first
el13drt 21:1fbbd8ebb3d9 1025 char buffer1[14];//create buffer for strings
el13drt 21:1fbbd8ebb3d9 1026 char buffer2[14];
el13drt 21:1fbbd8ebb3d9 1027 char buffer3[14];
el13drt 12:eedda6554615 1028
el13drt 21:1fbbd8ebb3d9 1029 int player1 = sprintf(buffer1,"1.DRT.....%i",highScore1);//insert scores
el13drt 21:1fbbd8ebb3d9 1030 int player2 = sprintf(buffer2,"2.NRG.....%i",highScore2);//into buffers
el13drt 21:1fbbd8ebb3d9 1031 int player3 = sprintf(buffer3,"3.GRT.....%i",highScore3);
el13drt 12:eedda6554615 1032
el13drt 12:eedda6554615 1033 if (player1 <= 14) //ensure length is smaller than screen
el13drt 21:1fbbd8ebb3d9 1034 lcd.printString(buffer1,5,2);//display
el13drt 12:eedda6554615 1035 if (player2 <= 14) //ensure length is smaller than screen
el13drt 21:1fbbd8ebb3d9 1036 lcd.printString(buffer2,5,3);//display
el13drt 12:eedda6554615 1037 if (player3 <= 14) //ensure length is smaller than screen
el13drt 21:1fbbd8ebb3d9 1038 lcd.printString(buffer3,5,4);//display
el13drt 12:eedda6554615 1039
el13drt 12:eedda6554615 1040 while(1) {
el13drt 17:242ccf6a8442 1041 actionButtons();//select
el13drt 12:eedda6554615 1042
el13drt 12:eedda6554615 1043 // back to menu
el13drt 18:c38e1966d870 1044 if(buttonFlagB) {
el13drt 18:c38e1966d870 1045 buttonFlagB = 0;//reset flag
el13drt 12:eedda6554615 1046 lcd.clear();
el13drt 12:eedda6554615 1047 break;
el13drt 12:eedda6554615 1048 }
el13drt 18:c38e1966d870 1049 sleep();//put while to sleep
el13drt 12:eedda6554615 1050 }
el13drt 13:a1b3a373c5a4 1051 }
el13drt 13:a1b3a373c5a4 1052
el13drt 13:a1b3a373c5a4 1053 // options menu
el13drt 14:c2c969e1c6e8 1054 void optionsMenu()
el13drt 13:a1b3a373c5a4 1055 {
el13drt 14:c2c969e1c6e8 1056 int option = 0;
el13drt 14:c2c969e1c6e8 1057 int subOption = 0;
el13drt 14:c2c969e1c6e8 1058 int fxOption = 0;
el13drt 17:242ccf6a8442 1059 actionButtons();
el13drt 15:ff3eb0091453 1060 drawOptionsMenu();//draws options menu
el13drt 15:ff3eb0091453 1061 // counters for navigation
el13drt 17:242ccf6a8442 1062
el13drt 13:a1b3a373c5a4 1063 while(1) {
el13drt 17:242ccf6a8442 1064 actionButtons();
el13drt 13:a1b3a373c5a4 1065 optionsMenu(option);//presents options
el13drt 13:a1b3a373c5a4 1066
el13drt 13:a1b3a373c5a4 1067 ////////////////////// difficulty menu ////////////////////////////////////
el13drt 15:ff3eb0091453 1068 if ((option == 0)&&(buttonFlagA)) {
el13drt 15:ff3eb0091453 1069 buttonFlagA = 0;//reset flag
el13drt 17:242ccf6a8442 1070 actionButtons();
el13drt 13:a1b3a373c5a4 1071 drawDifficultyMenu();//draws difficulty menu
el13drt 13:a1b3a373c5a4 1072
el13drt 13:a1b3a373c5a4 1073 while(1) {
el13drt 17:242ccf6a8442 1074 actionButtons();
el13drt 13:a1b3a373c5a4 1075 difficultyMenu(subOption);//presents difficulty options
el13drt 13:a1b3a373c5a4 1076
el13drt 15:ff3eb0091453 1077 if(buttonFlagB) {
el13drt 20:993c12c6a7bc 1078 buttonFlagB = 0;//reset flags
el13drt 20:993c12c6a7bc 1079 buttonFlagA = 0;
el13drt 15:ff3eb0091453 1080 lcd.clear();//clear screen
el13drt 15:ff3eb0091453 1081 break;//return back
el13drt 13:a1b3a373c5a4 1082 }
el13drt 17:242ccf6a8442 1083 sleep();//put while to sleep
el13drt 13:a1b3a373c5a4 1084 }
el13drt 17:242ccf6a8442 1085 drawOptionsMenu();
el13drt 13:a1b3a373c5a4 1086 }
el13drt 13:a1b3a373c5a4 1087 ///////////////////// sound FX menu //////////////////////////////////////
el13drt 15:ff3eb0091453 1088 if((option ==1)&&(buttonFlagA)) {
el13drt 20:993c12c6a7bc 1089 buttonFlagA = 0;//reset flags
el13drt 20:993c12c6a7bc 1090 buttonFlagB = 0;
el13drt 17:242ccf6a8442 1091 actionButtons();
el13drt 13:a1b3a373c5a4 1092 drawSoundFXMenu();//draw menu
el13drt 13:a1b3a373c5a4 1093
el13drt 13:a1b3a373c5a4 1094 while(1) {
el13drt 17:242ccf6a8442 1095 actionButtons();
el13drt 17:242ccf6a8442 1096 soundFXMenu(fxOption);//presents options
el13drt 13:a1b3a373c5a4 1097
el13drt 13:a1b3a373c5a4 1098 // back to options menu
el13drt 15:ff3eb0091453 1099 if(buttonFlagB) {
el13drt 20:993c12c6a7bc 1100 buttonFlagB = 0;//reset flags
el13drt 20:993c12c6a7bc 1101 buttonFlagA = 0;
el13drt 15:ff3eb0091453 1102 lcd.clear();//clear screen
el13drt 15:ff3eb0091453 1103 break;//return back
el13drt 13:a1b3a373c5a4 1104 }
el13drt 17:242ccf6a8442 1105 sleep();//put while to sleep
el13drt 13:a1b3a373c5a4 1106 }
el13drt 15:ff3eb0091453 1107 drawOptionsMenu();
el13drt 13:a1b3a373c5a4 1108 }
el13drt 13:a1b3a373c5a4 1109 // back to mainmenu
el13drt 15:ff3eb0091453 1110 if(buttonFlagB) {
el13drt 20:993c12c6a7bc 1111 buttonFlagB = 0;//reset flags
el13drt 20:993c12c6a7bc 1112 buttonFlagA = 0;
el13drt 15:ff3eb0091453 1113 lcd.clear();//clear
el13drt 15:ff3eb0091453 1114 break;//return back
el13drt 13:a1b3a373c5a4 1115 }
el13drt 22:e5bfe0e7c508 1116 sleep();//put while to sleep
el13drt 13:a1b3a373c5a4 1117 }
el13drt 13:a1b3a373c5a4 1118 }
el13drt 13:a1b3a373c5a4 1119
el13drt 13:a1b3a373c5a4 1120 // read default positions of the joystick to calibrate later readings
el13drt 13:a1b3a373c5a4 1121 void calibrateJoystick()
el13drt 13:a1b3a373c5a4 1122 {
el13drt 14:c2c969e1c6e8 1123 joyButton.mode(PullDown);
el13drt 13:a1b3a373c5a4 1124 // must not move during calibration
el13drt 13:a1b3a373c5a4 1125 joystick.x0 = xPot; //initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
el13drt 13:a1b3a373c5a4 1126 joystick.y0 = yPot;
el13drt 13:a1b3a373c5a4 1127 }
el13drt 13:a1b3a373c5a4 1128
el13drt 13:a1b3a373c5a4 1129 void updateJoystick()
el13drt 13:a1b3a373c5a4 1130 {
el13drt 13:a1b3a373c5a4 1131 // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
el13drt 13:a1b3a373c5a4 1132 joystick.x = xPot - joystick.x0;
el13drt 13:a1b3a373c5a4 1133 joystick.y = yPot - joystick.y0;
el13drt 13:a1b3a373c5a4 1134 // read button state
el13drt 14:c2c969e1c6e8 1135 joystick.button = joyButton;
el13drt 13:a1b3a373c5a4 1136
el13drt 13:a1b3a373c5a4 1137 // calculate direction depending on x,y values
el13drt 13:a1b3a373c5a4 1138 // tolerance allows a little lee-way in case joystick not exactly in the stated direction
el13drt 13:a1b3a373c5a4 1139 if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13drt 13:a1b3a373c5a4 1140 joystick.direction = CENTRE;
el13drt 13:a1b3a373c5a4 1141 } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13drt 13:a1b3a373c5a4 1142 joystick.direction = UP;
el13drt 13:a1b3a373c5a4 1143 } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13drt 13:a1b3a373c5a4 1144 joystick.direction = DOWN;
el13drt 13:a1b3a373c5a4 1145 } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
el13drt 13:a1b3a373c5a4 1146 joystick.direction = RIGHT;
el13drt 13:a1b3a373c5a4 1147 } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
el13drt 13:a1b3a373c5a4 1148 joystick.direction = LEFT;
el13drt 13:a1b3a373c5a4 1149 } else {
el13drt 13:a1b3a373c5a4 1150 joystick.direction = UNKNOWN;
el13drt 13:a1b3a373c5a4 1151 }
el13drt 13:a1b3a373c5a4 1152
el13drt 13:a1b3a373c5a4 1153 // set flag for printing
el13drt 13:a1b3a373c5a4 1154 printFlag = 1;
el13drt 12:eedda6554615 1155 }