My ELEC2645 project. Nikollao Sulollari. 200804685

Dependencies:   N5110 SoftPWM mbed

Fork of Treasure_Hunt by ELEC2645 (2015/16)

Committer:
Nikollao
Date:
Mon Mar 21 11:36:51 2016 +0000
Revision:
3:d2cc054e8605
Parent:
2:af5b5d42e835
Child:
4:f31bdc212241
intersection function needs improvement. Good progress!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nikollao 0:2d0f77943105 1 #include "mbed.h"
Nikollao 0:2d0f77943105 2 #include "N5110.h"
Nikollao 0:2d0f77943105 3 #include "stdlib.h"
Nikollao 2:af5b5d42e835 4 #include "main.h"
Nikollao 2:af5b5d42e835 5
Nikollao 0:2d0f77943105 6
Nikollao 0:2d0f77943105 7 N5110 lcd(PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3);
Nikollao 0:2d0f77943105 8 Serial pc(USBTX,USBRX);
Nikollao 0:2d0f77943105 9
Nikollao 0:2d0f77943105 10
Nikollao 0:2d0f77943105 11 Ticker ticker;
Nikollao 1:12803d645d32 12 Ticker game_ticker;
Nikollao 1:12803d645d32 13 Timeout timeout;
Nikollao 0:2d0f77943105 14
Nikollao 0:2d0f77943105 15
Nikollao 0:2d0f77943105 16 typedef struct JoyStick Joystick;
Nikollao 0:2d0f77943105 17 struct JoyStick {
Nikollao 1:12803d645d32 18 double x; // current x value
Nikollao 1:12803d645d32 19 double x0; // 'centred' x value
Nikollao 1:12803d645d32 20 double y; // current y value
Nikollao 1:12803d645d32 21 double y0; // 'centred' y value
Nikollao 0:2d0f77943105 22 int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
Nikollao 0:2d0f77943105 23 DirectionName direction; // current direction
Nikollao 0:2d0f77943105 24 };
Nikollao 0:2d0f77943105 25 // create struct variable
Nikollao 0:2d0f77943105 26 Joystick joystick;
Nikollao 0:2d0f77943105 27
Nikollao 0:2d0f77943105 28 // error function hangs flashing an LED
Nikollao 0:2d0f77943105 29
Nikollao 0:2d0f77943105 30
Nikollao 0:2d0f77943105 31 int main()
Nikollao 0:2d0f77943105 32 {
Nikollao 0:2d0f77943105 33
Nikollao 0:2d0f77943105 34
Nikollao 0:2d0f77943105 35 lcd.init();
Nikollao 0:2d0f77943105 36 init_K64F();
Nikollao 0:2d0f77943105 37 init_serial();
Nikollao 0:2d0f77943105 38 sw2.fall(&sw2_isr);
Nikollao 3:d2cc054e8605 39 button.rise(&button_isr);
Nikollao 1:12803d645d32 40 sw3.fall(&sw3_isr);
Nikollao 0:2d0f77943105 41 init_game();
Nikollao 0:2d0f77943105 42 calibrateJoystick();
Nikollao 0:2d0f77943105 43
Nikollao 3:d2cc054e8605 44 ticker.attach(&timer_isr, 0.1);
Nikollao 0:2d0f77943105 45 reset = level;
Nikollao 0:2d0f77943105 46
Nikollao 0:2d0f77943105 47 while (1) {
Nikollao 0:2d0f77943105 48
Nikollao 0:2d0f77943105 49 if (g_timer_flag) {
Nikollao 0:2d0f77943105 50
Nikollao 0:2d0f77943105 51 g_timer_flag = 0;
Nikollao 0:2d0f77943105 52 lcd.clear();
Nikollao 0:2d0f77943105 53 guidance();
Nikollao 0:2d0f77943105 54 hero();
Nikollao 3:d2cc054e8605 55 enemies();
Nikollao 0:2d0f77943105 56 obstacles();
Nikollao 0:2d0f77943105 57 count++;
Nikollao 0:2d0f77943105 58 //heroX++;
Nikollao 3:d2cc054e8605 59 //heroY--;
Nikollao 0:2d0f77943105 60
Nikollao 0:2d0f77943105 61 if (heroY < -45) {
Nikollao 0:2d0f77943105 62 heroY = 0;
Nikollao 0:2d0f77943105 63 level++;
Nikollao 0:2d0f77943105 64 }
Nikollao 0:2d0f77943105 65
Nikollao 0:2d0f77943105 66 if (reset < level) {
Nikollao 0:2d0f77943105 67
Nikollao 0:2d0f77943105 68 reset = level;
Nikollao 0:2d0f77943105 69 count = 0;
Nikollao 0:2d0f77943105 70 rectX = rand() % 84;
Nikollao 0:2d0f77943105 71 rectY = 0;
Nikollao 0:2d0f77943105 72 circleX = 0;
Nikollao 0:2d0f77943105 73 circleY = rand() % 47;
Nikollao 0:2d0f77943105 74 }
Nikollao 3:d2cc054e8605 75 for (int i=0; i<84; i++) {
Nikollao 3:d2cc054e8605 76 for (int j=0; j<48; j++) {
Nikollao 3:d2cc054e8605 77 // loop through the cells on the grid
Nikollao 3:d2cc054e8605 78
Nikollao 3:d2cc054e8605 79 int n = intersection(i,j);
Nikollao 3:d2cc054e8605 80
Nikollao 3:d2cc054e8605 81 if ( n > 0) {
Nikollao 3:d2cc054e8605 82
Nikollao 3:d2cc054e8605 83 lcd.clear();
Nikollao 3:d2cc054e8605 84 lcd.printString("enemy touched",0,0);
Nikollao 3:d2cc054e8605 85 break;
Nikollao 3:d2cc054e8605 86 }
Nikollao 3:d2cc054e8605 87 }
Nikollao 3:d2cc054e8605 88 }
Nikollao 0:2d0f77943105 89
Nikollao 0:2d0f77943105 90 pc.printf("x = %f y = %f button = %d ",joystick.x,joystick.y,joystick.button);
Nikollao 0:2d0f77943105 91
Nikollao 0:2d0f77943105 92 // check joystick direction
Nikollao 0:2d0f77943105 93 if (joystick.direction == UP)
Nikollao 0:2d0f77943105 94 pc.printf(" UP\n");
Nikollao 0:2d0f77943105 95 if (joystick.direction == DOWN)
Nikollao 0:2d0f77943105 96 pc.printf(" DOWN\n");
Nikollao 0:2d0f77943105 97 if (joystick.direction == LEFT)
Nikollao 0:2d0f77943105 98 pc.printf(" LEFT\n");
Nikollao 0:2d0f77943105 99 if (joystick.direction == RIGHT)
Nikollao 0:2d0f77943105 100 pc.printf(" RIGHT\n");
Nikollao 0:2d0f77943105 101 if (joystick.direction == CENTRE)
Nikollao 0:2d0f77943105 102 pc.printf(" CENTRE\n");
Nikollao 1:12803d645d32 103 if (joystick.direction == UP_RIGHT)
Nikollao 1:12803d645d32 104 pc.printf(" UP - RIGHT\n");
Nikollao 1:12803d645d32 105 if (joystick.direction == UP_LEFT)
Nikollao 1:12803d645d32 106 pc.printf(" UP - LEFT\n");
Nikollao 1:12803d645d32 107 if (joystick.direction == DOWN_RIGHT)
Nikollao 1:12803d645d32 108 pc.printf(" DOWN - RIGHT\n");
Nikollao 1:12803d645d32 109 if (joystick.direction == DOWN_LEFT)
Nikollao 1:12803d645d32 110 pc.printf(" DOWN - LEFT\n");
Nikollao 0:2d0f77943105 111 }
Nikollao 0:2d0f77943105 112 updateJoystick();
Nikollao 1:12803d645d32 113 //callibrateJoystick();
Nikollao 0:2d0f77943105 114 lcd.refresh();
Nikollao 0:2d0f77943105 115 sleep();
Nikollao 0:2d0f77943105 116 }
Nikollao 0:2d0f77943105 117 }
Nikollao 0:2d0f77943105 118
Nikollao 0:2d0f77943105 119 void init_serial()
Nikollao 0:2d0f77943105 120 {
Nikollao 0:2d0f77943105 121 // set to highest baud - ensure terminal software matches
Nikollao 0:2d0f77943105 122 pc.baud(115200);
Nikollao 0:2d0f77943105 123 }
Nikollao 0:2d0f77943105 124
Nikollao 0:2d0f77943105 125 void init_K64F()
Nikollao 0:2d0f77943105 126 {
Nikollao 0:2d0f77943105 127 // on-board LEDs are active-low, so set pin high to turn them off.
Nikollao 0:2d0f77943105 128 r_led = 1;
Nikollao 0:2d0f77943105 129 g_led = 1;
Nikollao 0:2d0f77943105 130 b_led = 1;
Nikollao 0:2d0f77943105 131
Nikollao 0:2d0f77943105 132 // since the on-board switches have external pull-ups, we should disable the internal pull-down
Nikollao 0:2d0f77943105 133 // resistors that are enabled by default using InterruptIn
Nikollao 0:2d0f77943105 134 sw2.mode(PullNone);
Nikollao 0:2d0f77943105 135 sw3.mode(PullNone);
Nikollao 0:2d0f77943105 136 }
Nikollao 0:2d0f77943105 137
Nikollao 0:2d0f77943105 138 void timer_isr ()
Nikollao 0:2d0f77943105 139 {
Nikollao 0:2d0f77943105 140
Nikollao 0:2d0f77943105 141 g_timer_flag = 1;
Nikollao 0:2d0f77943105 142 // lcd.refresh();
Nikollao 0:2d0f77943105 143 }
Nikollao 0:2d0f77943105 144
Nikollao 0:2d0f77943105 145 void game_timer_isr()
Nikollao 0:2d0f77943105 146 {
Nikollao 0:2d0f77943105 147
Nikollao 0:2d0f77943105 148 g_game_timer_flag = 1;
Nikollao 0:2d0f77943105 149 }
Nikollao 0:2d0f77943105 150
Nikollao 0:2d0f77943105 151 void sw2_isr()
Nikollao 0:2d0f77943105 152 {
Nikollao 0:2d0f77943105 153
Nikollao 0:2d0f77943105 154 g_sw2_flag = 1;
Nikollao 0:2d0f77943105 155 }
Nikollao 0:2d0f77943105 156
Nikollao 1:12803d645d32 157 void sw3_isr() {
Nikollao 1:12803d645d32 158
Nikollao 1:12803d645d32 159 g_sw3_flag = 1;
Nikollao 1:12803d645d32 160 }
Nikollao 1:12803d645d32 161
Nikollao 1:12803d645d32 162 void button_isr()
Nikollao 1:12803d645d32 163 {
Nikollao 1:12803d645d32 164
Nikollao 1:12803d645d32 165 g_button_flag =1;
Nikollao 1:12803d645d32 166 }
Nikollao 1:12803d645d32 167
Nikollao 1:12803d645d32 168 void timeout_isr()
Nikollao 1:12803d645d32 169 {
Nikollao 1:12803d645d32 170
Nikollao 1:12803d645d32 171 if (button) {
Nikollao 1:12803d645d32 172
Nikollao 1:12803d645d32 173 pc.printf("button is pressed!!!");
Nikollao 1:12803d645d32 174 }
Nikollao 1:12803d645d32 175 }
Nikollao 1:12803d645d32 176
Nikollao 0:2d0f77943105 177 void enemyRect()
Nikollao 0:2d0f77943105 178 {
Nikollao 0:2d0f77943105 179
Nikollao 0:2d0f77943105 180 lcd.drawRect(rectX,rectY,5,4,1);
Nikollao 0:2d0f77943105 181 rectX = rectX + rand()%4 - 2;
Nikollao 0:2d0f77943105 182 //rectY = rand()%4-2;
Nikollao 0:2d0f77943105 183 //rectX++;
Nikollao 0:2d0f77943105 184 rectY++;
Nikollao 0:2d0f77943105 185 }
Nikollao 0:2d0f77943105 186
Nikollao 0:2d0f77943105 187 void hero()
Nikollao 0:2d0f77943105 188 {
Nikollao 3:d2cc054e8605 189 heroX = heroX + 5*xPot;
Nikollao 3:d2cc054e8605 190 heroY = heroY - 5*yPot;
Nikollao 3:d2cc054e8605 191
Nikollao 3:d2cc054e8605 192 if (heroX > 35) {
Nikollao 3:d2cc054e8605 193 heroX = 35;
Nikollao 3:d2cc054e8605 194 }
Nikollao 3:d2cc054e8605 195
Nikollao 3:d2cc054e8605 196 lcd.drawLine(40+heroX, 47+heroY, 48+heroX, 43+heroY,1);
Nikollao 3:d2cc054e8605 197 lcd.drawLine(40+heroX, 43+heroY,48+heroX, 47+heroY,1);
Nikollao 3:d2cc054e8605 198 lcd.drawLine(44+heroX, 45+heroY,44+heroX, 41+heroY,1);
Nikollao 3:d2cc054e8605 199 lcd.drawCircle(44+heroX, 39+heroY,2,0);
Nikollao 0:2d0f77943105 200 }
Nikollao 0:2d0f77943105 201
Nikollao 0:2d0f77943105 202 void enemyCircle()
Nikollao 0:2d0f77943105 203 {
Nikollao 0:2d0f77943105 204 if (count > 10) {
Nikollao 0:2d0f77943105 205 lcd.drawCircle(circleX,circleY,4,1);
Nikollao 0:2d0f77943105 206 circleY = circleY + rand() %4 - 2;
Nikollao 0:2d0f77943105 207
Nikollao 0:2d0f77943105 208 circleX++;
Nikollao 0:2d0f77943105 209 }
Nikollao 0:2d0f77943105 210 }
Nikollao 0:2d0f77943105 211
Nikollao 0:2d0f77943105 212 void init_game()
Nikollao 0:2d0f77943105 213 {
Nikollao 3:d2cc054e8605 214 button.mode(PullNone);
Nikollao 3:d2cc054e8605 215
Nikollao 0:2d0f77943105 216 srand(time(NULL));
Nikollao 0:2d0f77943105 217 rectY = 0;
Nikollao 0:2d0f77943105 218 rectX = rand() %84 + 1;
Nikollao 0:2d0f77943105 219 circleY = rand() %48 + 1;
Nikollao 0:2d0f77943105 220 circleX = 0;
Nikollao 0:2d0f77943105 221 lcd.setBrightness(0.5); // put LED backlight on 50%
Nikollao 1:12803d645d32 222 timeout.attach(&timeout_isr,2);
Nikollao 0:2d0f77943105 223 lcd.printString("Welcome to",11,1);
Nikollao 0:2d0f77943105 224 lcd.printString("Treasure Hunt!",1,3);
Nikollao 0:2d0f77943105 225 lcd.refresh();
Nikollao 1:12803d645d32 226 sleep();
Nikollao 0:2d0f77943105 227 lcd.clear();
Nikollao 1:12803d645d32 228 game_ticker.attach(game_timer_isr,0.5);
Nikollao 0:2d0f77943105 229
Nikollao 0:2d0f77943105 230 while (1) {
Nikollao 0:2d0f77943105 231
Nikollao 0:2d0f77943105 232 if (g_game_timer_flag) {
Nikollao 0:2d0f77943105 233
Nikollao 0:2d0f77943105 234 g_game_timer_flag = 0;
Nikollao 0:2d0f77943105 235 updateJoystick();
Nikollao 0:2d0f77943105 236 lcd.clear();
Nikollao 1:12803d645d32 237 menu();
Nikollao 3:d2cc054e8605 238 //option = menu();
Nikollao 0:2d0f77943105 239
Nikollao 0:2d0f77943105 240 if (option == 0) {
Nikollao 0:2d0f77943105 241
Nikollao 0:2d0f77943105 242 lcd.printString("Start Game <",0,0);
Nikollao 0:2d0f77943105 243 lcd.printString("Settings",0,2);
Nikollao 0:2d0f77943105 244 lcd.printString("Exit",0,4);
Nikollao 0:2d0f77943105 245 } else if (option == 1) {
Nikollao 0:2d0f77943105 246
Nikollao 0:2d0f77943105 247 lcd.printString("Start Game",0,0);
Nikollao 0:2d0f77943105 248 lcd.printString("Settings <",0,2);
Nikollao 0:2d0f77943105 249 lcd.printString("Exit",0,4);
Nikollao 0:2d0f77943105 250 } else {
Nikollao 0:2d0f77943105 251
Nikollao 0:2d0f77943105 252 lcd.printString("Start Game",0,0);
Nikollao 0:2d0f77943105 253 lcd.printString("Settings",0,2);
Nikollao 0:2d0f77943105 254 lcd.printString("Exit <",0,4);
Nikollao 0:2d0f77943105 255 }
Nikollao 0:2d0f77943105 256 }
Nikollao 0:2d0f77943105 257 if (g_sw2_flag) {
Nikollao 3:d2cc054e8605 258
Nikollao 3:d2cc054e8605 259 g_sw2_flag = 0;
Nikollao 3:d2cc054e8605 260 if (option == 0) {
Nikollao 3:d2cc054e8605 261
Nikollao 1:12803d645d32 262 game_ticker.detach();
Nikollao 0:2d0f77943105 263 break;
Nikollao 3:d2cc054e8605 264 } else if (option == 1) {
Nikollao 3:d2cc054e8605 265
Nikollao 3:d2cc054e8605 266 //settings_menu();
Nikollao 3:d2cc054e8605 267 pc.printf("Modify Settings!");
Nikollao 3:d2cc054e8605 268 } else {
Nikollao 3:d2cc054e8605 269
Nikollao 3:d2cc054e8605 270 lcd.turnOff();
Nikollao 3:d2cc054e8605 271 deepsleep();
Nikollao 3:d2cc054e8605 272 }
Nikollao 3:d2cc054e8605 273 }
Nikollao 1:12803d645d32 274 sleep();
Nikollao 0:2d0f77943105 275 }
Nikollao 0:2d0f77943105 276 }
Nikollao 0:2d0f77943105 277 void guidance()
Nikollao 0:2d0f77943105 278 {
Nikollao 0:2d0f77943105 279
Nikollao 0:2d0f77943105 280 if (level < 7) {
Nikollao 0:2d0f77943105 281
Nikollao 0:2d0f77943105 282 lcd.drawLine(42,0,42,4,1);
Nikollao 0:2d0f77943105 283 lcd.drawLine(42,0,40,2,1);
Nikollao 0:2d0f77943105 284 lcd.drawLine(42,0,44,2,1);
Nikollao 0:2d0f77943105 285 } else if (level == 7) {
Nikollao 0:2d0f77943105 286
Nikollao 0:2d0f77943105 287 lcd.drawLine(42,0,42,6,1);
Nikollao 0:2d0f77943105 288 lcd.drawLine(40,3,44,3,1);
Nikollao 0:2d0f77943105 289 lcd.drawLine(40,0,44,6,1);
Nikollao 0:2d0f77943105 290 lcd.drawLine(40,6,44,0,1);
Nikollao 0:2d0f77943105 291 } else if (level == 8) {
Nikollao 0:2d0f77943105 292
Nikollao 0:2d0f77943105 293 ticker.detach();
Nikollao 0:2d0f77943105 294 lcd.clear();
Nikollao 0:2d0f77943105 295 lcd.printString("Well done!",0,0);
Nikollao 0:2d0f77943105 296 lcd.refresh();
Nikollao 0:2d0f77943105 297 wait(2);
Nikollao 0:2d0f77943105 298 lcd.clear();
Nikollao 0:2d0f77943105 299 lcd.printString("Play again",0,0);
Nikollao 0:2d0f77943105 300 lcd.refresh();
Nikollao 0:2d0f77943105 301 }
Nikollao 0:2d0f77943105 302 }
Nikollao 0:2d0f77943105 303
Nikollao 0:2d0f77943105 304 void obstacles()
Nikollao 0:2d0f77943105 305 {
Nikollao 0:2d0f77943105 306
Nikollao 0:2d0f77943105 307 if (level == 1) {
Nikollao 0:2d0f77943105 308
Nikollao 0:2d0f77943105 309 lcd.drawRect(10,15,2,2,1);
Nikollao 0:2d0f77943105 310 lcd.drawRect(74,15,2,2,1);
Nikollao 0:2d0f77943105 311 } else if (level == 2) {
Nikollao 0:2d0f77943105 312
Nikollao 0:2d0f77943105 313 lcd.drawRect(10,15,2,2,1);
Nikollao 0:2d0f77943105 314 lcd.drawRect(74,15,2,2,1);
Nikollao 0:2d0f77943105 315 lcd.drawRect(10,28,2,2,1);
Nikollao 0:2d0f77943105 316 lcd.drawRect(74,28,2,2,1);
Nikollao 0:2d0f77943105 317 } else if (level == 3) {
Nikollao 0:2d0f77943105 318
Nikollao 0:2d0f77943105 319 lcd.drawRect(10,15,2,2,1);
Nikollao 0:2d0f77943105 320 lcd.drawRect(74,15,2,2,1);
Nikollao 0:2d0f77943105 321 lcd.drawRect(10,28,2,2,1);
Nikollao 0:2d0f77943105 322 lcd.drawRect(74,28,2,2,1);
Nikollao 0:2d0f77943105 323 lcd.drawRect(30,15,2,2,1);
Nikollao 0:2d0f77943105 324 lcd.drawRect(54,15,2,2,1);
Nikollao 0:2d0f77943105 325 lcd.drawRect(30,28,2,2,1);
Nikollao 0:2d0f77943105 326 lcd.drawRect(54,28,2,2,1);
Nikollao 0:2d0f77943105 327 } else if (level == 4) {
Nikollao 0:2d0f77943105 328
Nikollao 0:2d0f77943105 329 lcd.drawRect(10 + rand() %4 - 2,15 + rand() &4 -2,2,2,1);
Nikollao 1:12803d645d32 330 lcd.drawRect(74 + rand() %4 - 2,15 + rand() %4 - 2,2,2,1);
Nikollao 1:12803d645d32 331 lcd.drawRect(10 + rand() %4 - 2,28 + rand() %4 - 2,2,2,1);
Nikollao 1:12803d645d32 332 lcd.drawRect(74 + rand() %4 - 2,28 + rand() %4 - 2,2,2,1);
Nikollao 1:12803d645d32 333 lcd.drawRect(30 + rand() %4 - 2,15,2,2,1);
Nikollao 1:12803d645d32 334 lcd.drawRect(54,15 + rand() %4 - 2,2,2,1);
Nikollao 1:12803d645d32 335 lcd.drawRect(30,28 + rand() %4 - 2,2,2,1);
Nikollao 1:12803d645d32 336 lcd.drawRect(54 + rand() %4 - 2,28,2,2,1);
Nikollao 1:12803d645d32 337 }else if ( level == 5) {
Nikollao 1:12803d645d32 338
Nikollao 1:12803d645d32 339 lcd.drawLine(50,35,65,35,1);
Nikollao 1:12803d645d32 340 lcd.drawLine(38,30,28,30,1);
Nikollao 1:12803d645d32 341 lcd.drawLine(60,25,70,25,1);
Nikollao 1:12803d645d32 342 lcd.drawLine(28,25,18,25,1);
Nikollao 1:12803d645d32 343 lcd.drawLine(70,20,80,20,1);
Nikollao 1:12803d645d32 344 lcd.drawLine(18,20,8,20,1);
Nikollao 1:12803d645d32 345
Nikollao 0:2d0f77943105 346 }
Nikollao 0:2d0f77943105 347 }
Nikollao 0:2d0f77943105 348
Nikollao 3:d2cc054e8605 349 void enemies() {
Nikollao 3:d2cc054e8605 350
Nikollao 3:d2cc054e8605 351 if (level == 0) {
Nikollao 3:d2cc054e8605 352
Nikollao 3:d2cc054e8605 353 enemyRect();
Nikollao 3:d2cc054e8605 354 enemyCircle();
Nikollao 3:d2cc054e8605 355 } else if (level == 1) {
Nikollao 3:d2cc054e8605 356
Nikollao 3:d2cc054e8605 357 enemyRect();
Nikollao 3:d2cc054e8605 358 enemyCircle();
Nikollao 3:d2cc054e8605 359 enemyRect();
Nikollao 3:d2cc054e8605 360 } else if (level == 2) {
Nikollao 3:d2cc054e8605 361
Nikollao 3:d2cc054e8605 362 } else if (level == 3) {
Nikollao 3:d2cc054e8605 363
Nikollao 3:d2cc054e8605 364 }
Nikollao 3:d2cc054e8605 365
Nikollao 3:d2cc054e8605 366 }
Nikollao 0:2d0f77943105 367 void calibrateJoystick()
Nikollao 0:2d0f77943105 368 {
Nikollao 0:2d0f77943105 369 // must not move during calibration
Nikollao 0:2d0f77943105 370 joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
Nikollao 0:2d0f77943105 371 joystick.y0 = yPot;
Nikollao 0:2d0f77943105 372 }
Nikollao 0:2d0f77943105 373 void updateJoystick()
Nikollao 0:2d0f77943105 374 {
Nikollao 0:2d0f77943105 375 // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
Nikollao 0:2d0f77943105 376 joystick.x = xPot - joystick.x0;
Nikollao 0:2d0f77943105 377 joystick.y = yPot - joystick.y0;
Nikollao 0:2d0f77943105 378 // read button state
Nikollao 0:2d0f77943105 379 joystick.button = button;
Nikollao 0:2d0f77943105 380
Nikollao 0:2d0f77943105 381 // calculate direction depending on x,y values
Nikollao 0:2d0f77943105 382 // tolerance allows a little lee-way in case joystick not exactly in the stated direction
Nikollao 0:2d0f77943105 383 if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
Nikollao 0:2d0f77943105 384 joystick.direction = CENTRE;
Nikollao 0:2d0f77943105 385 } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
Nikollao 0:2d0f77943105 386 joystick.direction = UP;
Nikollao 0:2d0f77943105 387 } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
Nikollao 0:2d0f77943105 388 joystick.direction = DOWN;
Nikollao 0:2d0f77943105 389 } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
Nikollao 0:2d0f77943105 390 joystick.direction = RIGHT;
Nikollao 0:2d0f77943105 391 } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
Nikollao 0:2d0f77943105 392 joystick.direction = LEFT;
Nikollao 1:12803d645d32 393 } else if (joystick.y > DIRECTION_TOLERANCE && joystick.x < DIRECTION_TOLERANCE) {
Nikollao 1:12803d645d32 394 joystick.direction = UP_LEFT;
Nikollao 1:12803d645d32 395 } else if (joystick.y > DIRECTION_TOLERANCE && joystick.x > DIRECTION_TOLERANCE) {
Nikollao 1:12803d645d32 396 joystick.direction = UP_RIGHT;
Nikollao 1:12803d645d32 397 } else if (joystick.y < DIRECTION_TOLERANCE && joystick.x < DIRECTION_TOLERANCE) {
Nikollao 1:12803d645d32 398 joystick.direction = DOWN_LEFT;
Nikollao 1:12803d645d32 399 } else if (joystick.y < DIRECTION_TOLERANCE && joystick.x > DIRECTION_TOLERANCE) {
Nikollao 1:12803d645d32 400 joystick.direction = DOWN_RIGHT;
Nikollao 0:2d0f77943105 401 }
Nikollao 0:2d0f77943105 402 }
Nikollao 0:2d0f77943105 403
Nikollao 0:2d0f77943105 404 int menu()
Nikollao 0:2d0f77943105 405 {
Nikollao 0:2d0f77943105 406
Nikollao 0:2d0f77943105 407 if (joystick.y <= 0.33) {
Nikollao 0:2d0f77943105 408 option = 0;
Nikollao 0:2d0f77943105 409 } else if (joystick.y <= 0.66) {
Nikollao 0:2d0f77943105 410 option = 1;
Nikollao 0:2d0f77943105 411 } else {
Nikollao 0:2d0f77943105 412 option = 2;
Nikollao 0:2d0f77943105 413 }
Nikollao 0:2d0f77943105 414 return option;
Nikollao 0:2d0f77943105 415 }
Nikollao 3:d2cc054e8605 416
Nikollao 3:d2cc054e8605 417 int intersection (int i, int j) {
Nikollao 3:d2cc054e8605 418
Nikollao 3:d2cc054e8605 419 int n=0; // set n (number of neigbours) as 0
Nikollao 3:d2cc054e8605 420
Nikollao 3:d2cc054e8605 421 if (lcd.getPixel(i-1,j-1)!=0) //pixel to the top-left
Nikollao 3:d2cc054e8605 422 n++; // increase n by 1
Nikollao 3:d2cc054e8605 423 if (lcd.getPixel(i-1,j)!=0) //pixel to the left
Nikollao 3:d2cc054e8605 424 n++; // increase n by 1
Nikollao 3:d2cc054e8605 425 if (lcd.getPixel(i-1,j+1)!=0) //pixel to the bottom-left
Nikollao 3:d2cc054e8605 426 n++; // increase n by 1
Nikollao 3:d2cc054e8605 427 if (lcd.getPixel(i,j-1)!=0) // pixel to the top
Nikollao 3:d2cc054e8605 428 n++; // increase n by 1
Nikollao 3:d2cc054e8605 429 if (lcd.getPixel(i,j+1)!=0) //pixel to the bottom
Nikollao 3:d2cc054e8605 430 n++; // increase n by 1
Nikollao 3:d2cc054e8605 431 if (lcd.getPixel(i+1,j-1)!=0) //pixel to the top-right
Nikollao 3:d2cc054e8605 432 n++; // increase n by 1
Nikollao 3:d2cc054e8605 433 if (lcd.getPixel(i+1,j)!=0) // pixel to the right
Nikollao 3:d2cc054e8605 434 n++; // increase n by 1
Nikollao 3:d2cc054e8605 435 if (lcd.getPixel(i+1,j+1)!=0) //pixel to the bottom right
Nikollao 3:d2cc054e8605 436 n++; // increase n by 1
Nikollao 3:d2cc054e8605 437
Nikollao 3:d2cc054e8605 438 return n;
Nikollao 3:d2cc054e8605 439 }
Nikollao 3:d2cc054e8605 440
Nikollao 0:2d0f77943105 441 void error()
Nikollao 0:2d0f77943105 442 {
Nikollao 0:2d0f77943105 443
Nikollao 0:2d0f77943105 444 while (1) {
Nikollao 0:2d0f77943105 445
Nikollao 0:2d0f77943105 446 lcd.printString("Error!",0,0);
Nikollao 0:2d0f77943105 447
Nikollao 0:2d0f77943105 448 r_led = 0;
Nikollao 0:2d0f77943105 449 wait(0.2);
Nikollao 0:2d0f77943105 450 r_led = 1;
Nikollao 0:2d0f77943105 451 wait(0.2);
Nikollao 0:2d0f77943105 452 }
Nikollao 0:2d0f77943105 453 }