Albert Tan Mulligan Submission

Dependencies:   mbed

Committer:
Albutt
Date:
Mon May 18 11:38:28 2020 +0000
Revision:
3:fcc9cf213a61
Parent:
2:c25ec0da7636
Child:
4:b16b6078a432
Menu and Pause Button

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:b7f1f47bb26a 1 /*
eencae 0:b7f1f47bb26a 2 ELEC2645 Embedded Systems Project
eencae 0:b7f1f47bb26a 3 School of Electronic & Electrical Engineering
eencae 0:b7f1f47bb26a 4 University of Leeds
eencae 0:b7f1f47bb26a 5 2019/20
eencae 0:b7f1f47bb26a 6
Albutt 1:a52187d01a78 7 Name: Albert Tan Mulligan
Albutt 1:a52187d01a78 8 Username: el18ajst
Albutt 1:a52187d01a78 9 Student ID Number:201241153
Albutt 1:a52187d01a78 10 Date:10/4/2020
eencae 0:b7f1f47bb26a 11 */
eencae 0:b7f1f47bb26a 12
eencae 0:b7f1f47bb26a 13 // includes
eencae 0:b7f1f47bb26a 14 #include "mbed.h"
eencae 0:b7f1f47bb26a 15 #include "Gamepad.h"
eencae 0:b7f1f47bb26a 16 #include "N5110.h"
Albutt 2:c25ec0da7636 17 #include "Character.h"
Albutt 2:c25ec0da7636 18 Serial pc(USBTX, USBRX);
Albutt 3:fcc9cf213a61 19 //STRUCTS
Albutt 3:fcc9cf213a61 20 struct State {
Albutt 3:fcc9cf213a61 21 int number;
Albutt 3:fcc9cf213a61 22 int next_state[2];
Albutt 3:fcc9cf213a61 23 };
Albutt 3:fcc9cf213a61 24
Albutt 3:fcc9cf213a61 25 //OBJECTS
eencae 0:b7f1f47bb26a 26 Gamepad pad;
eencae 0:b7f1f47bb26a 27 N5110 lcd;
Albutt 2:c25ec0da7636 28 Character p1;
Albutt 3:fcc9cf213a61 29 //Variables
Albutt 3:fcc9cf213a61 30 State fsm[3] = {
Albutt 3:fcc9cf213a61 31 {0,{1,1}},
Albutt 3:fcc9cf213a61 32 {1,{2,2}},
Albutt 3:fcc9cf213a61 33 {2,{1,0}}
Albutt 3:fcc9cf213a61 34 };
Albutt 3:fcc9cf213a61 35 volatile int Current_State = 0;
Albutt 3:fcc9cf213a61 36 //PROTOTYPES
Albutt 3:fcc9cf213a61 37 void menu();
Albutt 3:fcc9cf213a61 38 void GameRun();
Albutt 3:fcc9cf213a61 39 void Pause();
Albutt 3:fcc9cf213a61 40 void LevelUp();
Albutt 3:fcc9cf213a61 41 //FUNCTIONS
eencae 0:b7f1f47bb26a 42 int main()
Albutt 3:fcc9cf213a61 43 {
Albutt 3:fcc9cf213a61 44 //pc.printf("Main Open");
Albutt 3:fcc9cf213a61 45 //SETUPS
Albutt 3:fcc9cf213a61 46 pad.init();
Albutt 2:c25ec0da7636 47 lcd.init();
Albutt 3:fcc9cf213a61 48 lcd.clear();
Albutt 3:fcc9cf213a61 49 //testing CoolTerm
Albutt 3:fcc9cf213a61 50 //pc.printf("CoolTerm is Connected\n");
Albutt 3:fcc9cf213a61 51 //pc.printf("CurrentState = %d\n", Current_State);
Albutt 2:c25ec0da7636 52
Albutt 3:fcc9cf213a61 53 while(1){
Albutt 3:fcc9cf213a61 54 if(Current_State == 0){
Albutt 3:fcc9cf213a61 55 menu();
Albutt 3:fcc9cf213a61 56 }
Albutt 3:fcc9cf213a61 57 else if (Current_State == 1){
Albutt 3:fcc9cf213a61 58 GameRun();
Albutt 3:fcc9cf213a61 59 }
Albutt 3:fcc9cf213a61 60 else if (Current_State ==2){
Albutt 3:fcc9cf213a61 61 Pause();
Albutt 3:fcc9cf213a61 62 }
Albutt 3:fcc9cf213a61 63 }
Albutt 3:fcc9cf213a61 64 }
Albutt 3:fcc9cf213a61 65
Albutt 3:fcc9cf213a61 66 void menu(){
Albutt 3:fcc9cf213a61 67 //pc.printf("Menu Open");
Albutt 3:fcc9cf213a61 68 lcd.printString(" BoxHead ",0,1);
Albutt 3:fcc9cf213a61 69 lcd.printString(" Press For \nWeapon\n and Start ",0,3);
Albutt 3:fcc9cf213a61 70 lcd.refresh();
Albutt 3:fcc9cf213a61 71 while (1) {
Albutt 3:fcc9cf213a61 72 //pc.printf("While Loop + %d", g_pad.Button_A_flag);
Albutt 3:fcc9cf213a61 73 if (pad.A_pressed()) {
Albutt 3:fcc9cf213a61 74 //pc.printf("Button_A");
Albutt 3:fcc9cf213a61 75 Current_State = fsm[0].next_state[0];
Albutt 3:fcc9cf213a61 76 p1.init(40,22);
Albutt 3:fcc9cf213a61 77 return;
Albutt 3:fcc9cf213a61 78 }
Albutt 3:fcc9cf213a61 79 if (pad.X_pressed()) {
Albutt 3:fcc9cf213a61 80 //pc.printf("Button_X");
Albutt 3:fcc9cf213a61 81 Current_State = fsm[0].next_state[0];
Albutt 3:fcc9cf213a61 82 p1.init(40,22);
Albutt 3:fcc9cf213a61 83 return;
Albutt 3:fcc9cf213a61 84 }
Albutt 3:fcc9cf213a61 85 if (pad.Y_pressed()) {
Albutt 3:fcc9cf213a61 86 //pc.printf("Button_Y");
Albutt 3:fcc9cf213a61 87 Current_State = fsm[0].next_state[0];
Albutt 3:fcc9cf213a61 88 p1.init(40,22);
Albutt 3:fcc9cf213a61 89 return;
Albutt 3:fcc9cf213a61 90 }
Albutt 3:fcc9cf213a61 91 }
Albutt 3:fcc9cf213a61 92 sleep();
Albutt 3:fcc9cf213a61 93 }
Albutt 3:fcc9cf213a61 94
Albutt 3:fcc9cf213a61 95 void GameRun(){
Albutt 3:fcc9cf213a61 96 //pc.printf("Game Open");
Albutt 2:c25ec0da7636 97 Direction dir = pad.get_direction();
Albutt 2:c25ec0da7636 98 float mag = pad.get_mag();
Albutt 2:c25ec0da7636 99 while(1){
Albutt 3:fcc9cf213a61 100 //movement code
Albutt 2:c25ec0da7636 101 dir = pad.get_direction();
Albutt 2:c25ec0da7636 102 mag = pad.get_mag();
Albutt 2:c25ec0da7636 103 p1.update(dir, mag);
Albutt 2:c25ec0da7636 104 lcd.clear();
Albutt 2:c25ec0da7636 105 p1.draw(lcd);
Albutt 2:c25ec0da7636 106 lcd.refresh();
Albutt 2:c25ec0da7636 107 wait(1.0f/10.0);
Albutt 3:fcc9cf213a61 108 if (pad.start_pressed()) {
Albutt 3:fcc9cf213a61 109 Current_State = fsm[Current_State].next_state[0];
Albutt 3:fcc9cf213a61 110 return;
Albutt 3:fcc9cf213a61 111
Albutt 3:fcc9cf213a61 112 }
Albutt 2:c25ec0da7636 113 }
eencae 0:b7f1f47bb26a 114 }
Albutt 3:fcc9cf213a61 115 void Pause(){
Albutt 3:fcc9cf213a61 116 lcd.printString(" PAUSED ",0,1);
Albutt 3:fcc9cf213a61 117 lcd.refresh();
Albutt 3:fcc9cf213a61 118 // put the MCU to sleep until an interrupt wakes it up
Albutt 3:fcc9cf213a61 119 if (pad.start_pressed()) {
Albutt 3:fcc9cf213a61 120 Current_State = fsm[Current_State].next_state[0];
Albutt 3:fcc9cf213a61 121 return;
eencae 0:b7f1f47bb26a 122
Albutt 3:fcc9cf213a61 123 }
Albutt 3:fcc9cf213a61 124 if (pad.B_pressed()) {
Albutt 3:fcc9cf213a61 125 Current_State = fsm[Current_State].next_state[1];
Albutt 3:fcc9cf213a61 126 lcd.clear();
Albutt 3:fcc9cf213a61 127 return;
Albutt 3:fcc9cf213a61 128
Albutt 3:fcc9cf213a61 129 }
Albutt 3:fcc9cf213a61 130 sleep();
Albutt 3:fcc9cf213a61 131 }
Albutt 3:fcc9cf213a61 132 void LevelUp(){
Albutt 3:fcc9cf213a61 133
Albutt 3:fcc9cf213a61 134 lcd.printString(" NEXT LEVEL ",0,1);
Albutt 3:fcc9cf213a61 135 wait(2.0);
Albutt 3:fcc9cf213a61 136 lcd.refresh();
Albutt 3:fcc9cf213a61 137 p1.level_up();
Albutt 3:fcc9cf213a61 138 Current_State = fsm[Current_State].next_state[0];
Albutt 3:fcc9cf213a61 139 return;
Albutt 3:fcc9cf213a61 140 }