Mortal Kombat Game ELEC2645

Dependencies:   mbed N5110 ShiftReg Joystick

Revision:
2:1703eb2a68f8
Parent:
1:3bdadf6f6dbd
Child:
3:1d99b6ad4f9e
--- a/main.cpp	Sat Apr 17 11:38:39 2021 +0000
+++ b/main.cpp	Sat Apr 17 12:35:18 2021 +0000
@@ -12,10 +12,10 @@
 Fighter fighter; 
 Menu menu;
 Enemy enemy;
-DigitalIn buttonA(p29);
-DigitalIn buttonB(p28);
-DigitalIn buttonC(p27);
-DigitalIn buttonD(p26);
+InterruptIn buttonA(p29);
+InterruptIn buttonB(p28);
+InterruptIn buttonC(p27);
+InterruptIn buttonD(p26);
 AnalogIn  joy_v(p20);
 AnalogIn  joy_h(p19);
 N5110 lcd(p14,p8,p9,p10,p11,p13,p21);
@@ -28,25 +28,37 @@
 void draw_background();
 void move_enemy();
 int get_user_input(int &input);
-
+void buttonA_isr();
+void buttonB_isr();
+void buttonC_isr();
+void buttonD_isr();
+void button_init();
+void check_interrupt();
+//////////// initializations ////////////////////
+volatile int g_buttonA_flag = 0;
+volatile int g_buttonB_flag = 0;
+volatile int g_buttonC_flag = 0;
+volatile int g_buttonD_flag = 0;
 
 
 int main() {
     init();
     menu_screen();
-    int input;
     while(1) {
-        // lcd.clear();
+        lcd.clear();
         // draw_background();
         // move_enemy();
         // move_sprite();
-        get_user_input(input);
+        check_interrupt();
+    // put the MCU to sleep until an interrupt wakes it up
+        sleep();
     }
 }
 
 void init() { // initialize all devices
     lcd.init();
     lcd.setContrast(0.5);
+    button_init();
 }
 
 void menu_screen() { 
@@ -256,8 +268,58 @@
             break;
         }
     }
-    printf("input is %i", input);
     return input;
 }
 
+// Button A B C D event-triggered interrupt
+void buttonA_isr() {
+    g_buttonA_flag = 1;   // set flag in ISR
+}
+void buttonB_isr() {
+    g_buttonB_flag = 1;   // set flag in ISR
+}
 
+void buttonC_isr() {
+    g_buttonC_flag = 1;   // set flag in ISR
+}
+
+void buttonD_isr() {
+    g_buttonD_flag = 1;   // set flag in ISR
+}
+
+void button_init() {
+    buttonA.rise(&buttonA_isr);
+    buttonB.rise(&buttonB_isr);
+    buttonC.rise(&buttonC_isr);
+    buttonD.rise(&buttonD_isr);
+    buttonA.mode(PullNone);
+    buttonB.mode(PullNone);
+    buttonC.mode(PullNone);
+    buttonD.mode(PullNone);
+}
+
+void check_interrupt() {
+    int input;
+    get_user_input(input);
+    // check if flag i.e. interrupt has occured
+    if (g_buttonA_flag == 1) {
+        g_buttonA_flag = 0;
+    printf("user input is %i ", input);
+    wait(0.1);
+    }
+    else if (g_buttonB_flag == 1) {
+        g_buttonB_flag = 0;
+    printf("user input is %i ", input);
+    wait(0.1);
+    }
+    else if (g_buttonC_flag == 1) {
+        g_buttonC_flag = 0;
+    printf("user input is %i ", input);
+    wait(0.1);
+    }
+    else if (g_buttonD_flag == 1) {
+        g_buttonD_flag = 0;
+    printf("user input is %i ", input);
+    wait(0.1);
+    }
+}