ELEC 2645 Embedded System Project Name: Wang Luyu SID: 200985894

Dependencies:   N5110 mbed

Committer:
wangwanglouisa
Date:
Thu May 05 09:35:12 2016 +0000
Revision:
0:075d80c9688d
Final test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wangwanglouisa 0:075d80c9688d 1 /**
wangwanglouisa 0:075d80c9688d 2 @file main.h
wangwanglouisa 0:075d80c9688d 3 @brief University of Leeds
wangwanglouisa 0:075d80c9688d 4 @brief ELEC 2645 Embedded System Project
wangwanglouisa 0:075d80c9688d 5 @brief Header file containing functions prototypes, defines and global variables.
wangwanglouisa 0:075d80c9688d 6 @brief The initial documentation was given by Dr.Craig Evans
wangwanglouisa 0:075d80c9688d 7 @author Wang Luyu
wangwanglouisa 0:075d80c9688d 8 @date May 2016
wangwanglouisa 0:075d80c9688d 9 */
wangwanglouisa 0:075d80c9688d 10
wangwanglouisa 0:075d80c9688d 11 #include "mbed.h"
wangwanglouisa 0:075d80c9688d 12 #include "N5110.h"
wangwanglouisa 0:075d80c9688d 13
wangwanglouisa 0:075d80c9688d 14 // change this to alter tolerance of joystick direction
wangwanglouisa 0:075d80c9688d 15 #define DIRECTION_TOLERANCE 0.05
wangwanglouisa 0:075d80c9688d 16
wangwanglouisa 0:075d80c9688d 17 /**
wangwanglouisa 0:075d80c9688d 18 @namespace N5110 lcd
wangwanglouisa 0:075d80c9688d 19 @brief lcd connection
wangwanglouisa 0:075d80c9688d 20 @brief VCC - PTE26
wangwanglouisa 0:075d80c9688d 21 @brief SCE - PTA0
wangwanglouisa 0:075d80c9688d 22 @brief RST - PTC4
wangwanglouisa 0:075d80c9688d 23 @brief D/C - PTD0
wangwanglouisa 0:075d80c9688d 24 @brief MOSI - PTD2
wangwanglouisa 0:075d80c9688d 25 @brief SCLK - PTD1
wangwanglouisa 0:075d80c9688d 26 @brief LED - PTC3
wangwanglouisa 0:075d80c9688d 27 */
wangwanglouisa 0:075d80c9688d 28 // VCC,SCE,RST,D/C,MOSI,SCLK,LED
wangwanglouisa 0:075d80c9688d 29 N5110 lcd (PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3);
wangwanglouisa 0:075d80c9688d 30
wangwanglouisa 0:075d80c9688d 31
wangwanglouisa 0:075d80c9688d 32 /**
wangwanglouisa 0:075d80c9688d 33 @namespace Yellow LED
wangwanglouisa 0:075d80c9688d 34 @brief LED shows the situation of the game
wangwanglouisa 0:075d80c9688d 35 @brief When the pacman 'eat' the 'food', the yellow LED would lit up
wangwanglouisa 0:075d80c9688d 36 */
wangwanglouisa 0:075d80c9688d 37 // on-board LEDs
wangwanglouisa 0:075d80c9688d 38 Ticker ticker;
wangwanglouisa 0:075d80c9688d 39 DigitalOut yellow_led(PTC2);
wangwanglouisa 0:075d80c9688d 40 // Can also power (VCC) directly from VOUT (3.3 V) -
wangwanglouisa 0:075d80c9688d 41 // Can give better performance due to current limitation from GPIO pin
wangwanglouisa 0:075d80c9688d 42
wangwanglouisa 0:075d80c9688d 43
wangwanglouisa 0:075d80c9688d 44 /**
wangwanglouisa 0:075d80c9688d 45 @namespace button
wangwanglouisa 0:075d80c9688d 46 @brief lcd pin connection
wangwanglouisa 0:075d80c9688d 47 */
wangwanglouisa 0:075d80c9688d 48 // connections for joystick
wangwanglouisa 0:075d80c9688d 49 InterruptIn button(PTB11);
wangwanglouisa 0:075d80c9688d 50 /**
wangwanglouisa 0:075d80c9688d 51 @namespace ypot
wangwanglouisa 0:075d80c9688d 52 @brief The y axis potentiometer of joystick
wangwanglouisa 0:075d80c9688d 53 */
wangwanglouisa 0:075d80c9688d 54 AnalogIn yPot(PTB2);
wangwanglouisa 0:075d80c9688d 55 /**
wangwanglouisa 0:075d80c9688d 56 @namespace xpot
wangwanglouisa 0:075d80c9688d 57 @brief The x axis potentiometer of joystick
wangwanglouisa 0:075d80c9688d 58 */
wangwanglouisa 0:075d80c9688d 59 AnalogIn xPot(PTB3);
wangwanglouisa 0:075d80c9688d 60
wangwanglouisa 0:075d80c9688d 61 int gameover_flag = 0; /*!< set gameover flag */
wangwanglouisa 0:075d80c9688d 62
wangwanglouisa 0:075d80c9688d 63 int x_square = rand()%(82-2)+2; /*!< set the x axis of the point */
wangwanglouisa 0:075d80c9688d 64
wangwanglouisa 0:075d80c9688d 65 int y_square = rand()%(46-2)+2; /*!< set the y axis of the point */
wangwanglouisa 0:075d80c9688d 66
wangwanglouisa 0:075d80c9688d 67 //0-up 1-down 2-left 3-right
wangwanglouisa 0:075d80c9688d 68 int direction = 0; /*!< set joystick direction */
wangwanglouisa 0:075d80c9688d 69
wangwanglouisa 0:075d80c9688d 70 // define pacman-x
wangwanglouisa 0:075d80c9688d 71 int Pacman_X = 8; /*!< set the x axis initial value centre pixel of the pacman */
wangwanglouisa 0:075d80c9688d 72 // define pacman-y
wangwanglouisa 0:075d80c9688d 73 int Pacman_Y = 22; /*!< set the y axis initial value centre pixel of the pacman */
wangwanglouisa 0:075d80c9688d 74
wangwanglouisa 0:075d80c9688d 75 // define wall-x
wangwanglouisa 0:075d80c9688d 76 int Wall_X = 0; /*!< set the x axis initial value of the wall */
wangwanglouisa 0:075d80c9688d 77 // define wall-y
wangwanglouisa 0:075d80c9688d 78 int Wall_Y = 0; /*!< set the y axis initial value of the wall */
wangwanglouisa 0:075d80c9688d 79
wangwanglouisa 0:075d80c9688d 80 // timer to regularly read the joystick
wangwanglouisa 0:075d80c9688d 81 Ticker pollJoystick;
wangwanglouisa 0:075d80c9688d 82 // Serial for debug
wangwanglouisa 0:075d80c9688d 83
wangwanglouisa 0:075d80c9688d 84 int score = 0; /*!< set the initial score value */
wangwanglouisa 0:075d80c9688d 85
wangwanglouisa 0:075d80c9688d 86 volatile int printFlag = 0; /*!< set flag of printing */
wangwanglouisa 0:075d80c9688d 87
wangwanglouisa 0:075d80c9688d 88 /**
wangwanglouisa 0:075d80c9688d 89 @namespace Joystickbutton
wangwanglouisa 0:075d80c9688d 90 @brief Define the joysitck button
wangwanglouisa 0:075d80c9688d 91 @brief When joystick button = true, you press the button
wangwanglouisa 0:075d80c9688d 92 @brief Your score would show on the screen
wangwanglouisa 0:075d80c9688d 93 */
wangwanglouisa 0:075d80c9688d 94 volatile int joystickbutton = false;
wangwanglouisa 0:075d80c9688d 95
wangwanglouisa 0:075d80c9688d 96 /**
wangwanglouisa 0:075d80c9688d 97 @namespace Joystickbutton
wangwanglouisa 0:075d80c9688d 98 @brief Use the joystick button to see the currently score
wangwanglouisa 0:075d80c9688d 99 */
wangwanglouisa 0:075d80c9688d 100 void joystickbutton_isr();
wangwanglouisa 0:075d80c9688d 101
wangwanglouisa 0:075d80c9688d 102 /**
wangwanglouisa 0:075d80c9688d 103 @namespace Eat
wangwanglouisa 0:075d80c9688d 104 @brief Define the pixel that touch the point to 'eat'
wangwanglouisa 0:075d80c9688d 105 @brief All around of the pacman can 'eat' the 'food'
wangwanglouisa 0:075d80c9688d 106 */
wangwanglouisa 0:075d80c9688d 107 void eat();
wangwanglouisa 0:075d80c9688d 108
wangwanglouisa 0:075d80c9688d 109 /**
wangwanglouisa 0:075d80c9688d 110 @namespace Food
wangwanglouisa 0:075d80c9688d 111 @brief Define the point
wangwanglouisa 0:075d80c9688d 112 @brief When the point is eaten, it would appear another one
wangwanglouisa 0:075d80c9688d 113 @brief The eaten food would disappeared
wangwanglouisa 0:075d80c9688d 114 */
wangwanglouisa 0:075d80c9688d 115 void food();
wangwanglouisa 0:075d80c9688d 116
wangwanglouisa 0:075d80c9688d 117 // create enumerated type (0,1,2,3 etc. for direction)
wangwanglouisa 0:075d80c9688d 118 // could be extended for diagonals etc.
wangwanglouisa 0:075d80c9688d 119 enum DirectionName {
wangwanglouisa 0:075d80c9688d 120 UP,
wangwanglouisa 0:075d80c9688d 121 DOWN,
wangwanglouisa 0:075d80c9688d 122 LEFT,
wangwanglouisa 0:075d80c9688d 123 RIGHT,
wangwanglouisa 0:075d80c9688d 124 CENTRE,
wangwanglouisa 0:075d80c9688d 125 UNKNOWN
wangwanglouisa 0:075d80c9688d 126 };
wangwanglouisa 0:075d80c9688d 127
wangwanglouisa 0:075d80c9688d 128 // struct for Joystick
wangwanglouisa 0:075d80c9688d 129 typedef struct JoyStick Joystick;
wangwanglouisa 0:075d80c9688d 130 struct JoyStick {
wangwanglouisa 0:075d80c9688d 131 float x; // current x value
wangwanglouisa 0:075d80c9688d 132 float x0; // 'centred' x value
wangwanglouisa 0:075d80c9688d 133 float y; // current y value
wangwanglouisa 0:075d80c9688d 134 float y0; // 'centred' y value
wangwanglouisa 0:075d80c9688d 135 int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
wangwanglouisa 0:075d80c9688d 136 DirectionName direction; // current direction
wangwanglouisa 0:075d80c9688d 137 };
wangwanglouisa 0:075d80c9688d 138
wangwanglouisa 0:075d80c9688d 139 /**
wangwanglouisa 0:075d80c9688d 140 @namespace Joystick
wangwanglouisa 0:075d80c9688d 141 @brief Create struct variable
wangwanglouisa 0:075d80c9688d 142 */
wangwanglouisa 0:075d80c9688d 143 // create struct variable
wangwanglouisa 0:075d80c9688d 144 Joystick joystick;
wangwanglouisa 0:075d80c9688d 145
wangwanglouisa 0:075d80c9688d 146 /**
wangwanglouisa 0:075d80c9688d 147 @namespace CalibrateJoystick
wangwanglouisa 0:075d80c9688d 148 @brief Set calibrateJoystick
wangwanglouisa 0:075d80c9688d 149 */
wangwanglouisa 0:075d80c9688d 150 // function prototypes
wangwanglouisa 0:075d80c9688d 151 void calibrateJoystick();
wangwanglouisa 0:075d80c9688d 152
wangwanglouisa 0:075d80c9688d 153 /**
wangwanglouisa 0:075d80c9688d 154 @namespace UpdateJoystick
wangwanglouisa 0:075d80c9688d 155 @brief Set the speed of updateJoystick
wangwanglouisa 0:075d80c9688d 156 */
wangwanglouisa 0:075d80c9688d 157 void updateJoystick();
wangwanglouisa 0:075d80c9688d 158
wangwanglouisa 0:075d80c9688d 159 /**
wangwanglouisa 0:075d80c9688d 160 @namespace YellowLED
wangwanglouisa 0:075d80c9688d 161 @brief Set-up the on-board LEDs
wangwanglouisa 0:075d80c9688d 162 */
wangwanglouisa 0:075d80c9688d 163 // set-up the on-board LEDs
wangwanglouisa 0:075d80c9688d 164 void yellow();