My ELEC2645 project. Nikollao Sulollari. 200804685

Dependencies:   N5110 SoftPWM mbed

Fork of Treasure_Hunt by ELEC2645 (2015/16)

Committer:
Nikollao
Date:
Wed May 04 09:19:50 2016 +0000
Revision:
21:6b02ef341358
Parent:
20:59aa6189a47d
Final Version for Submission! Well done!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nikollao 5:ffa498d7071f 1 /**
Nikollao 5:ffa498d7071f 2 @file main.h
Nikollao 5:ffa498d7071f 3 @brief Header file contains functions and variables
Nikollao 5:ffa498d7071f 4 @brief Treasure Hunt - Embedded Systems Project
Nikollao 5:ffa498d7071f 5 @brief Revision 1.0
Nikollao 5:ffa498d7071f 6 @author Nikollao Sulollari
Nikollao 5:ffa498d7071f 7 @Date 26/03/2016
Nikollao 5:ffa498d7071f 8 */
Nikollao 5:ffa498d7071f 9
Nikollao 5:ffa498d7071f 10 #ifndef MAIN_H
Nikollao 5:ffa498d7071f 11 #define MAIN_H
Nikollao 5:ffa498d7071f 12 #include "mbed.h"
Nikollao 7:f31a4b4beb91 13 #include "N5110.h"
Nikollao 11:53caf3d944a9 14 #include "SoftPWM.h"
Nikollao 5:ffa498d7071f 15
Nikollao 7:f31a4b4beb91 16 #define DIRECTION_TOLERANCE 0.05
Nikollao 7:f31a4b4beb91 17 /**
Nikollao 7:f31a4b4beb91 18 @nameSpace r_led
Nikollao 7:f31a4b4beb91 19 @brief output for status of red LED
Nikollao 7:f31a4b4beb91 20 */
Nikollao 7:f31a4b4beb91 21 DigitalOut r_led(LED_RED);
Nikollao 7:f31a4b4beb91 22
Nikollao 7:f31a4b4beb91 23 /**
Nikollao 21:6b02ef341358 24 @namespace g_led
Nikollao 7:f31a4b4beb91 25 @brief output for status of green LED
Nikollao 7:f31a4b4beb91 26 */
Nikollao 7:f31a4b4beb91 27 DigitalOut g_led(LED_GREEN);
Nikollao 5:ffa498d7071f 28
Nikollao 5:ffa498d7071f 29 /**
Nikollao 21:6b02ef341358 30 @namespace b_led
Nikollao 7:f31a4b4beb91 31 @brief output for status of blue LED
Nikollao 5:ffa498d7071f 32 */
Nikollao 2:af5b5d42e835 33 DigitalOut b_led(LED_BLUE);
Nikollao 2:af5b5d42e835 34
Nikollao 7:f31a4b4beb91 35 /**
Nikollao 21:6b02ef341358 36 @namespace blue_led
Nikollao 17:2d424db3975f 37 @brief output for status of blue LED, lights when game tool is loaded
Nikollao 15:c7af2ea5f164 38 */
Nikollao 15:c7af2ea5f164 39 DigitalOut blue_led(PTA1);
Nikollao 15:c7af2ea5f164 40
Nikollao 15:c7af2ea5f164 41 /**
Nikollao 21:6b02ef341358 42 @namespace led_output
Nikollao 17:2d424db3975f 43 @brief output for status of left tries for the user to win the game
Nikollao 15:c7af2ea5f164 44 */
Nikollao 17:2d424db3975f 45 BusOut led_output(PTC2,PTA2,PTB23);
Nikollao 15:c7af2ea5f164 46
Nikollao 15:c7af2ea5f164 47 /**
Nikollao 21:6b02ef341358 48 @namespace lcd
Nikollao 7:f31a4b4beb91 49 @brief object of the N5110 class
Nikollao 7:f31a4b4beb91 50 */
Nikollao 7:f31a4b4beb91 51 N5110 lcd(PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3);
Nikollao 7:f31a4b4beb91 52
Nikollao 7:f31a4b4beb91 53 /**
Nikollao 21:6b02ef341358 54 @namespace pc
Nikollao 7:f31a4b4beb91 55 @brief serial connection between mbed and pc
Nikollao 7:f31a4b4beb91 56 */
Nikollao 7:f31a4b4beb91 57 Serial pc(USBTX,USBRX);
Nikollao 7:f31a4b4beb91 58
Nikollao 2:af5b5d42e835 59 // K64F on-board switches
Nikollao 2:af5b5d42e835 60 InterruptIn sw2(SW2);
Nikollao 2:af5b5d42e835 61 InterruptIn sw3(SW3);
Nikollao 2:af5b5d42e835 62
Nikollao 7:f31a4b4beb91 63
Nikollao 7:f31a4b4beb91 64 /**
Nikollao 21:6b02ef341358 65 @namespace xPot
Nikollao 7:f31a4b4beb91 66 @brief read x-axis position from the value of the joystick
Nikollao 7:f31a4b4beb91 67 */
Nikollao 10:1d229362c134 68 AnalogIn xPot(PTB2);
Nikollao 7:f31a4b4beb91 69
Nikollao 7:f31a4b4beb91 70 /**
Nikollao 21:6b02ef341358 71 @namespace yPot
Nikollao 7:f31a4b4beb91 72 @brief read y-axis position from the value of the joystick
Nikollao 7:f31a4b4beb91 73 */
Nikollao 10:1d229362c134 74 AnalogIn yPot(PTB3);
Nikollao 10:1d229362c134 75
Nikollao 10:1d229362c134 76 /**
Nikollao 21:6b02ef341358 77 @namespace button
Nikollao 10:1d229362c134 78 @brief interrupt executes an event triggered task
Nikollao 10:1d229362c134 79 */
Nikollao 10:1d229362c134 80 InterruptIn button(PTB10);
Nikollao 10:1d229362c134 81
Nikollao 10:1d229362c134 82 /**
Nikollao 21:6b02ef341358 83 @namespace button
Nikollao 10:1d229362c134 84 @brief interrupt executes an event triggered task
Nikollao 10:1d229362c134 85 */
Nikollao 10:1d229362c134 86 InterruptIn button1(PTB18);
Nikollao 7:f31a4b4beb91 87
Nikollao 7:f31a4b4beb91 88 /**
Nikollao 21:6b02ef341358 89 @namespace buzzer
Nikollao 21:6b02ef341358 90 @brief create PWM signal using the SoftPWM library to set buzzer duty cycle and period
Nikollao 7:f31a4b4beb91 91 */
Nikollao 11:53caf3d944a9 92 SoftPWM buzzer(PTB9);
Nikollao 7:f31a4b4beb91 93
Nikollao 7:f31a4b4beb91 94 /**
Nikollao 21:6b02ef341358 95 @namespace ticker
Nikollao 7:f31a4b4beb91 96 @brief interrupt executes a time-triggered task
Nikollao 7:f31a4b4beb91 97 */
Nikollao 7:f31a4b4beb91 98 Ticker ticker;
Nikollao 7:f31a4b4beb91 99
Nikollao 20:59aa6189a47d 100 /**
Nikollao 21:6b02ef341358 101 @namespace timer
Nikollao 20:59aa6189a47d 102 @brief interface is used to measure the time between start and stop
Nikollao 20:59aa6189a47d 103 */
Nikollao 20:59aa6189a47d 104 Timer timer;
Nikollao 9:ce2d9c42edea 105
Nikollao 7:f31a4b4beb91 106 /**
Nikollao 21:6b02ef341358 107 @namespace game_ticker
Nikollao 7:f31a4b4beb91 108 @brief interrupt executes a time-triggered task
Nikollao 7:f31a4b4beb91 109 */
Nikollao 7:f31a4b4beb91 110 Ticker game_ticker;
Nikollao 7:f31a4b4beb91 111
Nikollao 7:f31a4b4beb91 112 /**
Nikollao 21:6b02ef341358 113 @namespace timeout
Nikollao 7:f31a4b4beb91 114 @brief interrupt calls a function after a specified amount of time
Nikollao 7:f31a4b4beb91 115 */
Nikollao 7:f31a4b4beb91 116 Timeout timeout;
Nikollao 7:f31a4b4beb91 117
Nikollao 7:f31a4b4beb91 118
Nikollao 7:f31a4b4beb91 119 /**
Nikollao 21:6b02ef341358 120 @namespace DirectionName
Nikollao 7:f31a4b4beb91 121 @brief define joystick's direction based on its x,y values
Nikollao 7:f31a4b4beb91 122 */
Nikollao 7:f31a4b4beb91 123 enum DirectionName {
Nikollao 7:f31a4b4beb91 124 UP,
Nikollao 7:f31a4b4beb91 125 DOWN,
Nikollao 7:f31a4b4beb91 126 LEFT,
Nikollao 7:f31a4b4beb91 127 RIGHT,
Nikollao 7:f31a4b4beb91 128 CENTRE,
Nikollao 7:f31a4b4beb91 129 UP_LEFT,
Nikollao 7:f31a4b4beb91 130 UP_RIGHT,
Nikollao 7:f31a4b4beb91 131 DOWN_LEFT,
Nikollao 7:f31a4b4beb91 132 DOWN_RIGHT
Nikollao 7:f31a4b4beb91 133 };
Nikollao 7:f31a4b4beb91 134
Nikollao 7:f31a4b4beb91 135 /**
Nikollao 21:6b02ef341358 136 @namespace Joystick
Nikollao 7:f31a4b4beb91 137 @brief create strcut Joystick
Nikollao 7:f31a4b4beb91 138 */
Nikollao 7:f31a4b4beb91 139 typedef struct JoyStick Joystick;
Nikollao 7:f31a4b4beb91 140 struct JoyStick {
Nikollao 7:f31a4b4beb91 141 double x; /// current x value
Nikollao 7:f31a4b4beb91 142 double x0; /// 'centred' x value
Nikollao 7:f31a4b4beb91 143 double y; /// current y value
Nikollao 7:f31a4b4beb91 144 double y0; /// 'centred' y value
Nikollao 7:f31a4b4beb91 145 int button; /// button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
Nikollao 7:f31a4b4beb91 146 DirectionName direction; // current direction
Nikollao 7:f31a4b4beb91 147 };
Nikollao 7:f31a4b4beb91 148 /// create struct variable
Nikollao 7:f31a4b4beb91 149 Joystick joystick;
Nikollao 2:af5b5d42e835 150
Nikollao 21:6b02ef341358 151 /**
Nikollao 21:6b02ef341358 152 The main function where the program takes place
Nikollao 21:6b02ef341358 153 */
Nikollao 11:53caf3d944a9 154 int main();
Nikollao 11:53caf3d944a9 155
Nikollao 5:ffa498d7071f 156 /**
Nikollao 5:ffa498d7071f 157 set-up serial port
Nikollao 5:ffa498d7071f 158 */
Nikollao 2:af5b5d42e835 159 void init_serial();
Nikollao 5:ffa498d7071f 160
Nikollao 5:ffa498d7071f 161 /**
Nikollao 5:ffa498d7071f 162 set-up the on-board LEDs and switches
Nikollao 5:ffa498d7071f 163 */
Nikollao 2:af5b5d42e835 164 void init_K64F();
Nikollao 5:ffa498d7071f 165
Nikollao 5:ffa498d7071f 166 /**
Nikollao 5:ffa498d7071f 167 Set-up random variables and game menu
Nikollao 5:ffa498d7071f 168 */
Nikollao 2:af5b5d42e835 169 void init_game();
Nikollao 5:ffa498d7071f 170
Nikollao 5:ffa498d7071f 171 /**
Nikollao 5:ffa498d7071f 172 Set-up flag to 1
Nikollao 5:ffa498d7071f 173 */
Nikollao 5:ffa498d7071f 174
Nikollao 5:ffa498d7071f 175 /**
Nikollao 5:ffa498d7071f 176 Set-up flag to 1
Nikollao 5:ffa498d7071f 177 */
Nikollao 2:af5b5d42e835 178 void timer_isr();
Nikollao 5:ffa498d7071f 179
Nikollao 5:ffa498d7071f 180 /**
Nikollao 5:ffa498d7071f 181 Set-up flag to 1
Nikollao 5:ffa498d7071f 182 */
Nikollao 5:ffa498d7071f 183
Nikollao 5:ffa498d7071f 184 /**
Nikollao 5:ffa498d7071f 185 Set-up flag to 1
Nikollao 5:ffa498d7071f 186 */
Nikollao 2:af5b5d42e835 187 void game_timer_isr();
Nikollao 5:ffa498d7071f 188
Nikollao 5:ffa498d7071f 189 /**
Nikollao 5:ffa498d7071f 190 Set-up flag to 1
Nikollao 5:ffa498d7071f 191 */
Nikollao 2:af5b5d42e835 192 void sw2_isr();
Nikollao 5:ffa498d7071f 193
Nikollao 5:ffa498d7071f 194 /**
Nikollao 5:ffa498d7071f 195 Set-up flag to 1
Nikollao 5:ffa498d7071f 196 */
Nikollao 2:af5b5d42e835 197 void sw3_isr();
Nikollao 5:ffa498d7071f 198
Nikollao 5:ffa498d7071f 199 /**
Nikollao 5:ffa498d7071f 200 Set-up flag to 1
Nikollao 5:ffa498d7071f 201 */
Nikollao 2:af5b5d42e835 202 void button_isr();
Nikollao 5:ffa498d7071f 203
Nikollao 5:ffa498d7071f 204 /**
Nikollao 5:ffa498d7071f 205 Set-up flag to 1
Nikollao 5:ffa498d7071f 206 */
Nikollao 11:53caf3d944a9 207 void button1_isr();
Nikollao 11:53caf3d944a9 208
Nikollao 11:53caf3d944a9 209 /**
Nikollao 11:53caf3d944a9 210 Set-up flag to 1
Nikollao 11:53caf3d944a9 211 */
Nikollao 2:af5b5d42e835 212 void timeout_isr();
Nikollao 2:af5b5d42e835 213
Nikollao 9:ce2d9c42edea 214
Nikollao 5:ffa498d7071f 215 /**
Nikollao 5:ffa498d7071f 216 Set current position to default position of Joystick
Nikollao 5:ffa498d7071f 217 */
Nikollao 2:af5b5d42e835 218 void calibrateJoystick();
Nikollao 5:ffa498d7071f 219
Nikollao 5:ffa498d7071f 220 /**
Nikollao 5:ffa498d7071f 221 Update the values of the joystick to get current position
Nikollao 5:ffa498d7071f 222 */
Nikollao 2:af5b5d42e835 223 void updateJoystick();
Nikollao 2:af5b5d42e835 224
Nikollao 5:ffa498d7071f 225 /**
Nikollao 5:ffa498d7071f 226 Create an enemy rectangular shape
Nikollao 5:ffa498d7071f 227 */
Nikollao 2:af5b5d42e835 228 void enemyRect();
Nikollao 5:ffa498d7071f 229
Nikollao 5:ffa498d7071f 230 /**
Nikollao 19:70d40dac5ae0 231 Create an enemy rectangular shape
Nikollao 19:70d40dac5ae0 232 */
Nikollao 19:70d40dac5ae0 233 void enemyRocket();
Nikollao 19:70d40dac5ae0 234
Nikollao 19:70d40dac5ae0 235 /**
Nikollao 5:ffa498d7071f 236 Create circle shape enemy
Nikollao 5:ffa498d7071f 237 */
Nikollao 2:af5b5d42e835 238 void enemyCircle();
Nikollao 5:ffa498d7071f 239
Nikollao 5:ffa498d7071f 240 /**
Nikollao 5:ffa498d7071f 241 creates the hero of the game
Nikollao 5:ffa498d7071f 242 */
Nikollao 2:af5b5d42e835 243 void hero();
Nikollao 5:ffa498d7071f 244
Nikollao 5:ffa498d7071f 245 /**
Nikollao 5:ffa498d7071f 246 Shows the right direction
Nikollao 5:ffa498d7071f 247 */
Nikollao 2:af5b5d42e835 248 void guidance();
Nikollao 5:ffa498d7071f 249
Nikollao 5:ffa498d7071f 250 /**
Nikollao 5:ffa498d7071f 251 Locates obstacles in the screen
Nikollao 5:ffa498d7071f 252 */
Nikollao 2:af5b5d42e835 253 void obstacles();
Nikollao 5:ffa498d7071f 254
Nikollao 5:ffa498d7071f 255 /**
Nikollao 5:ffa498d7071f 256 Gets enemies depending on the level
Nikollao 5:ffa498d7071f 257 */
Nikollao 3:d2cc054e8605 258 void enemies();
Nikollao 5:ffa498d7071f 259
Nikollao 5:ffa498d7071f 260 /**
Nikollao 20:59aa6189a47d 261 Implement Menu in the game and display on screen
Nikollao 5:ffa498d7071f 262 */
Nikollao 20:59aa6189a47d 263 void menu();
Nikollao 4:f31bdc212241 264
Nikollao 20:59aa6189a47d 265 /**
Nikollao 20:59aa6189a47d 266 Check for overlap between hero and enemies or obstacles
Nikollao 20:59aa6189a47d 267 */
Nikollao 6:c11bb31a06b3 268 void checkOverlap();
Nikollao 6:c11bb31a06b3 269
Nikollao 5:ffa498d7071f 270 /**
Nikollao 5:ffa498d7071f 271 Check for intrersection
Nikollao 5:ffa498d7071f 272 @param i loops through x direction
Nikollao 5:ffa498d7071f 273 @param j loops through y direction
Nikollao 21:6b02ef341358 274 @returns the number of pixels around the hero detected
Nikollao 5:ffa498d7071f 275 */
Nikollao 5:ffa498d7071f 276 int intersection(int i, int j);
Nikollao 5:ffa498d7071f 277
Nikollao 5:ffa498d7071f 278
Nikollao 7:f31a4b4beb91 279 //vars
Nikollao 7:f31a4b4beb91 280 volatile int rectX; /*!< used to determine x-axis position of the rect enemy */
Nikollao 7:f31a4b4beb91 281
Nikollao 7:f31a4b4beb91 282 volatile int rectY ;/*!< used to determine y-axis position of the rect enemy */
Nikollao 5:ffa498d7071f 283
Nikollao 6:c11bb31a06b3 284 volatile int circleX;/*!< used to determine x-axis position of the circular enemy */
Nikollao 5:ffa498d7071f 285
Nikollao 6:c11bb31a06b3 286 volatile int circleY;/*!< used to determine y-axis position of the circular enemy */
Nikollao 5:ffa498d7071f 287
Nikollao 6:c11bb31a06b3 288 volatile int heroX;/*!< used to move the hero along x-axis */
Nikollao 5:ffa498d7071f 289
Nikollao 6:c11bb31a06b3 290 volatile int heroY;/*!< used to move the hero along y-axis */
Nikollao 5:ffa498d7071f 291
Nikollao 6:c11bb31a06b3 292 volatile int level = 0; /*!< initiate the level difficulty of the game */
Nikollao 2:af5b5d42e835 293
Nikollao 6:c11bb31a06b3 294 volatile int g_timer_flag = 0; /*!< set timer flag in the isr, timer trigger interrupt */
Nikollao 5:ffa498d7071f 295
Nikollao 6:c11bb31a06b3 296 volatile int g_game_timer_flag = 0; /*!< set timer flag in the isr, timer trigger interrupt */
Nikollao 5:ffa498d7071f 297
Nikollao 6:c11bb31a06b3 298 volatile int g_sw2_flag = 0; /*!< set timer flag in the isr, event trigger interrupt */
Nikollao 5:ffa498d7071f 299
Nikollao 6:c11bb31a06b3 300 volatile int g_sw3_flag = 0; /*!< set timer flag in the isr, event trigger interrupt */
Nikollao 5:ffa498d7071f 301
Nikollao 10:1d229362c134 302 volatile int g_button_flag = 0; /*!< set flag in the isr, event trigger interrupt */
Nikollao 10:1d229362c134 303
Nikollao 10:1d229362c134 304 volatile int g_button1_flag = 0; /*!< set flag in the isr, event trigger interrupt */
Nikollao 2:af5b5d42e835 305
Nikollao 6:c11bb31a06b3 306 volatile int option = 0; /*!< select option in menu based on Joystick's movement */
Nikollao 5:ffa498d7071f 307
Nikollao 6:c11bb31a06b3 308 volatile int play = 0; /*!< counts the number of plays */
Nikollao 5:ffa498d7071f 309
Nikollao 15:c7af2ea5f164 310 volatile int tries = 3;/*!< counts the number of trials */
Nikollao 4:f31bdc212241 311
Nikollao 6:c11bb31a06b3 312 volatile int n;/*!< number of pixels overlapping */
Nikollao 13:359d3aa66352 313
Nikollao 16:a6ca6858af24 314 volatile float game_speed = 0.05; /*!< value is set to the ticker, allows user to select game speed */
Nikollao 4:f31bdc212241 315
Nikollao 17:2d424db3975f 316 int fsm[4] = {7,6,4,0}; /*!< array of elements in the FSM, each element is the output of the counter */
Nikollao 17:2d424db3975f 317
Nikollao 17:2d424db3975f 318 int fsm_state = 0; /*!< variable is used to access the array of states and produce an output */
Nikollao 17:2d424db3975f 319
Nikollao 6:c11bb31a06b3 320 int reset = 0; /*!< used to save current level of difficulty */
Nikollao 4:f31bdc212241 321
Nikollao 8:606a488fa720 322 int objectX = 0; /*!< used to move obstacles in the x-axis */
Nikollao 7:f31a4b4beb91 323
Nikollao 8:606a488fa720 324 int objectY = 20; /*!< used to move obstacles in the y-axis */
Nikollao 8:606a488fa720 325
Nikollao 8:606a488fa720 326 int state = 0; /*!< controls the direction of the objtacle */
Nikollao 9:ce2d9c42edea 327
Nikollao 9:ce2d9c42edea 328 int objectX1 = 58; /*!< used to move obstacles in the x-axis */
Nikollao 10:1d229362c134 329
Nikollao 9:ce2d9c42edea 330 int state1 = 1; /*!< controls the direction of the objtacle */
Nikollao 9:ce2d9c42edea 331
Nikollao 16:a6ca6858af24 332 int speed = 1; /*!< controls the speed menu display */
Nikollao 11:53caf3d944a9 333
Nikollao 16:a6ca6858af24 334 bool normal=0; /*!< controls the lcd mode selection on menu */
Nikollao 16:a6ca6858af24 335
Nikollao 16:a6ca6858af24 336 bool sound = 0; /*!< determines if sound is on or off */
Nikollao 7:f31a4b4beb91 337
Nikollao 18:5405ee7e243b 338 #endif