![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Mortal Kombat Game ELEC2645
Dependencies: mbed N5110 ShiftReg Joystick
Diff: main.cpp
- 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); + } +}