Konlatee Sittichaivijit / Mbed 2 deprecated PacManII

Dependencies:   N5110 PowerControl mbed

Committer:
el13ks
Date:
Mon Apr 27 16:01:37 2015 +0000
Revision:
13:098319060433
Parent:
12:3f4d9cb7dd8a
Child:
14:883a86f009fd
V2.3 Pause menu completed and enters sleep mode after 15 seconds

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el13ks 0:1c3f3fe862f2 1 #include "mbed.h"
el13ks 0:1c3f3fe862f2 2 #include "N5110.h"
el13ks 10:cc0621fbe99b 3 #define DIRECTION_TOLERANCE 0.1// Tolerance of Joystick
el13ks 13:098319060433 4 #include "tone.h"
el13ks 13:098319060433 5 #define PI 3.14159265359
el13ks 13:098319060433 6 #include "PowerControl/PowerControl.h"
el13ks 13:098319060433 7 #include "PowerControl/EthernetPowerControl.h"
el13ks 0:1c3f3fe862f2 8 BusOut myleds(p24,p23,p22); //External LEDS
el13ks 13:098319060433 9
el13ks 0:1c3f3fe862f2 10 N5110 lcd(p7,p8,p9,p10,p11,p13,p26); //PWR, SCE, RST, DC, MOSI, SCLK, LED
el13ks 12:3f4d9cb7dd8a 11 AnalogIn bright(p20);//Pot to adjust brightness
el13ks 13:098319060433 12 Timeout timer; //Create ticker object
el13ks 12:3f4d9cb7dd8a 13 DigitalIn Jbutton(p17);// Joystick Button
el13ks 0:1c3f3fe862f2 14 AnalogIn xPot(p15);// Joystick x-direction
el13ks 0:1c3f3fe862f2 15 AnalogIn yPot(p16);// Joystick y-direction
el13ks 3:83c1d9cd97f1 16 int i=3; // Pacman's starting position
el13ks 5:61c3bbef19f0 17 int j = 3;
el13ks 13:098319060433 18 int buttonflag=0; // flag for pause button
el13ks 12:3f4d9cb7dd8a 19 InterruptIn button(p18);//Pause button
el13ks 0:1c3f3fe862f2 20 Ticker pollJoystick; // timer to regularly read the joystick
el13ks 13:098319060433 21 int timerflag=0;
el13ks 2:830feffe8462 22 int coinflag = 1;
el13ks 3:83c1d9cd97f1 23 int coinflag2 = 1;
el13ks 4:75c7277a1b88 24 int coinflag3 = 1;
el13ks 4:75c7277a1b88 25 int coinflag4 = 1;
el13ks 4:75c7277a1b88 26 int coinflag5 = 1;
el13ks 11:2fd81f59d7a7 27 int coinflag6 = 1;
el13ks 11:2fd81f59d7a7 28 int coinflag7 = 1;
el13ks 11:2fd81f59d7a7 29 int coinflag8 = 1;
el13ks 11:2fd81f59d7a7 30 int coinflag9 = 1;
el13ks 11:2fd81f59d7a7 31 int coinflag10 = 1;
el13ks 11:2fd81f59d7a7 32 int coinflag11= 1;
el13ks 11:2fd81f59d7a7 33 int coinflag12 = 1;
el13ks 11:2fd81f59d7a7 34 int coinflag13 = 1;
el13ks 11:2fd81f59d7a7 35 int coinflag14 = 1;
el13ks 11:2fd81f59d7a7 36 int coinflag15 = 1;
el13ks 11:2fd81f59d7a7 37 int coinflag16 = 1;
el13ks 11:2fd81f59d7a7 38 int coinflag17 = 1;
el13ks 11:2fd81f59d7a7 39 int coinflag18 = 1;
el13ks 11:2fd81f59d7a7 40 int coinflag19 = 1;
el13ks 11:2fd81f59d7a7 41 int coinflag20 = 1;
el13ks 11:2fd81f59d7a7 42 int coinflag21 = 1;
el13ks 11:2fd81f59d7a7 43 int coinflag22 = 1;
el13ks 6:af4d3c5a9d43 44
el13ks 1:98cc4f4a20dc 45
el13ks 0:1c3f3fe862f2 46 enum DirectionName { // create enumerated type (0,1,2,3 etc. for direction)
el13ks 0:1c3f3fe862f2 47 UP, // could be extended for diagonals etc.
el13ks 0:1c3f3fe862f2 48 DOWN,
el13ks 0:1c3f3fe862f2 49 LEFT,
el13ks 0:1c3f3fe862f2 50 RIGHT,
el13ks 0:1c3f3fe862f2 51 CENTRE,
el13ks 0:1c3f3fe862f2 52 UNKNOWN
el13ks 0:1c3f3fe862f2 53 };
el13ks 0:1c3f3fe862f2 54
el13ks 0:1c3f3fe862f2 55 typedef struct JoyStick Joystick; // struct for Joystick
el13ks 0:1c3f3fe862f2 56 struct JoyStick {
el13ks 0:1c3f3fe862f2 57 float x; // current x value
el13ks 0:1c3f3fe862f2 58 float x0; // 'centred' x value
el13ks 0:1c3f3fe862f2 59 float y; // current y value
el13ks 0:1c3f3fe862f2 60 float y0; // 'centred' y value
el13ks 0:1c3f3fe862f2 61 int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
el13ks 0:1c3f3fe862f2 62 DirectionName direction; // current direction
el13ks 0:1c3f3fe862f2 63 };
el13ks 0:1c3f3fe862f2 64
el13ks 0:1c3f3fe862f2 65 Joystick joystick; // create struct variable
el13ks 0:1c3f3fe862f2 66
el13ks 0:1c3f3fe862f2 67
el13ks 0:1c3f3fe862f2 68 void calibrateJoystick() // read default positions of the joystick to calibrate later readings
el13ks 0:1c3f3fe862f2 69 {
el13ks 0:1c3f3fe862f2 70 button.mode(PullDown);
el13ks 0:1c3f3fe862f2 71 // must not move during calibration
el13ks 0:1c3f3fe862f2 72 joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
el13ks 0:1c3f3fe862f2 73 joystick.y0 = yPot;
el13ks 0:1c3f3fe862f2 74 }
el13ks 0:1c3f3fe862f2 75
el13ks 0:1c3f3fe862f2 76 void updateJoystick()
el13ks 0:1c3f3fe862f2 77 {
el13ks 0:1c3f3fe862f2 78
el13ks 0:1c3f3fe862f2 79 joystick.x = xPot - joystick.x0; // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
el13ks 0:1c3f3fe862f2 80 joystick.y = yPot - joystick.y0;
el13ks 0:1c3f3fe862f2 81 joystick.button = button; // read button state
el13ks 0:1c3f3fe862f2 82
el13ks 0:1c3f3fe862f2 83 // calculate direction depending on x,y values
el13ks 0:1c3f3fe862f2 84 // tolerance allows a little lee-way in case joystick not exactly in the stated direction
el13ks 0:1c3f3fe862f2 85 if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13ks 0:1c3f3fe862f2 86 joystick.direction = CENTRE;
el13ks 0:1c3f3fe862f2 87 } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13ks 0:1c3f3fe862f2 88 joystick.direction = UP;
el13ks 0:1c3f3fe862f2 89 } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13ks 0:1c3f3fe862f2 90 joystick.direction = DOWN;
el13ks 0:1c3f3fe862f2 91 } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
el13ks 12:3f4d9cb7dd8a 92 joystick.direction = LEFT;
el13ks 0:1c3f3fe862f2 93 } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
el13ks 12:3f4d9cb7dd8a 94 joystick.direction = RIGHT;
el13ks 0:1c3f3fe862f2 95 } else {
el13ks 0:1c3f3fe862f2 96 joystick.direction = UNKNOWN;
el13ks 0:1c3f3fe862f2 97 }
el13ks 0:1c3f3fe862f2 98
el13ks 0:1c3f3fe862f2 99 }
el13ks 0:1c3f3fe862f2 100
el13ks 13:098319060433 101 void timerExpired() // ISR for timeout function
el13ks 12:3f4d9cb7dd8a 102 {
el13ks 13:098319060433 103 timerflag=1;
el13ks 13:098319060433 104
el13ks 13:098319060433 105
el13ks 12:3f4d9cb7dd8a 106 }
el13ks 12:3f4d9cb7dd8a 107
el13ks 13:098319060433 108
el13ks 13:098319060433 109 void pressPause()// Interrupt Service Routine (ISR) for pause button
el13ks 13:098319060433 110 {
el13ks 13:098319060433 111 buttonflag=!buttonflag;// set button flag
el13ks 13:098319060433 112 }
el13ks 13:098319060433 113
el13ks 13:098319060433 114
el13ks 13:098319060433 115
el13ks 13:098319060433 116
el13ks 13:098319060433 117
el13ks 12:3f4d9cb7dd8a 118 void pause()
el13ks 12:3f4d9cb7dd8a 119 {
el13ks 13:098319060433 120 timer.attach(&timerExpired,3.0);// Call timeout after 20 seconds
el13ks 13:098319060433 121 button.rise(&pressPause); // event generated on rising edge
el13ks 13:098319060433 122 while (buttonflag) {
el13ks 13:098319060433 123 lcd.clear();
el13ks 13:098319060433 124 lcd.printString("Pause", 25,21);
el13ks 13:098319060433 125 while (timerflag){
el13ks 13:098319060433 126 timer.detach();
el13ks 13:098319060433 127 lcd.turnOff();
el13ks 13:098319060433 128 Sleep();
el13ks 13:098319060433 129 if (!buttonflag){
el13ks 13:098319060433 130 timerflag=0;
el13ks 13:098319060433 131 lcd.init();
el13ks 13:098319060433 132 }
el13ks 13:098319060433 133
el13ks 13:098319060433 134
el13ks 13:098319060433 135
el13ks 13:098319060433 136 }
el13ks 12:3f4d9cb7dd8a 137
el13ks 13:098319060433 138 }
el13ks 13:098319060433 139
el13ks 13:098319060433 140
el13ks 13:098319060433 141 }
el13ks 13:098319060433 142
el13ks 13:098319060433 143
el13ks 12:3f4d9cb7dd8a 144
el13ks 13:098319060433 145
el13ks 13:098319060433 146
el13ks 13:098319060433 147
el13ks 13:098319060433 148
el13ks 13:098319060433 149
el13ks 13:098319060433 150
el13ks 12:3f4d9cb7dd8a 151
el13ks 4:75c7277a1b88 152 void drawMap()
el13ks 4:75c7277a1b88 153 {
el13ks 10:cc0621fbe99b 154
el13ks 10:cc0621fbe99b 155 lcd.drawRect(39,0,3,10,1);//x-coordinate (top-left),y-coordinate(top-left), width, height, fill - 0 transparent (w/outline), 1 filled black, 2 filled white (wo/outline)
el13ks 11:2fd81f59d7a7 156 lcd.drawRect(40,40,2,7,1);// T-shaped obstacle Vertical
el13ks 10:cc0621fbe99b 157 lcd.drawRect(7,8,23,2,1);// Left hand "Hook" shaped obstacle horizontal
el13ks 10:cc0621fbe99b 158 lcd.drawRect(51,8,24,2,1);//Right hand "Hook" shaped obstacle horizontal
el13ks 10:cc0621fbe99b 159 lcd.drawRect(0,18,3,29,1);// left hand border
el13ks 11:2fd81f59d7a7 160 lcd.drawRect(78,18,5,29,1);// Right hand border
el13ks 10:cc0621fbe99b 161 lcd.drawRect(11,18,3,21,1);//Left hand C shape obstacle vertical
el13ks 10:cc0621fbe99b 162 lcd.drawRect(27,11,3,18,1);// Left hand "Hook" shaped obstacle vertical
el13ks 11:2fd81f59d7a7 163 lcd.drawRect(35,37,12,2,1);//T-shaped obstacle Horizontal
el13ks 10:cc0621fbe99b 164 lcd.drawRect(67,18,3,21,1);// Right hand C shaped obstacle vertical
el13ks 10:cc0621fbe99b 165 lcd.drawRect(51,11,3,18,1);//Right hand "Hook" shaped obstacle vertical
el13ks 11:2fd81f59d7a7 166 lcd.drawRect(38,18,5,11,1);// Central block
el13ks 11:2fd81f59d7a7 167 lcd.drawRect(15,18,4,2,1);//Left hand C shape obstacle horizontal
el13ks 10:cc0621fbe99b 168 lcd.drawRect(22,27,5,2,1);//Left hand "Hook" shaped obstacle
el13ks 11:2fd81f59d7a7 169 lcd.drawRect(15,37,4,2,1);//Left hand C shape obstacle
el13ks 11:2fd81f59d7a7 170 lcd.drawRect(55,27,3,2,1);// Right hand "Hook" shaped obstacle
el13ks 10:cc0621fbe99b 171 lcd.drawRect(63,18,4,2,1);//Right hand C shape obstacle horizontal
el13ks 11:2fd81f59d7a7 172 lcd.drawRect(63,37,4,2,1);//Right hand C shape obstacle
el13ks 11:2fd81f59d7a7 173
el13ks 0:1c3f3fe862f2 174 }
el13ks 0:1c3f3fe862f2 175
el13ks 4:75c7277a1b88 176 void checkRight()
el13ks 0:1c3f3fe862f2 177 {
el13ks 1:98cc4f4a20dc 178
el13ks 3:83c1d9cd97f1 179
el13ks 4:75c7277a1b88 180 int r = 0;//Variable for right movement check
el13ks 7:9ecf9df1e95e 181 if(lcd.getPixel (i+3,j))//Check 4 pixels to the right
el13ks 4:75c7277a1b88 182 r++;
el13ks 7:9ecf9df1e95e 183 if(lcd.getPixel (i+4,j))//Check 5 pixels to the right
el13ks 4:75c7277a1b88 184 r++;
el13ks 4:75c7277a1b88 185 if (r==2) { // Condition for solid obstacles
el13ks 4:75c7277a1b88 186 i--;
el13ks 1:98cc4f4a20dc 187
el13ks 4:75c7277a1b88 188 }
el13ks 4:75c7277a1b88 189 }
el13ks 4:75c7277a1b88 190 void checkLeft()
el13ks 4:75c7277a1b88 191 {
el13ks 4:75c7277a1b88 192 int l = 0 ; // Variable for left movement check
el13ks 7:9ecf9df1e95e 193 if(lcd.getPixel (i-3,j))//Check 4 pixels to the left
el13ks 4:75c7277a1b88 194 l++;
el13ks 7:9ecf9df1e95e 195 if(lcd.getPixel (i-4,j))//Check 5 pixels to the left
el13ks 4:75c7277a1b88 196 l++;
el13ks 4:75c7277a1b88 197 if (l==2) { // Condition for solid obstacles
el13ks 4:75c7277a1b88 198 i++;
el13ks 3:83c1d9cd97f1 199
el13ks 3:83c1d9cd97f1 200
el13ks 1:98cc4f4a20dc 201 }
el13ks 0:1c3f3fe862f2 202 }
el13ks 5:61c3bbef19f0 203 void checkUp()
el13ks 6:af4d3c5a9d43 204 {
el13ks 6:af4d3c5a9d43 205 int u=0;
el13ks 7:9ecf9df1e95e 206 if(lcd.getPixel (i,j-3))//Check 4 pixels above
el13ks 5:61c3bbef19f0 207 u++;
el13ks 7:9ecf9df1e95e 208 if(lcd.getPixel (i,j-4))//Check 5 pixels above
el13ks 5:61c3bbef19f0 209 u++;
el13ks 10:cc0621fbe99b 210 if(lcd.getPixel (i+1,j-4))
el13ks 8:c12828c83a44 211 u++;
el13ks 10:cc0621fbe99b 212 if(lcd.getPixel (i-1,j-4))
el13ks 10:cc0621fbe99b 213 u++;
el13ks 11:2fd81f59d7a7 214 if(lcd.getPixel (i-2,j-4))
el13ks 11:2fd81f59d7a7 215 u++;
el13ks 11:2fd81f59d7a7 216 if (u>=4) { // Condition for solid obstacles
el13ks 5:61c3bbef19f0 217 j++;
el13ks 6:af4d3c5a9d43 218 }
el13ks 5:61c3bbef19f0 219 }
el13ks 5:61c3bbef19f0 220
el13ks 6:af4d3c5a9d43 221 void checkDown()
el13ks 6:af4d3c5a9d43 222 {
el13ks 6:af4d3c5a9d43 223 int d=0;
el13ks 7:9ecf9df1e95e 224 if(lcd.getPixel (i,j+3))//Check 4 pixels below
el13ks 5:61c3bbef19f0 225 d++;
el13ks 7:9ecf9df1e95e 226 if(lcd.getPixel (i,j+4))//Check 5 pixels below
el13ks 5:61c3bbef19f0 227 d++;
el13ks 10:cc0621fbe99b 228 if(lcd.getPixel (i+1,j+4))
el13ks 8:c12828c83a44 229 d++;
el13ks 10:cc0621fbe99b 230 if(lcd.getPixel (i-1,j+4))
el13ks 10:cc0621fbe99b 231 d++;
el13ks 13:098319060433 232 if(lcd.getPixel (i-2,j+4))
el13ks 11:2fd81f59d7a7 233 d++;
el13ks 11:2fd81f59d7a7 234 if (d>=4) { // Condition for solid obstacles
el13ks 5:61c3bbef19f0 235 j--;
el13ks 6:af4d3c5a9d43 236 }
el13ks 5:61c3bbef19f0 237 }
el13ks 6:af4d3c5a9d43 238 void drawCoin()
el13ks 6:af4d3c5a9d43 239 {
el13ks 6:af4d3c5a9d43 240
el13ks 6:af4d3c5a9d43 241 if (coinflag) {
el13ks 11:2fd81f59d7a7 242 lcd.drawCircle(10,3,2,0);//Coin 1.1
el13ks 6:af4d3c5a9d43 243 }
el13ks 6:af4d3c5a9d43 244 if (coinflag2) {
el13ks 11:2fd81f59d7a7 245 lcd.drawCircle(22,3,2,0);//Coin 1.2
el13ks 6:af4d3c5a9d43 246 }
el13ks 6:af4d3c5a9d43 247 if (coinflag3) {
el13ks 11:2fd81f59d7a7 248 lcd.drawCircle(35,3,2,0); //Coin 1.3
el13ks 6:af4d3c5a9d43 249 }
el13ks 6:af4d3c5a9d43 250 if (coinflag4) {
el13ks 11:2fd81f59d7a7 251 lcd.drawCircle(47,3,2,0);//Coin 1.4
el13ks 6:af4d3c5a9d43 252 }
el13ks 6:af4d3c5a9d43 253 if (coinflag5) {
el13ks 11:2fd81f59d7a7 254 lcd.drawCircle(65,3,2,0);//Coin 1.5
el13ks 11:2fd81f59d7a7 255 }
el13ks 11:2fd81f59d7a7 256
el13ks 11:2fd81f59d7a7 257 if (coinflag6) {
el13ks 11:2fd81f59d7a7 258 lcd.drawCircle(80,3,2,0);//Coin 1.6
el13ks 11:2fd81f59d7a7 259 }
el13ks 11:2fd81f59d7a7 260 if (coinflag7) {
el13ks 11:2fd81f59d7a7 261 lcd.drawCircle(41,14,2,0);//Coin 2.2
el13ks 11:2fd81f59d7a7 262 }
el13ks 11:2fd81f59d7a7 263 if (coinflag8) {
el13ks 11:2fd81f59d7a7 264 lcd.drawCircle(35,44,2,0);// Coin 5.3
el13ks 11:2fd81f59d7a7 265 }
el13ks 11:2fd81f59d7a7 266 if (coinflag9) {
el13ks 11:2fd81f59d7a7 267 lcd.drawCircle(47,44,2,0);//Coin 5.4
el13ks 11:2fd81f59d7a7 268 }
el13ks 11:2fd81f59d7a7 269 if (coinflag10) {
el13ks 11:2fd81f59d7a7 270 lcd.drawCircle(34,24,2,0); //Coin 3.3
el13ks 11:2fd81f59d7a7 271 }
el13ks 11:2fd81f59d7a7 272 if (coinflag11) {
el13ks 11:2fd81f59d7a7 273 lcd.drawCircle(47,24,2,0); //Coin 3.4
el13ks 11:2fd81f59d7a7 274 }
el13ks 11:2fd81f59d7a7 275
el13ks 11:2fd81f59d7a7 276 if (coinflag12) {
el13ks 11:2fd81f59d7a7 277 lcd.drawCircle(41,33,2,0);//Coin 4
el13ks 11:2fd81f59d7a7 278 }
el13ks 11:2fd81f59d7a7 279
el13ks 11:2fd81f59d7a7 280
el13ks 11:2fd81f59d7a7 281 if (coinflag13) {
el13ks 11:2fd81f59d7a7 282 lcd.drawCircle(7,44,2,0);//Coin 5.1
el13ks 6:af4d3c5a9d43 283 }
el13ks 11:2fd81f59d7a7 284
el13ks 11:2fd81f59d7a7 285 if (coinflag14) {
el13ks 11:2fd81f59d7a7 286 lcd.drawCircle(74,44,2,0);//Coin 5.6
el13ks 11:2fd81f59d7a7 287 }
el13ks 11:2fd81f59d7a7 288 if (coinflag15) {
el13ks 11:2fd81f59d7a7 289 lcd.drawCircle(21,44,2,0);//Coin 5.2
el13ks 11:2fd81f59d7a7 290 }
el13ks 11:2fd81f59d7a7 291 if (coinflag16) {
el13ks 11:2fd81f59d7a7 292 lcd.drawCircle(61,44,2,0);//Coin 5.5
el13ks 11:2fd81f59d7a7 293 }
el13ks 11:2fd81f59d7a7 294 if (coinflag17) {
el13ks 11:2fd81f59d7a7 295 lcd.drawCircle(7,24,2,0); //Coin 3.1
el13ks 11:2fd81f59d7a7 296 }
el13ks 11:2fd81f59d7a7 297 if (coinflag18) {
el13ks 11:2fd81f59d7a7 298 lcd.drawCircle(19,24,2,0); //Coin 3.2
el13ks 11:2fd81f59d7a7 299 }
el13ks 11:2fd81f59d7a7 300 if (coinflag19) {
el13ks 11:2fd81f59d7a7 301 lcd.drawCircle(62,24,2,0); //Coin 3.5
el13ks 13:098319060433 302
el13ks 11:2fd81f59d7a7 303 }
el13ks 13:098319060433 304
el13ks 11:2fd81f59d7a7 305 if (coinflag20) {
el13ks 11:2fd81f59d7a7 306 lcd.drawCircle(74,24,2,0); //Coin 3.6
el13ks 11:2fd81f59d7a7 307 }
el13ks 13:098319060433 308 if (coinflag21) {
el13ks 11:2fd81f59d7a7 309 lcd.drawCircle(15,15,2,0);//Coin 2.1
el13ks 13:098319060433 310 }
el13ks 13:098319060433 311 if (coinflag22) {
el13ks 11:2fd81f59d7a7 312 lcd.drawCircle(65,15,2,0);//Coin 2.3
el13ks 13:098319060433 313 }
el13ks 6:af4d3c5a9d43 314 }
el13ks 11:2fd81f59d7a7 315
el13ks 6:af4d3c5a9d43 316 void checkCoin()
el13ks 11:2fd81f59d7a7 317
el13ks 11:2fd81f59d7a7 318
el13ks 11:2fd81f59d7a7 319
el13ks 6:af4d3c5a9d43 320 {
el13ks 6:af4d3c5a9d43 321 if (i==10 &&j==3) {
el13ks 6:af4d3c5a9d43 322 coinflag=0;
el13ks 6:af4d3c5a9d43 323 }
el13ks 11:2fd81f59d7a7 324 if (i==22 &&j==3) {
el13ks 6:af4d3c5a9d43 325 coinflag2=0;
el13ks 6:af4d3c5a9d43 326 }
el13ks 11:2fd81f59d7a7 327 if (i==35 &&j==3) {
el13ks 6:af4d3c5a9d43 328 coinflag3=0;
el13ks 6:af4d3c5a9d43 329 }
el13ks 11:2fd81f59d7a7 330 if (i==47 &&j==3) {
el13ks 6:af4d3c5a9d43 331 coinflag4=0;
el13ks 6:af4d3c5a9d43 332 }
el13ks 11:2fd81f59d7a7 333 if (i==65 &&j==3) {
el13ks 6:af4d3c5a9d43 334 coinflag5=0;
el13ks 6:af4d3c5a9d43 335 }
el13ks 11:2fd81f59d7a7 336 if (i==80 &&j==3) {
el13ks 11:2fd81f59d7a7 337 coinflag6=0;
el13ks 11:2fd81f59d7a7 338 }
el13ks 11:2fd81f59d7a7 339 if (i== 41&&j==14) {
el13ks 11:2fd81f59d7a7 340 coinflag7=0;
el13ks 11:2fd81f59d7a7 341 }
el13ks 11:2fd81f59d7a7 342 if (i==35 &&j==44) {
el13ks 11:2fd81f59d7a7 343 coinflag8=0;
el13ks 11:2fd81f59d7a7 344 }
el13ks 11:2fd81f59d7a7 345 if (i==47&&j==44) {
el13ks 11:2fd81f59d7a7 346 coinflag9=0;
el13ks 11:2fd81f59d7a7 347 }
el13ks 11:2fd81f59d7a7 348 if (i==34 &&j==24) {
el13ks 11:2fd81f59d7a7 349 coinflag10=0;
el13ks 11:2fd81f59d7a7 350 }
el13ks 11:2fd81f59d7a7 351 if (i==47 &&j==24) {
el13ks 11:2fd81f59d7a7 352 coinflag11=0;
el13ks 11:2fd81f59d7a7 353 }
el13ks 11:2fd81f59d7a7 354 if (i==41 &&j==33) {
el13ks 11:2fd81f59d7a7 355 coinflag12=0;
el13ks 11:2fd81f59d7a7 356 }
el13ks 11:2fd81f59d7a7 357 if (i==7 &&j==44) {
el13ks 11:2fd81f59d7a7 358 coinflag13=0;
el13ks 11:2fd81f59d7a7 359 }
el13ks 11:2fd81f59d7a7 360 if (i==74 &&j==44) {
el13ks 11:2fd81f59d7a7 361 coinflag14=0;
el13ks 11:2fd81f59d7a7 362 }
el13ks 11:2fd81f59d7a7 363 if (i==21 &&j==44) {
el13ks 11:2fd81f59d7a7 364 coinflag15=0;
el13ks 11:2fd81f59d7a7 365 }
el13ks 11:2fd81f59d7a7 366 if (i==61 &&j==44) {
el13ks 11:2fd81f59d7a7 367 coinflag16=0;
el13ks 11:2fd81f59d7a7 368 }
el13ks 11:2fd81f59d7a7 369 if (i== 7&&j==24) {
el13ks 11:2fd81f59d7a7 370 coinflag17=0;
el13ks 11:2fd81f59d7a7 371 }
el13ks 11:2fd81f59d7a7 372 if (i==19 &&j==24) {
el13ks 11:2fd81f59d7a7 373 coinflag18=0;
el13ks 11:2fd81f59d7a7 374 }
el13ks 11:2fd81f59d7a7 375 if (i==62 &&j==24) {
el13ks 11:2fd81f59d7a7 376 coinflag19=0;
el13ks 11:2fd81f59d7a7 377 }
el13ks 11:2fd81f59d7a7 378 if (i==74 &&j==24) {
el13ks 11:2fd81f59d7a7 379 coinflag20=0;
el13ks 11:2fd81f59d7a7 380 }
el13ks 11:2fd81f59d7a7 381 if (i==15 &&j==15) {
el13ks 11:2fd81f59d7a7 382 coinflag21=0;
el13ks 11:2fd81f59d7a7 383 }
el13ks 11:2fd81f59d7a7 384 if (i==65 &&j==15) {
el13ks 11:2fd81f59d7a7 385 coinflag22=0;
el13ks 11:2fd81f59d7a7 386 }
el13ks 5:61c3bbef19f0 387 }
el13ks 5:61c3bbef19f0 388
el13ks 6:af4d3c5a9d43 389 void Joystickcheck()
el13ks 6:af4d3c5a9d43 390 {
el13ks 6:af4d3c5a9d43 391 if (joystick.direction == UP) {
el13ks 6:af4d3c5a9d43 392 j--;
el13ks 4:75c7277a1b88 393 }
el13ks 6:af4d3c5a9d43 394 if (joystick.direction == DOWN) {
el13ks 6:af4d3c5a9d43 395 j++;
el13ks 6:af4d3c5a9d43 396 }
el13ks 6:af4d3c5a9d43 397 if (joystick.direction == LEFT) {
el13ks 6:af4d3c5a9d43 398 i--;
el13ks 6:af4d3c5a9d43 399 }
el13ks 6:af4d3c5a9d43 400 if (joystick.direction == RIGHT) {
el13ks 6:af4d3c5a9d43 401 i++;
el13ks 4:75c7277a1b88 402 }
el13ks 4:75c7277a1b88 403
el13ks 6:af4d3c5a9d43 404 }
el13ks 6:af4d3c5a9d43 405 void drawPacman()
el13ks 6:af4d3c5a9d43 406 {
el13ks 6:af4d3c5a9d43 407 if(joystick.direction == RIGHT) {
el13ks 6:af4d3c5a9d43 408 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 409 lcd.setPixel(i-1,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 410 lcd.setPixel(i-2,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 411 lcd.setPixel(i-3,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 412 lcd.setPixel(i,j+1);
el13ks 6:af4d3c5a9d43 413 lcd.setPixel(i,j+2);
el13ks 6:af4d3c5a9d43 414 lcd.setPixel(i,j+3);
el13ks 6:af4d3c5a9d43 415 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 416 lcd.setPixel(i,j-2);
el13ks 6:af4d3c5a9d43 417 lcd.setPixel(i,j-3);
el13ks 6:af4d3c5a9d43 418 lcd.setPixel(i-1,j+3);
el13ks 6:af4d3c5a9d43 419 lcd.setPixel(i+1,j+3);
el13ks 6:af4d3c5a9d43 420 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 421 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 422 lcd.setPixel(i-1,j+2);
el13ks 6:af4d3c5a9d43 423 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 424 lcd.setPixel(i+1,j+2);
el13ks 6:af4d3c5a9d43 425 lcd.setPixel(i-1,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 426 lcd.setPixel(i-2,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 427 lcd.setPixel(i-3,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 428 lcd.setPixel(i-1,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 429 lcd.setPixel(i-2,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 430 lcd.setPixel(i-3,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 431 lcd.setPixel(i-1,j-2);
el13ks 6:af4d3c5a9d43 432 lcd.setPixel(i-2,j-2);
el13ks 6:af4d3c5a9d43 433 lcd.setPixel(i+1,j-2);
el13ks 6:af4d3c5a9d43 434 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 435 lcd.setPixel(i+1,j-3);
el13ks 6:af4d3c5a9d43 436 lcd.setPixel(i-1,j-3);
el13ks 6:af4d3c5a9d43 437
el13ks 4:75c7277a1b88 438
el13ks 6:af4d3c5a9d43 439 } else if(joystick.direction == LEFT) {
el13ks 6:af4d3c5a9d43 440 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 441 lcd.setPixel(i,j+1);
el13ks 6:af4d3c5a9d43 442 lcd.setPixel(i,j+2);
el13ks 6:af4d3c5a9d43 443 lcd.setPixel(i,j+3);
el13ks 6:af4d3c5a9d43 444 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 445 lcd.setPixel(i,j-2);
el13ks 6:af4d3c5a9d43 446 lcd.setPixel(i,j-3);
el13ks 6:af4d3c5a9d43 447 lcd.setPixel(i-1,j+3);
el13ks 6:af4d3c5a9d43 448 lcd.setPixel(i+1,j+3);
el13ks 6:af4d3c5a9d43 449 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 450 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 451 lcd.setPixel(i-1,j+2);
el13ks 6:af4d3c5a9d43 452 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 453 lcd.setPixel(i+1,j+2);
el13ks 6:af4d3c5a9d43 454 lcd.setPixel(i-1,j-2);
el13ks 6:af4d3c5a9d43 455 lcd.setPixel(i-2,j-2);
el13ks 6:af4d3c5a9d43 456 lcd.setPixel(i+1,j-2);
el13ks 6:af4d3c5a9d43 457 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 458 lcd.setPixel(i+1,j-3);
el13ks 6:af4d3c5a9d43 459 lcd.setPixel(i-1,j-3);
el13ks 6:af4d3c5a9d43 460 lcd.setPixel(i+1,j);//Direction dependent(left and right)
el13ks 6:af4d3c5a9d43 461 lcd.setPixel(i+2,j);//Direction dependent(left and right)
el13ks 6:af4d3c5a9d43 462 lcd.setPixel(i+3,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 463 lcd.setPixel(i+1,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 464 lcd.setPixel(i+2,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 465 lcd.setPixel(i+3,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 466 lcd.setPixel(i+1,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 467 lcd.setPixel(i+2,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 468 lcd.setPixel(i+3,j-1);//Direction dependent (left and right)
el13ks 4:75c7277a1b88 469
el13ks 6:af4d3c5a9d43 470
el13ks 6:af4d3c5a9d43 471
el13ks 6:af4d3c5a9d43 472 } else if(joystick.direction == UP) {
el13ks 6:af4d3c5a9d43 473 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 474 lcd.setPixel(i+1,j);
el13ks 6:af4d3c5a9d43 475 lcd.setPixel(i+2,j);
el13ks 6:af4d3c5a9d43 476 lcd.setPixel(i+3,j);
el13ks 6:af4d3c5a9d43 477 lcd.setPixel(i-1,j);
el13ks 6:af4d3c5a9d43 478 lcd.setPixel(i-2,j);
el13ks 6:af4d3c5a9d43 479 lcd.setPixel(i-3,j);
el13ks 6:af4d3c5a9d43 480 lcd.setPixel(i,j+1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 481 lcd.setPixel(i+1,j+1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 482 lcd.setPixel(i+2,j+1);
el13ks 6:af4d3c5a9d43 483 lcd.setPixel(i+3,j+1);
el13ks 6:af4d3c5a9d43 484 lcd.setPixel(i-1,j+1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 485 lcd.setPixel(i-2,j+1);
el13ks 6:af4d3c5a9d43 486 lcd.setPixel(i-3,j+1);
el13ks 6:af4d3c5a9d43 487 lcd.setPixel(i,j+2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 488 lcd.setPixel(i+1,j+2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 489 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 490 lcd.setPixel(i-1,j+2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 491 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 492 lcd.setPixel(i-1,j+3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 493 lcd.setPixel(i,j+3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 494 lcd.setPixel(i+1,j+3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 495 lcd.setPixel(i-2,j-1);
el13ks 6:af4d3c5a9d43 496 lcd.setPixel(i-3,j-1);
el13ks 6:af4d3c5a9d43 497 lcd.setPixel(i+3,j-1);
el13ks 6:af4d3c5a9d43 498 lcd.setPixel(i+2,j-1);
el13ks 6:af4d3c5a9d43 499 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 500 lcd.setPixel(i-2,j-2);
el13ks 0:1c3f3fe862f2 501
el13ks 3:83c1d9cd97f1 502
el13ks 0:1c3f3fe862f2 503
el13ks 3:83c1d9cd97f1 504
el13ks 3:83c1d9cd97f1 505
el13ks 0:1c3f3fe862f2 506
el13ks 6:af4d3c5a9d43 507
el13ks 3:83c1d9cd97f1 508
el13ks 6:af4d3c5a9d43 509 } else if (joystick.direction == DOWN) {
el13ks 6:af4d3c5a9d43 510 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 511 lcd.setPixel(i+1,j);
el13ks 6:af4d3c5a9d43 512 lcd.setPixel(i+2,j);
el13ks 6:af4d3c5a9d43 513 lcd.setPixel(i+3,j);
el13ks 6:af4d3c5a9d43 514 lcd.setPixel(i-1,j);
el13ks 6:af4d3c5a9d43 515 lcd.setPixel(i-2,j);
el13ks 6:af4d3c5a9d43 516 lcd.setPixel(i-3,j);
el13ks 6:af4d3c5a9d43 517 lcd.setPixel(i,j-1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 518 lcd.setPixel(i+1,j-1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 519 lcd.setPixel(i+2,j+1);
el13ks 6:af4d3c5a9d43 520 lcd.setPixel(i+3,j+1);
el13ks 6:af4d3c5a9d43 521 lcd.setPixel(i-1,j-1);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 522 lcd.setPixel(i-2,j+1);
el13ks 6:af4d3c5a9d43 523 lcd.setPixel(i-3,j+1);
el13ks 6:af4d3c5a9d43 524 lcd.setPixel(i,j-2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 525 lcd.setPixel(i+1,j-2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 526 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 527 lcd.setPixel(i-1,j-2);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 528 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 529 lcd.setPixel(i-1,j-3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 530 lcd.setPixel(i,j-3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 531 lcd.setPixel(i+1,j-3);//Direction dependent(Up and Down)
el13ks 6:af4d3c5a9d43 532 lcd.setPixel(i-2,j-1);
el13ks 6:af4d3c5a9d43 533 lcd.setPixel(i-3,j-1);
el13ks 6:af4d3c5a9d43 534 lcd.setPixel(i+3,j-1);
el13ks 6:af4d3c5a9d43 535 lcd.setPixel(i+2,j-1);
el13ks 6:af4d3c5a9d43 536 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 537 lcd.setPixel(i-2,j-2);
el13ks 0:1c3f3fe862f2 538
el13ks 6:af4d3c5a9d43 539 } else {
el13ks 6:af4d3c5a9d43 540 lcd.setPixel(i,j);
el13ks 6:af4d3c5a9d43 541 lcd.setPixel(i-1,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 542 lcd.setPixel(i-2,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 543 lcd.setPixel(i-3,j);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 544 lcd.setPixel(i,j+1);
el13ks 6:af4d3c5a9d43 545 lcd.setPixel(i,j+2);
el13ks 6:af4d3c5a9d43 546 lcd.setPixel(i,j+3);
el13ks 6:af4d3c5a9d43 547 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 548 lcd.setPixel(i,j-2);
el13ks 6:af4d3c5a9d43 549 lcd.setPixel(i,j-3);
el13ks 6:af4d3c5a9d43 550 lcd.setPixel(i-1,j+3);
el13ks 6:af4d3c5a9d43 551 lcd.setPixel(i+1,j+3);
el13ks 6:af4d3c5a9d43 552 lcd.setPixel(i,j-1);
el13ks 6:af4d3c5a9d43 553 lcd.setPixel(i-2,j+2);
el13ks 6:af4d3c5a9d43 554 lcd.setPixel(i-1,j+2);
el13ks 6:af4d3c5a9d43 555 lcd.setPixel(i+2,j+2);
el13ks 6:af4d3c5a9d43 556 lcd.setPixel(i+1,j+2);
el13ks 6:af4d3c5a9d43 557 lcd.setPixel(i-1,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 558 lcd.setPixel(i-2,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 559 lcd.setPixel(i-3,j+1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 560 lcd.setPixel(i-1,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 561 lcd.setPixel(i-2,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 562 lcd.setPixel(i-3,j-1);//Direction dependent (left and right)
el13ks 6:af4d3c5a9d43 563 lcd.setPixel(i-1,j-2);
el13ks 6:af4d3c5a9d43 564 lcd.setPixel(i-2,j-2);
el13ks 6:af4d3c5a9d43 565 lcd.setPixel(i+1,j-2);
el13ks 6:af4d3c5a9d43 566 lcd.setPixel(i+2,j-2);
el13ks 6:af4d3c5a9d43 567 lcd.setPixel(i+1,j-3);
el13ks 6:af4d3c5a9d43 568 lcd.setPixel(i-1,j-3);
el13ks 0:1c3f3fe862f2 569 }
el13ks 6:af4d3c5a9d43 570 }
el13ks 6:af4d3c5a9d43 571
el13ks 6:af4d3c5a9d43 572
el13ks 6:af4d3c5a9d43 573 void Boundarycheck()
el13ks 6:af4d3c5a9d43 574 {
el13ks 6:af4d3c5a9d43 575 if (i<3) {
el13ks 6:af4d3c5a9d43 576 i=3;
el13ks 6:af4d3c5a9d43 577 }
el13ks 6:af4d3c5a9d43 578 if (j<3) {
el13ks 6:af4d3c5a9d43 579 j=3;
el13ks 6:af4d3c5a9d43 580 }
el13ks 6:af4d3c5a9d43 581 if (j>44) {
el13ks 6:af4d3c5a9d43 582 j=44;
el13ks 6:af4d3c5a9d43 583 }
el13ks 6:af4d3c5a9d43 584 if (i>80) {
el13ks 6:af4d3c5a9d43 585 i=80;
el13ks 6:af4d3c5a9d43 586 }
el13ks 6:af4d3c5a9d43 587 }
el13ks 6:af4d3c5a9d43 588
el13ks 6:af4d3c5a9d43 589 int main()
el13ks 6:af4d3c5a9d43 590 {
el13ks 6:af4d3c5a9d43 591
el13ks 6:af4d3c5a9d43 592 lcd.init();
el13ks 6:af4d3c5a9d43 593 calibrateJoystick(); // get centred values of joystick
el13ks 6:af4d3c5a9d43 594 pollJoystick.attach(&updateJoystick,1.0/10.0); // read joystick 10 times per second
el13ks 13:098319060433 595 PHY_PowerDown();
el13ks 13:098319060433 596
el13ks 6:af4d3c5a9d43 597 while(1) {
el13ks 12:3f4d9cb7dd8a 598 lcd.setBrightness(bright);
el13ks 6:af4d3c5a9d43 599 lcd.clear();
el13ks 12:3f4d9cb7dd8a 600 pause();
el13ks 13:098319060433 601
el13ks 6:af4d3c5a9d43 602 drawPacman();
el13ks 6:af4d3c5a9d43 603 drawMap();
el13ks 6:af4d3c5a9d43 604 drawCoin();
el13ks 6:af4d3c5a9d43 605 checkRight();
el13ks 6:af4d3c5a9d43 606 checkLeft();
el13ks 6:af4d3c5a9d43 607 checkDown();
el13ks 6:af4d3c5a9d43 608 checkUp();
el13ks 6:af4d3c5a9d43 609 Joystickcheck();
el13ks 6:af4d3c5a9d43 610 Boundarycheck();
el13ks 6:af4d3c5a9d43 611 checkCoin();
el13ks 9:d36fed674428 612 lcd.refresh();
el13ks 10:cc0621fbe99b 613 wait_ms(35);
el13ks 11:2fd81f59d7a7 614
el13ks 6:af4d3c5a9d43 615 }
el13ks 6:af4d3c5a9d43 616 }