
Ellis Blackford Stroud 201155309
Dependencies: mbed FATFileSystem
main.cpp
- Committer:
- ellisbhastroud
- Date:
- 2019-05-09
- Revision:
- 16:c8d68cbd1ae2
- Parent:
- 15:d855e8c666e7
- Child:
- 17:98127ac75195
File content as of revision 16:c8d68cbd1ae2:
/* ELEC2645 Embedded Systems Project School of Electronic & Electrical Engineering University of Leeds Name: Ellis Blackford Stroud Username: el17ebs Student ID Number: 201155309 Date: 09/05/19 */ #include "mbed.h" #include "Gamepad.h" #include "N5110.h" #include "SDFileSystem.h" #include "Menu.h" #include "GolfEngine.h" // objects N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); Gamepad pad; Menu menu; GolfEngine golf; Ticker ticker_frame; //prototypes void frame_isr(); void init(); //global variables volatile int g_frame_flag = 0; //flag set in isr to control running frame rate of game //functions int main() { init(); //Initialises pad, lcd and menu objects. Sets up ticker menu.welcome_loop(pad, lcd); //Prints welcome screen and loops until start pressed while(1) { //Menu Loop - Naviagates series of loops for menu screens if(menu.get_start_game_flag() == false) { //if start flag false stay in menu loop menu.menu_loop(pad, lcd); //main menu screen - loops until user chooses next screen switch (menu.get_screen()) { //uses user choice to enter next loop in menu case START: menu.start_loop(pad, lcd); //loops until A pressed then game begins break; case HIGHSCORES: menu.highscores_loop(pad, lcd, sd); //loops until back pressed then returns to main menu screen break; case SETTINGS: menu.settings_loop(pad, lcd); //loops until back pressed then returns to main menu screen break; } //when user exits sub-menu loop check game_start_flag - if false then return to main menu loop } else { //Game Loop - If start flag = true menu.reset_start_game_flag(); //resets start flag to return to menu after course complete golf.init(menu.get_frame_rate()); //initialises golf objects, sets variables for game and sets frame rate ticker_frame.attach(&frame_isr,1.0f/menu.get_frame_rate()); //sets up ticker used to control running speed/frame rate lcd.clear(); golf.printLevel(lcd); //Indicating start of game lcd.refresh(); wait(3.0f); golf.reset_game_over_flag(); /* UNCOMMENT FOR TESTING printf("Game Initialised\n",_level-1); print("Frame Rate = %i Hz\n",menu.get_frame_rate())); print("Begin Level 1 \n",menu.get_frame_rate())); */ while(golf.get_game_over_flag() == false){ //Main Game Loop - When game is over returns to start at menu screen if(g_frame_flag) { //If ticker calls isr and game not over g_frame_flag = 0; //reset flag lcd.clear(); //clears lcd buffer golf.read_input(pad); //reads input from gamepad golf.update_ball(pad, lcd); //moves ball and checks for bounces/shots/holes/game over golf.drawGame(lcd); //draws ball, walls etc. - draws game from previous frame golf.check_end_level(lcd, pad, sd); //checks if level comleted and if game over lcd.refresh(); //updates lcd display sleep(); //sleeps mcu until ticker wakes it up } } } } } void frame_isr() //called by ticker at rate of frame rate { g_frame_flag = 1; // set flag in ISR } void init() //initialises lcd and pad peripherals { lcd.init(); pad.init(); menu.init(); lcd.setContrast(0.55f); //can alter this in settings lcd.setBrightness(1.0f); //can alter this in settings }