ELEC2645 (2015/16)
/
fy13tmtProject
Simple (basic) snake game
main.h@4:d1f0cf1ea11b, 2016-05-09 (annotated)
- Committer:
- MsTee
- Date:
- Mon May 09 01:55:29 2016 +0000
- Revision:
- 4:d1f0cf1ea11b
- Parent:
- 3:79d3148204e1
Completed Doxygen Documentation;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MsTee | 0:9eb93eff2469 | 1 | /** |
MsTee | 0:9eb93eff2469 | 2 | @file main.h |
MsTee | 0:9eb93eff2469 | 3 | @brief Header file contains functions and variables |
MsTee | 0:9eb93eff2469 | 4 | @brief Snake Game - Embedded Systems Project |
MsTee | 0:9eb93eff2469 | 5 | @brief Revision 1.0 |
MsTee | 0:9eb93eff2469 | 6 | @author Thokozile Tembo |
MsTee | 0:9eb93eff2469 | 7 | @Date 05/05/2016 |
MsTee | 0:9eb93eff2469 | 8 | */ |
MsTee | 0:9eb93eff2469 | 9 | |
MsTee | 0:9eb93eff2469 | 10 | #include "mbed.h" |
MsTee | 0:9eb93eff2469 | 11 | #include "N5110.h" |
MsTee | 1:ab8ceac59e71 | 12 | #define DIRECTION_TOLERANCE 0.01 |
MsTee | 0:9eb93eff2469 | 13 | |
MsTee | 4:d1f0cf1ea11b | 14 | //Objects/Pin activation |
MsTee | 4:d1f0cf1ea11b | 15 | /** |
MsTee | 4:d1f0cf1ea11b | 16 | @namespace lcd |
MsTee | 4:d1f0cf1ea11b | 17 | @brief Creates N5110 object to allow interaction with lcd |
MsTee | 4:d1f0cf1ea11b | 18 | */ |
MsTee | 0:9eb93eff2469 | 19 | N5110 lcd(PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3); |
MsTee | 4:d1f0cf1ea11b | 20 | |
MsTee | 4:d1f0cf1ea11b | 21 | /** |
MsTee | 4:d1f0cf1ea11b | 22 | @namespace Serial |
MsTee | 4:d1f0cf1ea11b | 23 | @brief Creates Serial Communication with PC |
MsTee | 4:d1f0cf1ea11b | 24 | */ |
MsTee | 0:9eb93eff2469 | 25 | Serial pc(USBTX, USBRX); |
MsTee | 4:d1f0cf1ea11b | 26 | |
MsTee | 4:d1f0cf1ea11b | 27 | |
MsTee | 4:d1f0cf1ea11b | 28 | /** |
MsTee | 4:d1f0cf1ea11b | 29 | @namespace AnalogueIn |
MsTee | 4:d1f0cf1ea11b | 30 | @brief Creates connection with Joystick & potentiometer |
MsTee | 4:d1f0cf1ea11b | 31 | */ |
MsTee | 4:d1f0cf1ea11b | 32 | AnalogIn joy_x(PTB2); // joysitc x directions potentiometer |
MsTee | 4:d1f0cf1ea11b | 33 | AnalogIn joy_y(PTB3); // joystick y directions potentiometer |
MsTee | 4:d1f0cf1ea11b | 34 | AnalogIn pot(PTB10); // brightness adjusting potentiometer |
MsTee | 4:d1f0cf1ea11b | 35 | |
MsTee | 4:d1f0cf1ea11b | 36 | /** |
MsTee | 4:d1f0cf1ea11b | 37 | @namespace Buttons |
MsTee | 4:d1f0cf1ea11b | 38 | @brief Digital Inputs for joy button and pcb button |
MsTee | 4:d1f0cf1ea11b | 39 | */ |
MsTee | 4:d1f0cf1ea11b | 40 | |
MsTee | 0:9eb93eff2469 | 41 | DigitalIn joy_button(PTB11); // needs pull-down (active high) |
MsTee | 0:9eb93eff2469 | 42 | InterruptIn pcb_button(PTB18); // needs pull-down (active high) |
MsTee | 0:9eb93eff2469 | 43 | // PWM Output (LED and Buzzer) |
MsTee | 4:d1f0cf1ea11b | 44 | PwmOut pcb_led(PTC2); // Green LED |
MsTee | 4:d1f0cf1ea11b | 45 | PwmOut pcb_buzzer(PTA2); // sound speaker |
MsTee | 0:9eb93eff2469 | 46 | |
MsTee | 4:d1f0cf1ea11b | 47 | /** |
MsTee | 4:d1f0cf1ea11b | 48 | @namespace Ticker |
MsTee | 4:d1f0cf1ea11b | 49 | @brief Creates ticker update for joystick& potentiometer adjustment |
MsTee | 4:d1f0cf1ea11b | 50 | */ |
MsTee | 4:d1f0cf1ea11b | 51 | Ticker joystick_update_ticker; // read values of joystick |
MsTee | 4:d1f0cf1ea11b | 52 | Ticker brightness_update_ticker; // read values of potentiometer |
MsTee | 0:9eb93eff2469 | 53 | |
MsTee | 4:d1f0cf1ea11b | 54 | /** |
MsTee | 4:d1f0cf1ea11b | 55 | Initialises the K64F display and presents the welcome screen |
MsTee | 4:d1f0cf1ea11b | 56 | @returns void |
MsTee | 4:d1f0cf1ea11b | 57 | */ |
MsTee | 0:9eb93eff2469 | 58 | void init_K64F(); |
MsTee | 4:d1f0cf1ea11b | 59 | |
MsTee | 4:d1f0cf1ea11b | 60 | void welcomeScreen(); /*!< Welcome screen*/ |
MsTee | 4:d1f0cf1ea11b | 61 | |
MsTee | 4:d1f0cf1ea11b | 62 | |
MsTee | 0:9eb93eff2469 | 63 | |
MsTee | 4:d1f0cf1ea11b | 64 | |
MsTee | 4:d1f0cf1ea11b | 65 | /** Defining possible joystick directions (enum) |
MsTee | 4:d1f0cf1ea11b | 66 | @returns void |
MsTee | 4:d1f0cf1ea11b | 67 | */ |
MsTee | 0:9eb93eff2469 | 68 | enum DirectionName { |
MsTee | 0:9eb93eff2469 | 69 | UP, |
MsTee | 0:9eb93eff2469 | 70 | DOWN, |
MsTee | 0:9eb93eff2469 | 71 | LEFT, |
MsTee | 0:9eb93eff2469 | 72 | RIGHT, |
MsTee | 0:9eb93eff2469 | 73 | CENTRE, |
MsTee | 0:9eb93eff2469 | 74 | UNKNOWN |
MsTee | 0:9eb93eff2469 | 75 | }; |
MsTee | 0:9eb93eff2469 | 76 | |
MsTee | 4:d1f0cf1ea11b | 77 | /** struct for Joystick, containing x,y values, button status, direction and centered values |
MsTee | 4:d1f0cf1ea11b | 78 | @returns void |
MsTee | 4:d1f0cf1ea11b | 79 | */ |
MsTee | 0:9eb93eff2469 | 80 | struct JoyStick { |
MsTee | 0:9eb93eff2469 | 81 | double x; /// current x value |
MsTee | 0:9eb93eff2469 | 82 | double x0; /// 'centred' x value |
MsTee | 0:9eb93eff2469 | 83 | double y; /// current y value |
MsTee | 0:9eb93eff2469 | 84 | double y0; /// 'centred' y value |
MsTee | 0:9eb93eff2469 | 85 | int button; /// button state (assume pull-down used, so 1 = pressed, 0 = unpressed) |
MsTee | 0:9eb93eff2469 | 86 | DirectionName direction; // current direction |
MsTee | 0:9eb93eff2469 | 87 | } joystick; |
MsTee | 0:9eb93eff2469 | 88 | |
MsTee | 4:d1f0cf1ea11b | 89 | /** struct for Apple, containing x,y values |
MsTee | 4:d1f0cf1ea11b | 90 | @returns void*/ |
MsTee | 4:d1f0cf1ea11b | 91 | |
MsTee | 0:9eb93eff2469 | 92 | struct AppleType { |
MsTee | 0:9eb93eff2469 | 93 | int x; // Apple X |
MsTee | 0:9eb93eff2469 | 94 | int y; // Apple Y |
MsTee | 0:9eb93eff2469 | 95 | }; |
MsTee | 0:9eb93eff2469 | 96 | |
MsTee | 4:d1f0cf1ea11b | 97 | /** Defining possible states of the game (enum) |
MsTee | 4:d1f0cf1ea11b | 98 | @returns void*/ |
MsTee | 4:d1f0cf1ea11b | 99 | |
MsTee | 3:79d3148204e1 | 100 | enum GAME_STATES { |
MsTee | 3:79d3148204e1 | 101 | INIT, // 0 |
MsTee | 3:79d3148204e1 | 102 | WAIT_FOR_USER, // 1 |
MsTee | 3:79d3148204e1 | 103 | PLAY, // 2 |
MsTee | 3:79d3148204e1 | 104 | GAME_OVER // 3 |
MsTee | 3:79d3148204e1 | 105 | }; |
MsTee | 0:9eb93eff2469 | 106 | |
MsTee | 0:9eb93eff2469 | 107 | GAME_STATES game_state = INIT; // Default state of the game |
MsTee | 0:9eb93eff2469 | 108 | |
MsTee | 4:d1f0cf1ea11b | 109 | |
MsTee | 4:d1f0cf1ea11b | 110 | volatile int g_pcb_button_flag = 0; /*!<Global variables*/ |
MsTee | 4:d1f0cf1ea11b | 111 | |
MsTee | 4:d1f0cf1ea11b | 112 | |
MsTee | 4:d1f0cf1ea11b | 113 | /** Function prototypes @returns void*/ |
MsTee | 0:9eb93eff2469 | 114 | |
MsTee | 4:d1f0cf1ea11b | 115 | void calibrateJoystick(); /*!< initial positions in the range 0.0 to 1.0*/ |
MsTee | 4:d1f0cf1ea11b | 116 | void updateJoystick();/*!< read current joystick values relative to calibrated values*/ |
MsTee | 4:d1f0cf1ea11b | 117 | void updateBrightness(); /*!< updates brightness of screen based on potentiometer reading*/ |
MsTee | 4:d1f0cf1ea11b | 118 | void snakeGame(); /*!< executres full functionality of game */ |
MsTee | 0:9eb93eff2469 | 119 | |
MsTee | 4:d1f0cf1ea11b | 120 | /**These functions are used to map game |
MsTee | 4:d1f0cf1ea11b | 121 | @returns void*/ |
MsTee | 0:9eb93eff2469 | 122 | |
MsTee | 4:d1f0cf1ea11b | 123 | void drawBlock(int field_x, int field_y); /*!< Enable square (4x4 pixels) at x, y */ |
MsTee | 4:d1f0cf1ea11b | 124 | |
MsTee | 4:d1f0cf1ea11b | 125 | void drawApple(int field_x, int field_y);/*!< Draw Apple (4x4 pixels) at x, y*/ |
MsTee | 4:d1f0cf1ea11b | 126 | |
MsTee | 4:d1f0cf1ea11b | 127 | void eraseBlock(int field_x, int field_y); /*!< Disable square (4x4 pixels) at x, y*/ |
MsTee | 4:d1f0cf1ea11b | 128 | |
MsTee | 4:d1f0cf1ea11b | 129 | |
MsTee | 4:d1f0cf1ea11b | 130 | int getBlock(int field_x, int field_y); /*!<Get the status of the square (4x4 pixels) at x, y*/ |
MsTee | 4:d1f0cf1ea11b | 131 | |
MsTee | 4:d1f0cf1ea11b | 132 | AppleType placeRandomApple(); /*!< Place an apple at random location (returns food structure)*/ |
MsTee | 4:d1f0cf1ea11b | 133 | |
MsTee | 4:d1f0cf1ea11b | 134 | void pcb_button_isr(); /*!< pcb_button interrupt function*/ |
MsTee | 4:d1f0cf1ea11b | 135 | |
MsTee | 4:d1f0cf1ea11b | 136 | |
MsTee | 4:d1f0cf1ea11b | 137 | void blinkLEDandBuzz();/*!< This function make LED blink and buzzer make a sound*/ |