ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Tue May 07 17:21:00 2019 +0000
Revision:
29:bdc4138b5171
Parent:
28:be77ad6c0bda
Final Submission. I have read and agreed with the Statement of Academic Integrity.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lewisgw 9:fff2009f826e 1 #ifndef MENU_H
lewisgw 9:fff2009f826e 2 #define MENU_H
lewisgw 9:fff2009f826e 3
lewisgw 9:fff2009f826e 4 #include "mbed.h"
lewisgw 9:fff2009f826e 5 #include "N5110.h"
lewisgw 9:fff2009f826e 6 #include "Gamepad.h"
lewisgw 12:ebaefda53dd0 7 #include "EngineController.h"
lewisgw 12:ebaefda53dd0 8
lewisgw 25:aa145767fda5 9 /** State for finite state machine struct */
lewisgw 25:aa145767fda5 10 struct State {
lewisgw 25:aa145767fda5 11 int output; /**< Integer for output number. */
lewisgw 25:aa145767fda5 12 int next_state[4]; /**< Array of integers for next possible states. */
lewisgw 25:aa145767fda5 13 };
lewisgw 25:aa145767fda5 14
lewisgw 24:c7df5aa476a9 15 /** Menu Class
lewisgw 24:c7df5aa476a9 16 * @brief Class to control the overall state of the game
lewisgw 24:c7df5aa476a9 17 * @author Lewis Wooltorton
lewisgw 24:c7df5aa476a9 18 * @date April 2019
lewisgw 28:be77ad6c0bda 19
lewisgw 28:be77ad6c0bda 20
lewisgw 28:be77ad6c0bda 21 @code
lewisgw 28:be77ad6c0bda 22
lewisgw 28:be77ad6c0bda 23 #include "N5110.h"
lewisgw 28:be77ad6c0bda 24 #include "Gamepad.h"
lewisgw 28:be77ad6c0bda 25 #include "mbed.h"
lewisgw 28:be77ad6c0bda 26 #include "Menu.h"
lewisgw 28:be77ad6c0bda 27
lewisgw 28:be77ad6c0bda 28 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
lewisgw 28:be77ad6c0bda 29 Gamepad gamepad;
lewisgw 28:be77ad6c0bda 30 Menu menu;
lewisgw 28:be77ad6c0bda 31
lewisgw 28:be77ad6c0bda 32 void init_game();
lewisgw 28:be77ad6c0bda 33
lewisgw 28:be77ad6c0bda 34 int main() {
lewisgw 28:be77ad6c0bda 35 gamepad.init();
lewisgw 28:be77ad6c0bda 36 menu.init();
lewisgw 28:be77ad6c0bda 37 lcd.init();
lewisgw 28:be77ad6c0bda 38 lcd.normalMode();
lewisgw 28:be77ad6c0bda 39 lcd.setBrightness(0.5);
lewisgw 28:be77ad6c0bda 40 while(1) {
lewisgw 28:be77ad6c0bda 41
lewisgw 28:be77ad6c0bda 42 // clear, refresh lcd and run the menu.
lewisgw 28:be77ad6c0bda 43 lcd.clear();
lewisgw 28:be77ad6c0bda 44 menu.run(lcd, gamepad);
lewisgw 28:be77ad6c0bda 45 lcd.refresh();
lewisgw 28:be77ad6c0bda 46 wait(0.01);
lewisgw 28:be77ad6c0bda 47 }
lewisgw 28:be77ad6c0bda 48 }
lewisgw 28:be77ad6c0bda 49
lewisgw 28:be77ad6c0bda 50 @endcode
lewisgw 24:c7df5aa476a9 51 */
lewisgw 24:c7df5aa476a9 52
lewisgw 9:fff2009f826e 53 class Menu {
lewisgw 9:fff2009f826e 54 public:
lewisgw 21:20478f086bc2 55 // Constructor and Destructor.
lewisgw 21:20478f086bc2 56 /**
lewisgw 21:20478f086bc2 57 * @brief Constructor @details Non user specified.
lewisgw 21:20478f086bc2 58 */
lewisgw 9:fff2009f826e 59 Menu();
lewisgw 21:20478f086bc2 60 /**
lewisgw 21:20478f086bc2 61 * @brief Destructor @details Non user specified.
lewisgw 21:20478f086bc2 62 */
lewisgw 9:fff2009f826e 63 ~Menu();
lewisgw 12:ebaefda53dd0 64
lewisgw 21:20478f086bc2 65 // Mutators
lewisgw 21:20478f086bc2 66 /**
lewisgw 27:c920c5ec31af 67 * @brief Initialises the Menu object.
lewisgw 21:20478f086bc2 68 */
lewisgw 9:fff2009f826e 69 void init();
lewisgw 21:20478f086bc2 70 /**
lewisgw 21:20478f086bc2 71 * @brief Runs the menu via a state machine.
lewisgw 21:20478f086bc2 72 * @param &lcd @details The lcd object from the N5110 class
lewisgw 21:20478f086bc2 73 * @param &gamepad @details The gamepad object from Gamepad class
lewisgw 21:20478f086bc2 74 */
lewisgw 12:ebaefda53dd0 75 void run(N5110 &lcd, Gamepad &gamepad);
lewisgw 9:fff2009f826e 76
lewisgw 9:fff2009f826e 77 private:
lewisgw 13:bcf6bb69c597 78 void set_input(bool start, bool back, bool x);
lewisgw 12:ebaefda53dd0 79 void run_game(N5110 &lcd, Gamepad &gamepad);
lewisgw 12:ebaefda53dd0 80 void display_menu(N5110 &lcd, Gamepad &gamepad);
lewisgw 12:ebaefda53dd0 81 void display_controls(N5110 &lcd, Gamepad &gamepad);
lewisgw 12:ebaefda53dd0 82 void output(N5110 &lcd, Gamepad &gamepad);
lewisgw 20:a8cad4e044ea 83 void play_tone(Gamepad &gamepad);
lewisgw 21:20478f086bc2 84 void play_chord_a(Gamepad &gamepad);
lewisgw 21:20478f086bc2 85 void play_chord_b(Gamepad &gamepad);
lewisgw 12:ebaefda53dd0 86
lewisgw 12:ebaefda53dd0 87 int _menu_input;
lewisgw 12:ebaefda53dd0 88 EngineController _controller;
lewisgw 12:ebaefda53dd0 89 bool _button;
lewisgw 12:ebaefda53dd0 90 int _state;
lewisgw 12:ebaefda53dd0 91 int _output;
lewisgw 20:a8cad4e044ea 92 bool _tone_flag;
lewisgw 20:a8cad4e044ea 93 int _tone_counter;
lewisgw 21:20478f086bc2 94 int _chord_counter;
lewisgw 9:fff2009f826e 95 };
lewisgw 12:ebaefda53dd0 96 #endif