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: mbed
Menu/Menu.cpp
- Committer:
- lukeocarwright
- Date:
- 2020-05-26
- Revision:
- 30:08cc4ec58d07
- Parent:
- 29:207111ffd6e6
- Child:
- 31:cfdb014ff086
File content as of revision 30:08cc4ec58d07:
#include "mbed.h" #include "Menu.h" //Global Variables volatile int g_mainmenu_flag; //objects Front front; //constructor/destructor Menu::Menu() { } Menu::~Menu() { } // PUBLIC methods--------------------------------------------------------------- void Menu::mainmenu(N5110 &lcd, Gamepad &pad) //main menu { g_mainmenu_flag=0; //Globals Init g_selecty=10; submenu=menuflag=1; //Variables Init menusize=4; printmainmenu(lcd); //prints menu to display pad.reset_buttons();//elimnates Prev Button Press while (menuflag==1) { s=scroll(lcd, pad, submenu, menusize); if (s==1) { printmainmenu(lcd); submenu++; wait_ms(200); } if (s==-1) { printmainmenu(lcd); submenu--; wait_ms(200); } if ( pad.A_pressed()) { //selects // printf("A pressed\n"); //printf("SubMenu %d selected\n", submenu); wait_ms(200); //debounce menuflag=0; } } switch (submenu) { case 1: subwaveforms(lcd,pad); case 2: subinstructions(lcd,pad); case 3: subsettings(lcd,pad); case 4: subcredits(lcd,pad); } } void Menu::subwaveforms(N5110 &lcd, Gamepad &pad) //waveforms sub { while (1) { g_selecty=10; //initialises Global var submenu=menuflag=1; //initialises Variables menusize=3; //printf("Waveforms menu \n"); //Debug printsubwaveforms(lcd); pad.reset_buttons(); while (menuflag==1) { //looped s=scroll(lcd,pad,submenu,menusize); if (s==1) { printsubwaveforms(lcd); submenu++; wait_ms(200); } if (s==-1) { printsubwaveforms(lcd); submenu--; wait_ms(200); } if (pad.A_pressed()) { //Select //printf("Submenu: %d selected\n", submenu); //debug wait_ms(200); //debounce menuflag=0; //sets flag } if (pad.B_pressed()) { //go back menu //printf("Main Menu selected\n"); //debug submenu=0; wait_ms(200); //debounce menuflag=0; //sets flag } } if(submenu==0) { //allows main selected mainmenu(lcd,pad); break; } if(submenu>=1) { //allows waveform selected front.frontrun(lcd,pad,submenu); } mainmenu(lcd,pad); break; } } void Menu::subinstructions(N5110 &lcd, Gamepad &pad) //instruction sub { menuflag=1; //sets flag //printf("Instructions menu \n"); lcd.clear(); lcd.printString("Instructions:",2,0); lcd.printString("See attached",3,1); lcd.printString("User Manual",3,2); pad.reset_buttons(); lcd.refresh(); while (menuflag==1) { if (pad.B_pressed()) { // printf("B pressed\n"); printf("Main Menu selected\n"); submenu=0; wait_ms(200); //debounce menuflag=0; //sets flag } } if(submenu==0) { //allows main menu select mainmenu(lcd,pad); } } void Menu::subcredits(N5110 &lcd, Gamepad &pad) //credits sub menu { //printf("Credits \n"); lcd.clear(); lcd.printString("Credits",22,0); //prints credits to screen lcd.printString("Coded,Produced",0,1); lcd.printString("+ Built by",10,2); lcd.printString("Luke",30,3); lcd.printString("Cartwright",13,4); lcd.refresh(); //refresh buffer menuflag=1; //sets flag pad.reset_buttons(); while (menuflag==1) { if (pad.B_pressed()) { //go back menu //printf("Main Menu selected\n"); submenu=0; wait_ms(200); //debounce menuflag=0; //sets flag } } if(submenu==0) { //back to main mainmenu(lcd,pad); } } void Menu::subsettings(N5110 &lcd, Gamepad &pad) { g_selecty=10; submenu=menuflag=1; //initialises Variables menusize=4; //printf("Settings menu \n"); printsubsettings(lcd); pad.reset_buttons(); while (menuflag==1) { //looped s=scroll(lcd,pad,submenu,menusize); if (s==1) { printsubsettings(lcd); submenu++; wait_ms(200); } if (s==-1) { printsubsettings(lcd); submenu--; wait_ms(200); } if (pad.A_pressed()) { //go back menu //printf("Submenu: %d selected\n", submenu); //debug wait_ms(200); //debounce menuflag=0; //sets flag } if (pad.B_pressed()) { //go back menu //printf("Main Menu selected\n"); //debug submenu=0; wait_ms(200); //debounce menuflag=0; //sets flag } } switch (submenu) { case 0: mainmenu(lcd,pad); case 1: volumerun(lcd,pad); case 2: backlightrun(lcd,pad); case 3: contrastrun(lcd,pad); case 4: inverse_mode(lcd,pad); } } void Menu::volumerun(N5110 &lcd, Gamepad &pad) { //printf("Volume Settings \n"); menuflag=1; //sets flag lcd.clear(); lcd.printString("Volume:",3,0); lcd.printString("Use screw",3,1); lcd.printString("potentiometer",3,2); lcd.printString("on rear",3,3); lcd.refresh(); pad.reset_buttons(); while (menuflag==1) { if (pad.B_pressed()) { // printf("B pressed\n"); printf("Main Menu selected\n"); submenu=0; wait_ms(200); //debounce menuflag=0; //sets flag } } if(submenu==0) { //allows main menu select subsettings(lcd,pad); } } void Menu::inverse_mode(N5110 &lcd, Gamepad &pad) { lcd.clear(); lcd.printString("Inverse Mode:",3,0); lcd.printString("Press A to",3,1); lcd.printString("toggle",3,2); lcd.refresh(); menuflag=1; toggle=true; while (menuflag==1) { if (pad.A_pressed()) { if (toggle==true) { lcd.normalMode(); toggle=false; } else if (toggle==false) { lcd.inverseMode(); toggle=true; } wait_ms(500);//debounce } if (pad.B_pressed()) { menuflag=0; } } wait_ms(500);//debounce pad.reset_buttons(); subsettings(lcd,pad); } void Menu::contrastrun(N5110 &lcd, Gamepad &pad) { menuflag=1; //sets flag //printf("Contrast Settings \n"); lcd.clear(); lcd.printString("Contrast:",3,0); contrast=0.5; pad.reset_buttons(); printcontrast(lcd,contrast); while (menuflag==1) { //looped s=scroll(lcd,pad,10,20); if (s!=s_1) { //printf("S= %d",s); if (s==1) { printcontrast(lcd,contrast); contrast=contrast+0.05f; lcd.setContrast(contrast); //printf("CONTRAST UP\n"); wait_ms(200); } if (s==-1) { printcontrast(lcd,contrast); contrast=contrast-0.05f; lcd.setContrast(contrast); //printf("CONTRAST DOWN\n"); wait_ms(200); } } if (pad.B_pressed()) { //go back menu // printf("B pressed\n"); //printf("Main Menu selected\n"); //debug submenu=0; lcd.clear(); lcd.printString("Contrast Set",3,3); lcd.refresh(); wait_ms(900); //debounce + display menuflag=0; //sets flag } s=s_1; } subsettings(lcd,pad); } void Menu::backlightrun(N5110 &lcd, Gamepad &pad) { lcd.clear(); lcd.printString("Backlight:",3,0); lcd.printString("Press A to",3,1); lcd.printString("toggle",3,2); lcd.refresh(); menuflag=1; toggle=true; while (menuflag==1) { if (pad.A_pressed()) { if (toggle==true) { lcd.backLightOn(); toggle=false; } else if (toggle==false) { lcd.backLightOff(); toggle=true; } wait_ms(500);//debounce } if (pad.B_pressed()) { menuflag=0; } } wait_ms(500);//debounce pad.reset_buttons(); subsettings(lcd,pad); } //Private Methods-------------------------------------------------------------- void Menu::printmainmenu(N5110 &lcd) //prints main menu { //printf("Printing Main Menu \n"); lcd.clear(); //clears current buffer lcd.drawRect(78,g_selecty,5,5,FILL_BLACK); //prints select box at y value lcd.printString("MAIN MENU",3,0); //title print //SUBMENU TITLES lcd.printString("Waveforms",3,1); lcd.printString("Instructions",3,2); lcd.printString("Settings",3,3); lcd.printString("Credits",3,4); lcd.refresh(); //updates display } void Menu::printsubwaveforms(N5110 &lcd) //prints subwaveforms menu { printf("Printing Waveforms menu\n"); lcd.clear(); //clears current buffer lcd.drawRect(78,g_selecty,5,5,FILL_BLACK); //prints select box at y value lcd.printString("WAVEFORMS:",3,0); //title print //SUBMENU TITLES lcd.printString("Sine",3,1); lcd.printString("Triangle",3,2); lcd.printString("Square",3,3); lcd.refresh(); //updates display } void Menu::printsubsettings(N5110 &lcd) //prints settings menu { //printf("Printing Settings menu\n"); lcd.clear(); lcd.drawRect(78,g_selecty,5,5,FILL_BLACK); //prints select box at y value lcd.printString("Settings:",3,0); //title print //SUBMENU TITLES lcd.printString("Volume",3,1); lcd.printString("Backlight",3,2); lcd.printString("Contrast",3,3); lcd.printString("Inverse Mode",3,4); lcd.refresh(); //updates display } void Menu::printcontrast(N5110 &lcd, float contrast) //prints contrast edit screen { lcd.clear(); lcd.printString("Contrast:",3,0);//title print lcd.printString("VISIBILITY",12,3); lcd.refresh(); } void Menu::subunavailiable(N5110 &lcd) //for currently undeveloped menu { //printf("sub unavailiable\n"); lcd.printString("Unavailiable",3,1); lcd.refresh(); } int Menu::scroll(N5110 &lcd, Gamepad &pad, int submenu, int menusize) //checks srolling { int d=scroll_check(pad); if(d != 0) { if (d==1) { //N scrolls up //printf("N \n"); //debug submenu--; g_selecty=g_selecty-8; //line size=8 if (submenu<=0) { //stops overflow submenu++; g_selecty = g_selecty+8; return(0); } //printf("SubMenu= %d\n", submenu); //debug return(-1); } if (d==5) { //S scrolls down //printf("S \n"); submenu++; g_selecty=g_selecty+8; if (submenu >menusize) { //stops overflow submenu--; g_selecty = g_selecty-8; return(0); } //printf("SubMenu= %d\n", submenu); //debug return(1); } wait_ms(200); //debounce } return(0); } int Menu::scroll_check (Gamepad &pad) { return(pad.get_direction()); //checks for stick }