Final Version of: THE ORGINAL ISHTENDO GAMING SYSTEM including modes such as: Snake Etch-a-Sketch Temperature Sensor Also contains a hidden mini game.. Will you be the one to unlock it .... Ihsian Mulla (el14imfm@leeds.ac.uk) 200839613 May 2016
Dependencies: FXOS8700Q Buzzer ishtendo_vI N5110 SDFileSystem TMP102 mbed
main.cpp
- Committer:
- Ihsianmulla
- Date:
- 2016-05-04
- Revision:
- 0:0fbe9794df10
File content as of revision 0:0fbe9794df10:
//---------------------------- IHSIAN MULLA -------------------------------------------// //---------------------------- PRESENTS..... ------------------------------------------// // ------------ THE ISHTENDO ORIGINAL GAMING SYSTEM ----------------------------------// //----------------LIBRARIES-----------////// #include "N5110.h" #include "joystick.h" #include "mbed.h" #include "TMP102.h" #include "beep.h" #include <stdio.h> #include <stdlib.h> // Buzzer connceted to PWM pin Beep buzzer(PTC10); //On-board RGB led (only need one) DigitalOut r_led(LED_RED); // connections for joystick AnalogIn xPot(PTB3); AnalogIn yPot(PTB2); DigitalIn Jbutton(PTB11); InterruptIn button(PTB18);// Connection for external button // VCC, SCE, RST, D/C, MOSI, SCLK, LED N5110 lcd (PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3); // Ticker functions for joystick and menu Ticker MenuRefresh; Ticker pollJoystick; Joystick joystick; // ---- Global Variables---// int nextmenu=0; /*!< initialises chekc statement for single transition */ int menu = 0; /*!< initialises menu switch statement */ int pointer = 0; /*!< initialises pointer switch statement */ volatile int g_button_flag = 0; // sets flag in the ISR volatile int g_MenuRefresh_flag=0; // sets the flag in the ISR //--Functions--// void error(); void Snake(); void Draw(); void Temp(); void Intro(); void MenuOptions(); void SwitchMenu(); void MenuRefresh_isr(); void button_isr(); //-------------------- MAIN ------------------------------------------// int main() { lcd.init(); // intialise LCD lcd.setBrightness(0.5); lcd.normalMode(); Intro(); calibrateJoystick(); // get centred values of joystick pollJoystick.attach(&updateJoystick,0.25); // read joystick 10 times per second SwitchMenu(); } void Intro() { lcd.printString("ishtendo",10,2); lcd.printString("vI",70,5); lcd.printString(".",45,3); buzzer.beep(1000,0.5); wait(1.0); lcd.printString(".",55,3); buzzer.beep(1000,0.5); wait(1.0); lcd.printString(".",65,3); buzzer.beep(1000,0.5); wait(1.0); buzzer.beep(1500,0.5); lcd.clear(); lcd.refresh(); } void MenuOptions() { lcd.printString("Snake",30,0.5); lcd.printString("Draw",33,2.5); lcd.printString("Temp Sensor",5,4.5); } //switch statement to allow for selection and option highlight user interface void SwitchMenu() { button.fall(&button_isr); button.mode(PullDown); MenuRefresh.attach(&MenuRefresh_isr,0.5); //attach ticker to prevent the board sleeping and becoming unresponsive while(1) { switch (menu) { case 0: // Snake Selection lcd.clear(); MenuOptions(); lcd.printString("<",75,0.5);// // check if flag i.e. interrupt has occured if (g_button_flag) { g_button_flag = 0; // if it has, clear the flag Snake(); } if(joystick.direction==DOWN) pointer=1; else if(joystick.direction==UP) pointer=2; else pointer=0; //implements a switch statement within a switch statement to allow user interface from a joystick //to transition between the 3 states to highlight and select a game option switch(pointer) { case 0: menu=3; nextmenu=0; break; case 1: menu=3; nextmenu=2; break; case 2: menu=3; nextmenu=1; break; } break; case 1 : // Draw Selection lcd.clear(); MenuOptions(); lcd.printString("<",75,2.5); // check if flag i.e. interrupt has occured if (g_button_flag) { g_button_flag = 0; // if it has, clear the flag Draw(); } if(joystick.direction==DOWN) pointer=1; else if(joystick.direction==UP) pointer=2; else pointer=0; switch(pointer) { case 0: menu=3; nextmenu=1; break; case 1: menu=3; nextmenu=0; break; case 2: menu=3; nextmenu=2; break; } break; case 2 : //Temperature Sensor Selection lcd.clear(); MenuOptions(); lcd.printString("<",75,4.5); // check if flag i.e. interrupt has occured if (g_button_flag) { g_button_flag = 0; // if it has, clear the flag Temp(); } if(joystick.direction==DOWN) { pointer=1; } else if (joystick.direction==UP) { pointer=2; } else { pointer=0; } switch(pointer) { case 0: menu=3; nextmenu=2; break; case 1: menu=3; nextmenu=1; break; case 2: menu=3; nextmenu=0; break; } break; case 3: //Checks to prevent multiple transitions of menu cursor (one transition per joystick movement) if(joystick.direction==CENTRE) { menu=nextmenu; } else { menu=3; } break; default: error(); //invalid state - call error routine // or could jump to starting state i.e. state = 0 break; } sleep(); } } // event-triggered interrupt void button_isr() { g_button_flag = 1; // set flag in ISR } //Timer isr void MenuRefresh_isr() { g_MenuRefresh_flag =1; } // error message - flashing red led void error() { while(1) { r_led = 0; wait(0.2); r_led = 1; wait(0.2); } }