My ELEC2645 project. Nikollao Sulollari. 200804685

Dependencies:   N5110 SoftPWM mbed

Fork of Treasure_Hunt by ELEC2645 (2015/16)

Committer:
Nikollao
Date:
Mon May 02 17:57:27 2016 +0000
Revision:
20:59aa6189a47d
Parent:
19:70d40dac5ae0
Child:
21:6b02ef341358
levels finished, need to finish buzzer and  button weapon! :)

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 7:f31a4b4beb91 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 7:f31a4b4beb91 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 15:c7af2ea5f164 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 17:2d424db3975f 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 7:f31a4b4beb91 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 7:f31a4b4beb91 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 7:f31a4b4beb91 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 7:f31a4b4beb91 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 10:1d229362c134 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 10:1d229362c134 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 7:f31a4b4beb91 89 @nameSpace buzzer
Nikollao 7:f31a4b4beb91 90 @brief create PWM signal 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 7:f31a4b4beb91 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 20:59aa6189a47d 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 7:f31a4b4beb91 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 7:f31a4b4beb91 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 7:f31a4b4beb91 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 7:f31a4b4beb91 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 11:53caf3d944a9 151 int main();
Nikollao 11:53caf3d944a9 152
Nikollao 5:ffa498d7071f 153 /**
Nikollao 5:ffa498d7071f 154 Displays an error message
Nikollao 5:ffa498d7071f 155 */
Nikollao 2:af5b5d42e835 156 void error();
Nikollao 5:ffa498d7071f 157
Nikollao 5:ffa498d7071f 158 /**
Nikollao 5:ffa498d7071f 159 set-up serial port
Nikollao 5:ffa498d7071f 160 */
Nikollao 2:af5b5d42e835 161 void init_serial();
Nikollao 5:ffa498d7071f 162
Nikollao 5:ffa498d7071f 163 /**
Nikollao 5:ffa498d7071f 164 set-up the on-board LEDs and switches
Nikollao 5:ffa498d7071f 165 */
Nikollao 2:af5b5d42e835 166 void init_K64F();
Nikollao 5:ffa498d7071f 167
Nikollao 5:ffa498d7071f 168 /**
Nikollao 5:ffa498d7071f 169 Set-up random variables and game menu
Nikollao 5:ffa498d7071f 170 */
Nikollao 2:af5b5d42e835 171 void init_game();
Nikollao 5:ffa498d7071f 172
Nikollao 5:ffa498d7071f 173 /**
Nikollao 5:ffa498d7071f 174 Set-up flag to 1
Nikollao 5:ffa498d7071f 175 */
Nikollao 5:ffa498d7071f 176
Nikollao 5:ffa498d7071f 177 /**
Nikollao 5:ffa498d7071f 178 Set-up flag to 1
Nikollao 5:ffa498d7071f 179 */
Nikollao 2:af5b5d42e835 180 void timer_isr();
Nikollao 5:ffa498d7071f 181
Nikollao 5:ffa498d7071f 182 /**
Nikollao 5:ffa498d7071f 183 Set-up flag to 1
Nikollao 5:ffa498d7071f 184 */
Nikollao 5:ffa498d7071f 185
Nikollao 5:ffa498d7071f 186 /**
Nikollao 5:ffa498d7071f 187 Set-up flag to 1
Nikollao 5:ffa498d7071f 188 */
Nikollao 2:af5b5d42e835 189 void game_timer_isr();
Nikollao 5:ffa498d7071f 190
Nikollao 5:ffa498d7071f 191 /**
Nikollao 5:ffa498d7071f 192 Set-up flag to 1
Nikollao 5:ffa498d7071f 193 */
Nikollao 2:af5b5d42e835 194 void sw2_isr();
Nikollao 5:ffa498d7071f 195
Nikollao 5:ffa498d7071f 196 /**
Nikollao 5:ffa498d7071f 197 Set-up flag to 1
Nikollao 5:ffa498d7071f 198 */
Nikollao 2:af5b5d42e835 199 void sw3_isr();
Nikollao 5:ffa498d7071f 200
Nikollao 5:ffa498d7071f 201 /**
Nikollao 5:ffa498d7071f 202 Set-up flag to 1
Nikollao 5:ffa498d7071f 203 */
Nikollao 2:af5b5d42e835 204 void button_isr();
Nikollao 5:ffa498d7071f 205
Nikollao 5:ffa498d7071f 206 /**
Nikollao 5:ffa498d7071f 207 Set-up flag to 1
Nikollao 5:ffa498d7071f 208 */
Nikollao 11:53caf3d944a9 209 void button1_isr();
Nikollao 11:53caf3d944a9 210
Nikollao 11:53caf3d944a9 211 /**
Nikollao 11:53caf3d944a9 212 Set-up flag to 1
Nikollao 11:53caf3d944a9 213 */
Nikollao 2:af5b5d42e835 214 void timeout_isr();
Nikollao 2:af5b5d42e835 215
Nikollao 9:ce2d9c42edea 216
Nikollao 5:ffa498d7071f 217 /**
Nikollao 5:ffa498d7071f 218 Set current position to default position of Joystick
Nikollao 5:ffa498d7071f 219 */
Nikollao 2:af5b5d42e835 220 void calibrateJoystick();
Nikollao 5:ffa498d7071f 221
Nikollao 5:ffa498d7071f 222 /**
Nikollao 5:ffa498d7071f 223 Update the values of the joystick to get current position
Nikollao 5:ffa498d7071f 224 */
Nikollao 2:af5b5d42e835 225 void updateJoystick();
Nikollao 2:af5b5d42e835 226
Nikollao 5:ffa498d7071f 227 /**
Nikollao 5:ffa498d7071f 228 Create an enemy rectangular shape
Nikollao 5:ffa498d7071f 229 */
Nikollao 2:af5b5d42e835 230 void enemyRect();
Nikollao 5:ffa498d7071f 231
Nikollao 5:ffa498d7071f 232 /**
Nikollao 19:70d40dac5ae0 233 Create an enemy rectangular shape
Nikollao 19:70d40dac5ae0 234 */
Nikollao 19:70d40dac5ae0 235 void enemyRocket();
Nikollao 19:70d40dac5ae0 236
Nikollao 19:70d40dac5ae0 237 /**
Nikollao 5:ffa498d7071f 238 Create circle shape enemy
Nikollao 5:ffa498d7071f 239 */
Nikollao 2:af5b5d42e835 240 void enemyCircle();
Nikollao 5:ffa498d7071f 241
Nikollao 5:ffa498d7071f 242 /**
Nikollao 5:ffa498d7071f 243 creates the hero of the game
Nikollao 5:ffa498d7071f 244 */
Nikollao 2:af5b5d42e835 245 void hero();
Nikollao 5:ffa498d7071f 246
Nikollao 5:ffa498d7071f 247 /**
Nikollao 5:ffa498d7071f 248 Shows the right direction
Nikollao 5:ffa498d7071f 249 */
Nikollao 2:af5b5d42e835 250 void guidance();
Nikollao 5:ffa498d7071f 251
Nikollao 5:ffa498d7071f 252 /**
Nikollao 5:ffa498d7071f 253 Locates obstacles in the screen
Nikollao 5:ffa498d7071f 254 */
Nikollao 2:af5b5d42e835 255 void obstacles();
Nikollao 5:ffa498d7071f 256
Nikollao 5:ffa498d7071f 257 /**
Nikollao 5:ffa498d7071f 258 Gets enemies depending on the level
Nikollao 5:ffa498d7071f 259 */
Nikollao 3:d2cc054e8605 260 void enemies();
Nikollao 5:ffa498d7071f 261
Nikollao 5:ffa498d7071f 262 /**
Nikollao 20:59aa6189a47d 263 Implement Menu in the game and display on screen
Nikollao 5:ffa498d7071f 264 */
Nikollao 20:59aa6189a47d 265 void menu();
Nikollao 4:f31bdc212241 266
Nikollao 20:59aa6189a47d 267 /**
Nikollao 20:59aa6189a47d 268 Check for overlap between hero and enemies or obstacles
Nikollao 20:59aa6189a47d 269 */
Nikollao 6:c11bb31a06b3 270 void checkOverlap();
Nikollao 6:c11bb31a06b3 271
Nikollao 5:ffa498d7071f 272 /**
Nikollao 5:ffa498d7071f 273 Check for intrersection
Nikollao 5:ffa498d7071f 274 @param i loops through x direction
Nikollao 5:ffa498d7071f 275 @param j loops through y direction
Nikollao 5:ffa498d7071f 276 @returns the number of pixels aroun the hero detected
Nikollao 5:ffa498d7071f 277 */
Nikollao 5:ffa498d7071f 278 int intersection(int i, int j);
Nikollao 5:ffa498d7071f 279
Nikollao 5:ffa498d7071f 280
Nikollao 7:f31a4b4beb91 281 //vars
Nikollao 7:f31a4b4beb91 282 volatile int rectX; /*!< used to determine x-axis position of the rect enemy */
Nikollao 7:f31a4b4beb91 283
Nikollao 7:f31a4b4beb91 284 volatile int rectY ;/*!< used to determine y-axis position of the rect enemy */
Nikollao 5:ffa498d7071f 285
Nikollao 6:c11bb31a06b3 286 volatile int circleX;/*!< used to determine x-axis position of the circular enemy */
Nikollao 5:ffa498d7071f 287
Nikollao 6:c11bb31a06b3 288 volatile int circleY;/*!< used to determine y-axis position of the circular enemy */
Nikollao 5:ffa498d7071f 289
Nikollao 6:c11bb31a06b3 290 volatile int heroX;/*!< used to move the hero along x-axis */
Nikollao 5:ffa498d7071f 291
Nikollao 6:c11bb31a06b3 292 volatile int heroY;/*!< used to move the hero along y-axis */
Nikollao 5:ffa498d7071f 293
Nikollao 6:c11bb31a06b3 294 volatile int level = 0; /*!< initiate the level difficulty of the game */
Nikollao 2:af5b5d42e835 295
Nikollao 6:c11bb31a06b3 296 volatile int g_timer_flag = 0; /*!< set timer flag in the isr, timer trigger interrupt */
Nikollao 5:ffa498d7071f 297
Nikollao 6:c11bb31a06b3 298 volatile int g_game_timer_flag = 0; /*!< set timer flag in the isr, timer trigger interrupt */
Nikollao 5:ffa498d7071f 299
Nikollao 6:c11bb31a06b3 300 volatile int g_sw2_flag = 0; /*!< set timer flag in the isr, event trigger interrupt */
Nikollao 5:ffa498d7071f 301
Nikollao 6:c11bb31a06b3 302 volatile int g_sw3_flag = 0; /*!< set timer flag in the isr, event trigger interrupt */
Nikollao 5:ffa498d7071f 303
Nikollao 10:1d229362c134 304 volatile int g_button_flag = 0; /*!< set flag in the isr, event trigger interrupt */
Nikollao 10:1d229362c134 305
Nikollao 10:1d229362c134 306 volatile int g_button1_flag = 0; /*!< set flag in the isr, event trigger interrupt */
Nikollao 2:af5b5d42e835 307
Nikollao 6:c11bb31a06b3 308 volatile int option = 0; /*!< select option in menu based on Joystick's movement */
Nikollao 5:ffa498d7071f 309
Nikollao 6:c11bb31a06b3 310 volatile int play = 0; /*!< counts the number of plays */
Nikollao 5:ffa498d7071f 311
Nikollao 15:c7af2ea5f164 312 volatile int tries = 3;/*!< counts the number of trials */
Nikollao 4:f31bdc212241 313
Nikollao 6:c11bb31a06b3 314 volatile int n;/*!< number of pixels overlapping */
Nikollao 13:359d3aa66352 315
Nikollao 16:a6ca6858af24 316 volatile float game_speed = 0.05; /*!< value is set to the ticker, allows user to select game speed */
Nikollao 4:f31bdc212241 317
Nikollao 17:2d424db3975f 318 int fsm[4] = {7,6,4,0}; /*!< array of elements in the FSM, each element is the output of the counter */
Nikollao 17:2d424db3975f 319
Nikollao 17:2d424db3975f 320 int fsm_state = 0; /*!< variable is used to access the array of states and produce an output */
Nikollao 17:2d424db3975f 321
Nikollao 6:c11bb31a06b3 322 int reset = 0; /*!< used to save current level of difficulty */
Nikollao 4:f31bdc212241 323
Nikollao 8:606a488fa720 324 int objectX = 0; /*!< used to move obstacles in the x-axis */
Nikollao 7:f31a4b4beb91 325
Nikollao 8:606a488fa720 326 int objectY = 20; /*!< used to move obstacles in the y-axis */
Nikollao 8:606a488fa720 327
Nikollao 8:606a488fa720 328 int state = 0; /*!< controls the direction of the objtacle */
Nikollao 9:ce2d9c42edea 329
Nikollao 9:ce2d9c42edea 330 int objectX1 = 58; /*!< used to move obstacles in the x-axis */
Nikollao 10:1d229362c134 331
Nikollao 9:ce2d9c42edea 332 int state1 = 1; /*!< controls the direction of the objtacle */
Nikollao 9:ce2d9c42edea 333
Nikollao 16:a6ca6858af24 334 //int menuY = 5; /*!< controls the position of the circle selector */
Nikollao 16:a6ca6858af24 335
Nikollao 16:a6ca6858af24 336 int speed = 1; /*!< controls the speed menu display */
Nikollao 11:53caf3d944a9 337
Nikollao 16:a6ca6858af24 338 bool normal=0; /*!< controls the lcd mode selection on menu */
Nikollao 16:a6ca6858af24 339
Nikollao 16:a6ca6858af24 340 bool sound = 0; /*!< determines if sound is on or off */
Nikollao 7:f31a4b4beb91 341
Nikollao 18:5405ee7e243b 342 #endif