My ELEC2645 project. Nikollao Sulollari. 200804685

Dependencies:   N5110 SoftPWM mbed

Committer:
Nikollao
Date:
Mon Mar 07 12:09:22 2016 +0000
Revision:
1:12803d645d32
Parent:
0:2d0f77943105
Child:
2:af5b5d42e835
good progress! keep working on obstacles!

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