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: N5110 PinDetect PowerControl mbed
main.cpp
- Committer:
- Siriagus
- Date:
- 2015-04-28
- Revision:
- 2:0ae5ac8b0cac
- Parent:
- 1:0cfe2255092a
- Child:
- 3:4e3f342a135c
File content as of revision 2:0ae5ac8b0cac:
/** @brief Simple platform game developed for ELEC2645 Embedded Systems Project at University of Leeds @author Andreas Garmannslund **/ #include "mbed.h" #include "N5110.h" #include "PowerControl.h" #include "PinDetect.h" #include "Joystick.h" #include <string> #include "State.h" #include "MainMenu.h" #include "map.h" #include "images.h" #include <ctime> // Redefine pin names for simple access. #define JOY_H p17 #define JOY_V p16 #define JOY_BTN p15 #define LED_POT p20 #define BUTTON_A p28 #define BUTTON_B p27 #define BUTTON_C p29 enum MenuState {SELECT_MENU, HIGH_SCORES, CONTROLS, LOAD_GAME}; MenuState currentState; // current state // Components N5110 *lcd; // VCC, SCE, RST, D/C, MOSI, SCLK and LED Joystick *joystick; // Brightness potentiometer AnalogIn ledPot(LED_POT); /* // Buttons DigitalIn btnA(p27); DigitalIn btnB(p28); DigitalIn btnC(p29); */ // Debugging Serial pc(USBTX, USBRX); BusOut leds(LED1, LED2, LED3, LED4); // @brief Clears the screen and fill it with the image in the argument. void clearAndDrawImage(const int img[BANKS][WIDTH]) { for (int i = 0; i < BANKS; ++i) { for (int j = 0; j < WIDTH; ++j) { lcd->buffer[j][i] = img[i][j]; } } lcd->refresh(); } State *stateObj; // current state object void init() { // Init LCD lcd = new N5110(p7, p8, p9, p10, p11, p13, p26); lcd->init(); //lcd->normalMode(); lcd->setBrightness(1.0 - ledPot); // Update brightness of screen // Init joystick joystick = new Joystick(JOY_H, JOY_V, JOY_BTN); joystick->calibrate(); // Set initial state // currentState = MENU; currentState = SELECT_MENU; // stateObj = new MainMenu(lcd, BUTTON_A, BUTTON_B, BUTTON_C); } void cleanUp() { delete lcd; delete joystick; delete stateObj; } // States const int NUM_CHOICES = 3; std::string choices[NUM_CHOICES] = {"Play", "High Score", "Controls"}; int selectedChoice = 0; PinDetect btnA(BUTTON_A); PinDetect btnB(BUTTON_B); PinDetect btnC(BUTTON_C); void btnAPressed() { switch(currentState) { case SELECT_MENU: switch(selectedChoice) { case 0: currentState = LOAD_GAME; break; case 1: currentState = HIGH_SCORES; break; case 2: currentState = CONTROLS; break; } break; case CONTROLS: case HIGH_SCORES: currentState = SELECT_MENU; break; } } void btnBPressed() { switch(currentState) { case HIGH_SCORES: case CONTROLS: currentState = SELECT_MENU; break; } } void btnCPressed() { if (currentState == SELECT_MENU) selectedChoice = (selectedChoice + 1) % NUM_CHOICES; } // Processes button input. int buttons = 0; // Three first bit corresponds the buttons void processButtonInput(int buttonPressed) { switch(buttonPressed) { case 0: // Button A btnAPressed(); break; case 1: // Button B btnBPressed(); break; case 2: // Button C btnCPressed(); break; } } int main() { init(); // button btnA.attach_asserted(&btnAPressed); btnB.attach_asserted(&btnBPressed); btnC.attach_asserted(&btnCPressed); btnA.setSampleFrequency(); btnB.setSampleFrequency(); btnC.setSampleFrequency(); // Game loop, fixed-time step, updates game logic with regular intervals, rendering happens as fast as possible while(true) { lcd->clear(); //stateObj->run(); joystick->update(); lcd->setBrightness(1.0 - ledPot); // Update brightness of screen // Process events // Update switch (currentState) { case SELECT_MENU: for (int i = 0; i < 3; ++i) { std::string str = (selectedChoice == i) ? ("> " + choices[i]) : choices[i]; lcd->printString(str.c_str(), 10, i+1); } break; case HIGH_SCORES: // Placeholder TODO: Actually high scores lcd->printString("High Scores", 10, 0); lcd->printString("AND 1000000", 10, 1); lcd->printString("AND 500000", 10, 2); lcd->printString("AND 100", 10, 3); lcd->printString("> Back", 10, 4); break; case CONTROLS: lcd->printString("Controls", 10, 0); lcd->printString("A: Jump", 10, 1); lcd->printString("B: Shoot", 10, 2); lcd->printString("C: Pause", 10, 3); lcd->printString("> Back", 10, 4); break; case LOAD_GAME: lcd->inverseMode(); clearAndDrawImage(logo); break; } lcd->refresh(); Sleep(); } cleanUp(); return 0; }