Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Menu/Menu.h@29:bdc4138b5171, 2019-05-07 (annotated)
- 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?
| User | Revision | Line number | New 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 |