My ELEC2645 project. Nikollao Sulollari. 200804685

Dependencies:   N5110 SoftPWM mbed

Fork of Treasure_Hunt by ELEC2645 (2015/16)

Committer:
Nikollao
Date:
Sat Mar 26 14:41:40 2016 +0000
Revision:
5:ffa498d7071f
Parent:
4:f31bdc212241
Child:
6:c11bb31a06b3
Oxygen added to the code, working on intersection!

Who changed what in which revision?

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