ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el18jgb

Dependencies:   mbed

Committer:
el18jgb
Date:
Tue May 19 09:11:48 2020 +0000
Revision:
14:66a1965318cb
Parent:
13:cfdfe60a2327
Child:
15:01a69bdb85e9
initial meanu, play and istruction working, will attempt to implement highscore using sd card, time permitting;

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
el18jgb 1:1144f48b5965 7 Name:Joe Body
el18jgb 1:1144f48b5965 8 Username:el18jgb
el18jgb 1:1144f48b5965 9 Student ID Number:201215898
el18jgb 1:1144f48b5965 10 Date:11/03/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"
el18jgb 4:6f898b000797 17 #include "Aim.h"
el18jgb 2:56b31902c800 18 #include "Heston.h"
el18jgb 5:c37f4ed2cad3 19 #include "Eng.h"
el18jgb 14:66a1965318cb 20 #include "Menu.h"
eencae 0:b7f1f47bb26a 21
eencae 0:b7f1f47bb26a 22
eencae 0:b7f1f47bb26a 23 // objects
eencae 0:b7f1f47bb26a 24 Gamepad pad;
eencae 0:b7f1f47bb26a 25 N5110 lcd;
el18jgb 14:66a1965318cb 26 Menu menu;
el18jgb 5:c37f4ed2cad3 27 Eng eng;
el18jgb 5:c37f4ed2cad3 28
el18jgb 1:1144f48b5965 29
el18jgb 5:c37f4ed2cad3 30 // flag - must be volatile as changes within ISR
el18jgb 5:c37f4ed2cad3 31 // g_ prefix makes it easier to distinguish it as global
el18jgb 5:c37f4ed2cad3 32 volatile int g_timer_flag = 0;
el18jgb 5:c37f4ed2cad3 33
el18jgb 5:c37f4ed2cad3 34 // function prototypes
el18jgb 5:c37f4ed2cad3 35 void timer_isr();
el18jgb 1:1144f48b5965 36
el18jgb 1:1144f48b5965 37
el18jgb 1:1144f48b5965 38 void init();
el18jgb 1:1144f48b5965 39 void render();
el18jgb 14:66a1965318cb 40 void play(Gamepad &pad, N5110 &lcd);
el18jgb 1:1144f48b5965 41 //void read_input(Gamepad &pad);
eencae 0:b7f1f47bb26a 42
eencae 0:b7f1f47bb26a 43 int main()
eencae 0:b7f1f47bb26a 44 {
el18jgb 14:66a1965318cb 45 //int fps = 10; // frames per second
el18jgb 14:66a1965318cb 46 //int A_timer = 0;
el18jgb 1:1144f48b5965 47 init(); // initialise and then display welcome screen...
el18jgb 1:1144f48b5965 48 while (1) {
el18jgb 14:66a1965318cb 49 int mode = menu.display(lcd, pad);
el18jgb 14:66a1965318cb 50 wait(0.1); // and wait for one frame period
el18jgb 14:66a1965318cb 51 if (mode == 1){
el18jgb 14:66a1965318cb 52 play(pad, lcd);
el18jgb 8:0b9a824c75fe 53 }
el18jgb 14:66a1965318cb 54 //else if (mode == 2){
el18jgb 14:66a1965318cb 55 // play(pad, lcd);
el18jgb 14:66a1965318cb 56 //}
el18jgb 14:66a1965318cb 57 else if (mode == 3){
el18jgb 14:66a1965318cb 58 menu.instructions(lcd, pad);
el18jgb 14:66a1965318cb 59 }
el18jgb 1:1144f48b5965 60 }
eencae 0:b7f1f47bb26a 61
eencae 0:b7f1f47bb26a 62 }
eencae 0:b7f1f47bb26a 63
el18jgb 1:1144f48b5965 64 // initialies all classes and libraries
el18jgb 1:1144f48b5965 65 void init()
el18jgb 1:1144f48b5965 66 {
el18jgb 1:1144f48b5965 67 // need to initialise LCD and Gamepad
el18jgb 1:1144f48b5965 68 lcd.init();
el18jgb 1:1144f48b5965 69 pad.init();
el18jgb 5:c37f4ed2cad3 70
el18jgb 5:c37f4ed2cad3 71 eng.init();
el18jgb 1:1144f48b5965 72
el18jgb 1:1144f48b5965 73 }
el18jgb 1:1144f48b5965 74
el18jgb 1:1144f48b5965 75 // this function draws each frame on the LCD
el18jgb 1:1144f48b5965 76 void render()
el18jgb 1:1144f48b5965 77 {
el18jgb 1:1144f48b5965 78 // clear screen, re-draw and refresh
el18jgb 1:1144f48b5965 79 lcd.clear();
el18jgb 5:c37f4ed2cad3 80
el18jgb 5:c37f4ed2cad3 81 eng.draw(lcd);
el18jgb 1:1144f48b5965 82 lcd.refresh();
el18jgb 1:1144f48b5965 83 }
el18jgb 1:1144f48b5965 84
el18jgb 14:66a1965318cb 85
el18jgb 14:66a1965318cb 86 void play(Gamepad &pad, N5110 &lcd)
el18jgb 14:66a1965318cb 87 {
el18jgb 14:66a1965318cb 88 int A_timer = 0;
el18jgb 14:66a1965318cb 89 while (1) {
el18jgb 14:66a1965318cb 90 //read_input(pad);
el18jgb 14:66a1965318cb 91 int fire = 0;
el18jgb 14:66a1965318cb 92 if (A_timer <= 0){
el18jgb 14:66a1965318cb 93 fire = 0;
el18jgb 14:66a1965318cb 94 if (pad.A_held()){
el18jgb 14:66a1965318cb 95 fire = 1;
el18jgb 14:66a1965318cb 96 A_timer = 6;
el18jgb 14:66a1965318cb 97
el18jgb 14:66a1965318cb 98 }
el18jgb 14:66a1965318cb 99 }
el18jgb 14:66a1965318cb 100
el18jgb 14:66a1965318cb 101
el18jgb 14:66a1965318cb 102 eng.update(pad, fire, lcd);
el18jgb 14:66a1965318cb 103 render();
el18jgb 14:66a1965318cb 104 wait(0.1);
el18jgb 14:66a1965318cb 105
el18jgb 14:66a1965318cb 106 A_timer--;
el18jgb 14:66a1965318cb 107
el18jgb 14:66a1965318cb 108 eng.tik();
el18jgb 14:66a1965318cb 109 //printf("fire = %d\n", fire);
el18jgb 14:66a1965318cb 110 //printf("shot cooldown = %d\n", A_timer);
el18jgb 14:66a1965318cb 111
el18jgb 14:66a1965318cb 112 }
el18jgb 14:66a1965318cb 113 }