My ELEC2645 project. Nikollao Sulollari. 200804685

Dependencies:   N5110 SoftPWM mbed

Fork of Treasure_Hunt by ELEC2645 (2015/16)

Committer:
Nikollao
Date:
Mon May 02 12:01:55 2016 +0000
Revision:
18:5405ee7e243b
Parent:
17:2d424db3975f
Child:
19:70d40dac5ae0
working on obstacles

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 9:ce2d9c42edea 100
Nikollao 7:f31a4b4beb91 101 /**
Nikollao 7:f31a4b4beb91 102 @nameSpace game_ticker
Nikollao 7:f31a4b4beb91 103 @brief interrupt executes a time-triggered task
Nikollao 7:f31a4b4beb91 104 */
Nikollao 7:f31a4b4beb91 105 Ticker game_ticker;
Nikollao 7:f31a4b4beb91 106
Nikollao 7:f31a4b4beb91 107 /**
Nikollao 7:f31a4b4beb91 108 @nameSpace timeout
Nikollao 7:f31a4b4beb91 109 @brief interrupt calls a function after a specified amount of time
Nikollao 7:f31a4b4beb91 110 */
Nikollao 7:f31a4b4beb91 111 Timeout timeout;
Nikollao 7:f31a4b4beb91 112
Nikollao 7:f31a4b4beb91 113
Nikollao 7:f31a4b4beb91 114 /**
Nikollao 7:f31a4b4beb91 115 @nameSpace DirectionName
Nikollao 7:f31a4b4beb91 116 @brief define joystick's direction based on its x,y values
Nikollao 7:f31a4b4beb91 117 */
Nikollao 7:f31a4b4beb91 118 enum DirectionName {
Nikollao 7:f31a4b4beb91 119 UP,
Nikollao 7:f31a4b4beb91 120 DOWN,
Nikollao 7:f31a4b4beb91 121 LEFT,
Nikollao 7:f31a4b4beb91 122 RIGHT,
Nikollao 7:f31a4b4beb91 123 CENTRE,
Nikollao 7:f31a4b4beb91 124 UP_LEFT,
Nikollao 7:f31a4b4beb91 125 UP_RIGHT,
Nikollao 7:f31a4b4beb91 126 DOWN_LEFT,
Nikollao 7:f31a4b4beb91 127 DOWN_RIGHT
Nikollao 7:f31a4b4beb91 128 };
Nikollao 7:f31a4b4beb91 129
Nikollao 7:f31a4b4beb91 130 /**
Nikollao 7:f31a4b4beb91 131 @nameSpace Joystick
Nikollao 7:f31a4b4beb91 132 @brief create strcut Joystick
Nikollao 7:f31a4b4beb91 133 */
Nikollao 7:f31a4b4beb91 134 typedef struct JoyStick Joystick;
Nikollao 7:f31a4b4beb91 135 struct JoyStick {
Nikollao 7:f31a4b4beb91 136 double x; /// current x value
Nikollao 7:f31a4b4beb91 137 double x0; /// 'centred' x value
Nikollao 7:f31a4b4beb91 138 double y; /// current y value
Nikollao 7:f31a4b4beb91 139 double y0; /// 'centred' y value
Nikollao 7:f31a4b4beb91 140 int button; /// button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
Nikollao 7:f31a4b4beb91 141 DirectionName direction; // current direction
Nikollao 7:f31a4b4beb91 142 };
Nikollao 7:f31a4b4beb91 143 /// create struct variable
Nikollao 7:f31a4b4beb91 144 Joystick joystick;
Nikollao 2:af5b5d42e835 145
Nikollao 11:53caf3d944a9 146 int main();
Nikollao 11:53caf3d944a9 147
Nikollao 5:ffa498d7071f 148 /**
Nikollao 5:ffa498d7071f 149 Displays an error message
Nikollao 5:ffa498d7071f 150 */
Nikollao 2:af5b5d42e835 151 void error();
Nikollao 5:ffa498d7071f 152
Nikollao 5:ffa498d7071f 153 /**
Nikollao 5:ffa498d7071f 154 set-up serial port
Nikollao 5:ffa498d7071f 155 */
Nikollao 2:af5b5d42e835 156 void init_serial();
Nikollao 5:ffa498d7071f 157
Nikollao 5:ffa498d7071f 158 /**
Nikollao 5:ffa498d7071f 159 set-up the on-board LEDs and switches
Nikollao 5:ffa498d7071f 160 */
Nikollao 2:af5b5d42e835 161 void init_K64F();
Nikollao 5:ffa498d7071f 162
Nikollao 5:ffa498d7071f 163 /**
Nikollao 5:ffa498d7071f 164 Set-up random variables and game menu
Nikollao 5:ffa498d7071f 165 */
Nikollao 2:af5b5d42e835 166 void init_game();
Nikollao 5:ffa498d7071f 167
Nikollao 5:ffa498d7071f 168 /**
Nikollao 5:ffa498d7071f 169 Set-up flag to 1
Nikollao 5:ffa498d7071f 170 */
Nikollao 5:ffa498d7071f 171
Nikollao 5:ffa498d7071f 172 /**
Nikollao 5:ffa498d7071f 173 Set-up flag to 1
Nikollao 5:ffa498d7071f 174 */
Nikollao 2:af5b5d42e835 175 void timer_isr();
Nikollao 5:ffa498d7071f 176
Nikollao 5:ffa498d7071f 177 /**
Nikollao 5:ffa498d7071f 178 Set-up flag to 1
Nikollao 5:ffa498d7071f 179 */
Nikollao 5:ffa498d7071f 180
Nikollao 5:ffa498d7071f 181 /**
Nikollao 5:ffa498d7071f 182 Set-up flag to 1
Nikollao 5:ffa498d7071f 183 */
Nikollao 2:af5b5d42e835 184 void game_timer_isr();
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 sw2_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 sw3_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 button_isr();
Nikollao 5:ffa498d7071f 200
Nikollao 5:ffa498d7071f 201 /**
Nikollao 5:ffa498d7071f 202 Set-up flag to 1
Nikollao 5:ffa498d7071f 203 */
Nikollao 11:53caf3d944a9 204 void button1_isr();
Nikollao 11:53caf3d944a9 205
Nikollao 11:53caf3d944a9 206 /**
Nikollao 11:53caf3d944a9 207 Set-up flag to 1
Nikollao 11:53caf3d944a9 208 */
Nikollao 2:af5b5d42e835 209 void timeout_isr();
Nikollao 2:af5b5d42e835 210
Nikollao 9:ce2d9c42edea 211
Nikollao 5:ffa498d7071f 212 /**
Nikollao 5:ffa498d7071f 213 Set current position to default position of Joystick
Nikollao 5:ffa498d7071f 214 */
Nikollao 2:af5b5d42e835 215 void calibrateJoystick();
Nikollao 5:ffa498d7071f 216
Nikollao 5:ffa498d7071f 217 /**
Nikollao 5:ffa498d7071f 218 Update the values of the joystick to get current position
Nikollao 5:ffa498d7071f 219 */
Nikollao 2:af5b5d42e835 220 void updateJoystick();
Nikollao 2:af5b5d42e835 221
Nikollao 5:ffa498d7071f 222 /**
Nikollao 5:ffa498d7071f 223 Create an enemy rectangular shape
Nikollao 5:ffa498d7071f 224 */
Nikollao 2:af5b5d42e835 225 void enemyRect();
Nikollao 5:ffa498d7071f 226
Nikollao 5:ffa498d7071f 227 /**
Nikollao 5:ffa498d7071f 228 Create circle shape enemy
Nikollao 5:ffa498d7071f 229 */
Nikollao 2:af5b5d42e835 230 void enemyCircle();
Nikollao 5:ffa498d7071f 231
Nikollao 5:ffa498d7071f 232 /**
Nikollao 5:ffa498d7071f 233 creates the hero of the game
Nikollao 5:ffa498d7071f 234 */
Nikollao 2:af5b5d42e835 235 void hero();
Nikollao 5:ffa498d7071f 236
Nikollao 5:ffa498d7071f 237 /**
Nikollao 5:ffa498d7071f 238 Shows the right direction
Nikollao 5:ffa498d7071f 239 */
Nikollao 2:af5b5d42e835 240 void guidance();
Nikollao 5:ffa498d7071f 241
Nikollao 5:ffa498d7071f 242 /**
Nikollao 5:ffa498d7071f 243 Locates obstacles in the screen
Nikollao 5:ffa498d7071f 244 */
Nikollao 2:af5b5d42e835 245 void obstacles();
Nikollao 5:ffa498d7071f 246
Nikollao 5:ffa498d7071f 247 /**
Nikollao 5:ffa498d7071f 248 Gets enemies depending on the level
Nikollao 5:ffa498d7071f 249 */
Nikollao 3:d2cc054e8605 250 void enemies();
Nikollao 5:ffa498d7071f 251
Nikollao 5:ffa498d7071f 252 /**
Nikollao 5:ffa498d7071f 253 Get s vslue of the .y position, control menu
Nikollao 5:ffa498d7071f 254 */
Nikollao 2:af5b5d42e835 255 int menu();
Nikollao 4:f31bdc212241 256
Nikollao 6:c11bb31a06b3 257 //testing
Nikollao 6:c11bb31a06b3 258 void checkOverlap();
Nikollao 6:c11bb31a06b3 259
Nikollao 5:ffa498d7071f 260 /**
Nikollao 5:ffa498d7071f 261 Check for intrersection
Nikollao 5:ffa498d7071f 262 @param i loops through x direction
Nikollao 5:ffa498d7071f 263 @param j loops through y direction
Nikollao 5:ffa498d7071f 264 @returns the number of pixels aroun the hero detected
Nikollao 5:ffa498d7071f 265 */
Nikollao 5:ffa498d7071f 266 int intersection(int i, int j);
Nikollao 5:ffa498d7071f 267
Nikollao 5:ffa498d7071f 268
Nikollao 7:f31a4b4beb91 269 //vars
Nikollao 7:f31a4b4beb91 270 volatile int rectX; /*!< used to determine x-axis position of the rect enemy */
Nikollao 7:f31a4b4beb91 271
Nikollao 7:f31a4b4beb91 272 volatile int rectY ;/*!< used to determine y-axis position of the rect enemy */
Nikollao 5:ffa498d7071f 273
Nikollao 6:c11bb31a06b3 274 volatile int circleX;/*!< used to determine x-axis position of the circular enemy */
Nikollao 5:ffa498d7071f 275
Nikollao 6:c11bb31a06b3 276 volatile int circleY;/*!< used to determine y-axis position of the circular enemy */
Nikollao 5:ffa498d7071f 277
Nikollao 6:c11bb31a06b3 278 volatile int heroX;/*!< used to move the hero along x-axis */
Nikollao 5:ffa498d7071f 279
Nikollao 6:c11bb31a06b3 280 volatile int heroY;/*!< used to move the hero along y-axis */
Nikollao 5:ffa498d7071f 281
Nikollao 6:c11bb31a06b3 282 volatile int level = 0; /*!< initiate the level difficulty of the game */
Nikollao 2:af5b5d42e835 283
Nikollao 6:c11bb31a06b3 284 volatile int g_timer_flag = 0; /*!< set timer flag in the isr, timer trigger interrupt */
Nikollao 5:ffa498d7071f 285
Nikollao 6:c11bb31a06b3 286 volatile int g_game_timer_flag = 0; /*!< set timer flag in the isr, timer trigger interrupt */
Nikollao 5:ffa498d7071f 287
Nikollao 6:c11bb31a06b3 288 volatile int g_sw2_flag = 0; /*!< set timer flag in the isr, event trigger interrupt */
Nikollao 5:ffa498d7071f 289
Nikollao 6:c11bb31a06b3 290 volatile int g_sw3_flag = 0; /*!< set timer flag in the isr, event trigger interrupt */
Nikollao 5:ffa498d7071f 291
Nikollao 10:1d229362c134 292 volatile int g_button_flag = 0; /*!< set flag in the isr, event trigger interrupt */
Nikollao 10:1d229362c134 293
Nikollao 10:1d229362c134 294 volatile int g_button1_flag = 0; /*!< set flag in the isr, event trigger interrupt */
Nikollao 2:af5b5d42e835 295
Nikollao 6:c11bb31a06b3 296 volatile int option = 0; /*!< select option in menu based on Joystick's movement */
Nikollao 5:ffa498d7071f 297
Nikollao 6:c11bb31a06b3 298 volatile int play = 0; /*!< counts the number of plays */
Nikollao 5:ffa498d7071f 299
Nikollao 15:c7af2ea5f164 300 volatile int tries = 3;/*!< counts the number of trials */
Nikollao 4:f31bdc212241 301
Nikollao 6:c11bb31a06b3 302 volatile int n;/*!< number of pixels overlapping */
Nikollao 13:359d3aa66352 303
Nikollao 16:a6ca6858af24 304 volatile float game_speed = 0.05; /*!< value is set to the ticker, allows user to select game speed */
Nikollao 4:f31bdc212241 305
Nikollao 17:2d424db3975f 306 int fsm[4] = {7,6,4,0}; /*!< array of elements in the FSM, each element is the output of the counter */
Nikollao 17:2d424db3975f 307
Nikollao 17:2d424db3975f 308 int fsm_state = 0; /*!< variable is used to access the array of states and produce an output */
Nikollao 17:2d424db3975f 309
Nikollao 6:c11bb31a06b3 310 int reset = 0; /*!< used to save current level of difficulty */
Nikollao 4:f31bdc212241 311
Nikollao 8:606a488fa720 312 int objectX = 0; /*!< used to move obstacles in the x-axis */
Nikollao 7:f31a4b4beb91 313
Nikollao 8:606a488fa720 314 int objectY = 20; /*!< used to move obstacles in the y-axis */
Nikollao 8:606a488fa720 315
Nikollao 8:606a488fa720 316 int state = 0; /*!< controls the direction of the objtacle */
Nikollao 9:ce2d9c42edea 317
Nikollao 9:ce2d9c42edea 318 int objectX1 = 58; /*!< used to move obstacles in the x-axis */
Nikollao 10:1d229362c134 319
Nikollao 9:ce2d9c42edea 320 int state1 = 1; /*!< controls the direction of the objtacle */
Nikollao 9:ce2d9c42edea 321
Nikollao 16:a6ca6858af24 322 //int menuY = 5; /*!< controls the position of the circle selector */
Nikollao 16:a6ca6858af24 323
Nikollao 16:a6ca6858af24 324 int speed = 1; /*!< controls the speed menu display */
Nikollao 11:53caf3d944a9 325
Nikollao 16:a6ca6858af24 326 bool normal=0; /*!< controls the lcd mode selection on menu */
Nikollao 16:a6ca6858af24 327
Nikollao 16:a6ca6858af24 328 bool sound = 0; /*!< determines if sound is on or off */
Nikollao 7:f31a4b4beb91 329
Nikollao 18:5405ee7e243b 330 #endif