ELEC2645 (2019/20) / Mbed 2 deprecated el18loc_final

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Menu.cpp Source File

Menu.cpp

00001 #include "mbed.h"
00002 #include "Menu.h"
00003 
00004 //objects
00005 Front front;
00006 
00007 //constructor/destructor
00008 Menu::Menu()
00009 {
00010 }
00011 Menu::~Menu()
00012 {
00013 }
00014 
00015 // PUBLIC methods---------------------------------------------------------------
00016 void Menu::mainmenu(N5110 &lcd, Gamepad &pad) //main menu
00017 {
00018     g_selecty=10; //POSITION OF SELECT BOX
00019     submenu=menuflag=1; //Variables Init
00020     menusize=4;
00021     printmainmenu(lcd); //prints menu to display
00022     pad.reset_buttons();//elimnates Prev Button Press
00023     while (menuflag==1) {
00024         s=scroll(lcd, pad, submenu, menusize); //Performs Scroll
00025         if (s==1) {
00026             printmainmenu(lcd);
00027             submenu++; //Increase Menu Selected
00028             wait_ms(200);
00029         }   else if (s==-1) {
00030             printmainmenu(lcd);
00031             submenu--; //Decrease menu Selected
00032             wait_ms(200);
00033         }
00034         if ( pad.A_pressed())  { //selects
00035             //printf("SubMenu %d selected\n", submenu);
00036             wait_ms(200); //debounce
00037             menuflag=0;//exits
00038         }
00039     }
00040     switch (submenu) {
00041         case 1:
00042             subwaveforms(lcd,pad);
00043         case 2:
00044             subinstructions(lcd,pad);
00045         case 3:
00046             subsettings(lcd,pad);
00047         case 4:
00048             subcredits(lcd,pad);
00049     }
00050 }
00051 
00052 void Menu::subwaveforms(N5110 &lcd, Gamepad &pad) //waveforms sub
00053 {
00054     while (1) {
00055         g_selecty=10; //initialises Global var
00056         submenu=menuflag=1; //initialises Variables
00057         menusize=3;
00058         //printf("Waveforms menu \n"); //Debug
00059         printsubwaveforms(lcd); //Prints Screen
00060         pad.reset_buttons();
00061         while (menuflag==1) { //looped
00062             s=scroll(lcd,pad,submenu,menusize);
00063             if (s==1) {
00064                 printsubwaveforms(lcd); //Prints Waveform sub
00065                 submenu++; //increases selected sub
00066                 wait_ms(200); //debounce
00067             }  else if (s==-1) {
00068                 printsubwaveforms(lcd);
00069                 submenu--;
00070                 wait_ms(200);
00071             }
00072             if (pad.A_pressed())  { //Select
00073                 //printf("Submenu: %d selected\n", submenu); //debug
00074                 wait_ms(200); //debounce
00075                 menuflag=0; //sets flag
00076             }
00077             if (pad.B_pressed())  { //go back menu
00078                 //printf("Main Menu selected\n"); //debug
00079                 submenu=0;
00080                 wait_ms(200); //debounce
00081                 menuflag=0; //sets flag
00082             }
00083         }
00084         if(submenu==0) { //allows main selected
00085             mainmenu(lcd,pad);
00086             break;
00087         }
00088         if(submenu>=1) { //allows waveform selected
00089             front.frontrun(lcd,pad,submenu);
00090         }
00091         mainmenu(lcd,pad);
00092         break;
00093     }
00094 }
00095 
00096 void Menu::subinstructions(N5110 &lcd, Gamepad &pad) //instruction sub
00097 {
00098     menuflag=1; //sets flag
00099     //printf("Instructions menu \n");
00100     lcd.clear(); //LCD setup
00101     lcd.printString("Instructions:",2,0);
00102     lcd.printString("See attached",3,1);
00103     lcd.printString("User Manual",3,2);
00104     pad.reset_buttons();
00105     lcd.refresh();
00106     while (menuflag==1) {
00107         if (pad.B_pressed())  { //returns to main menu
00108             // printf("B pressed\n");
00109             //printf("Main Menu selected\n");
00110             submenu=0;
00111             wait_ms(200); //debounce
00112             menuflag=0; //sets flag
00113         }
00114     }
00115     if(submenu==0) { //allows main menu select
00116         mainmenu(lcd,pad);
00117     }
00118 }
00119 
00120 void Menu::subsettings(N5110 &lcd, Gamepad &pad)
00121 {
00122     g_selecty=10; //Global Var initial value
00123     submenu=menuflag=1; //initialises Variables
00124     menusize=4;
00125     //printf("Settings menu \n");
00126     printsubsettings(lcd); //prints to LCD
00127     pad.reset_buttons(); //Stops Buttons from prev menu
00128     while (menuflag==1) { //looped
00129         s=scroll(lcd,pad,submenu,menusize);
00130         if (s==1) {
00131             printsubsettings(lcd);
00132             submenu++;
00133             wait_ms(200);
00134         } else if (s==-1) {
00135             printsubsettings(lcd);
00136             submenu--;
00137             wait_ms(200);
00138         }
00139         if (pad.A_pressed())  { //select menu
00140             //printf("Submenu: %d selected\n", submenu); //debug
00141             wait_ms(200); //debounce
00142             menuflag=0; //sets flag
00143         }
00144         if (pad.B_pressed())  { //go back menu
00145             //printf("Main Menu selected\n"); //debug
00146             submenu=0;
00147             wait_ms(200); //debounce
00148             menuflag=0; //sets flag
00149         }
00150     }
00151     switch (submenu) { //submenu select
00152         case 0:  mainmenu(lcd,pad); //returns to main
00153         case 1:  volumerun(lcd,pad);
00154         case 2:  backlightrun(lcd,pad);
00155         case 3:  contrastrun(lcd,pad);
00156         case 4:  inverse_mode(lcd,pad);
00157     }
00158 }
00159 
00160 void Menu::subcredits(N5110 &lcd, Gamepad &pad) //credits sub menu
00161 {
00162     //printf("Credits \n");
00163     lcd.clear();
00164     lcd.printString("Credits",22,0); //prints credits to screen
00165     lcd.printString("Coded,Produced",0,1);
00166     lcd.printString("+ Built by",10,2);
00167     lcd.printString("Luke",30,3);
00168     lcd.printString("Cartwright",13,4);
00169     lcd.refresh(); //refresh buffer
00170     menuflag=1; //sets flag
00171     pad.reset_buttons();
00172     while (menuflag==1) {
00173         if (pad.B_pressed())  { //go back menu
00174             //printf("Main Menu selected\n");
00175             submenu=0;
00176             wait_ms(200); //debounce
00177             menuflag=0; //sets flag
00178         }
00179     }
00180     if(submenu==0) { //back to main
00181         mainmenu(lcd,pad);
00182     }
00183 }
00184 
00185 int Menu::scroll(N5110 &lcd, Gamepad &pad, int submenu, int menusize)   //checks srolling
00186 {
00187     int d=scroll_check(pad);
00188     if(d != 0) {
00189         if (d==1)  { //N scrolls up
00190             //printf("N \n"); //debug
00191             submenu--;
00192             g_selecty=g_selecty-8; //line size=8
00193             if (submenu<=0) { //stops overflow
00194                 submenu++;
00195                 g_selecty = g_selecty+8; //moves select box
00196                 return(0);
00197             }
00198             //printf("SubMenu= %d\n", submenu); //debug
00199             return(-1);
00200         }
00201         if (d==5)  { //S scrolls down
00202             //printf("S \n");
00203             submenu++;
00204             g_selecty=g_selecty+8; //movews select box
00205             if (submenu >menusize) { //stops overflow
00206                 submenu--;
00207                 g_selecty = g_selecty-8;
00208                 return(0);
00209             }
00210             //printf("SubMenu= %d\n", submenu); //debug
00211             return(1);
00212         }
00213         wait_ms(200); //debounce
00214     }
00215     return(0);
00216 }
00217 
00218 void Menu::volumerun(N5110 &lcd, Gamepad &pad)
00219 {
00220     //printf("Volume Settings \n");
00221     menuflag=1; //sets flag
00222     lcd.clear(); //Sets Up LCD
00223     lcd.printString("Volume:",3,0);
00224     lcd.printString("Use screw",3,1);
00225     lcd.printString("potentiometer",3,2);
00226     lcd.printString("on rear",3,3);
00227     lcd.refresh();
00228     pad.reset_buttons();
00229     while (menuflag==1) {
00230         if (pad.B_pressed())  {
00231             // printf("B pressed\n");
00232             printf("Main Menu selected\n");
00233             submenu=0;
00234             wait_ms(200); //debounce
00235             menuflag=0; //sets flag
00236         }
00237     }
00238     if(submenu==0) { //allows main menu select
00239         subsettings(lcd,pad);
00240     }
00241 }
00242 
00243 void Menu::backlightrun(N5110 &lcd, Gamepad &pad)
00244 {
00245     lcd.clear(); //sets up LCD
00246     lcd.printString("Backlight:",3,0);
00247     lcd.printString("Press A to",3,1);
00248     lcd.printString("toggle",3,2);
00249     lcd.refresh();
00250     menuflag=1;
00251     toggle=true;
00252     while (menuflag==1) {
00253         if (pad.A_pressed()) {
00254             if (toggle==true) {
00255                 lcd.backLightOn();
00256                 toggle=false;
00257             } else if (toggle==false) {
00258                 lcd.backLightOff();
00259                 toggle=true;
00260             }
00261             wait_ms(500);//debounce
00262         }
00263         if (pad.B_pressed()) {
00264             menuflag=0; //alows loop exit
00265         }
00266     }
00267     wait_ms(500);//debounce
00268     pad.reset_buttons();
00269     subsettings(lcd,pad); //launches setting menu
00270 }
00271 
00272 void Menu::contrastrun(N5110 &lcd, Gamepad &pad)
00273 {
00274     menuflag=1; //sets flag
00275     //printf("Contrast Settings \n");
00276     contrast=0.5; //initialises
00277     pad.reset_buttons();
00278     printcontrast(lcd,contrast);
00279     while (menuflag==1) { //looped
00280         s=scroll(lcd,pad,10,20);
00281         if (s!=s_1) {
00282             //printf("S= %d",s);
00283             if (s==1) {
00284                 contrast=contrast+0.05f;
00285                 lcd.setContrast(contrast);
00286                 //printf("CONTRAST UP\n");
00287             } else if (s==-1) {
00288                 contrast=contrast-0.05f;
00289                 lcd.setContrast(contrast);
00290                 //printf("CONTRAST DOWN\n");
00291             }
00292             printcontrast(lcd,contrast);
00293             wait_ms(200);
00294         }
00295         if (pad.B_pressed())  { //go back menu
00296             //printf("Settings Menu selected\n"); //debug
00297             lcd.clear();
00298             lcd.printString("Contrast Set",3,3);
00299             lcd.refresh();
00300             wait_ms(900); //debounce + display
00301             menuflag=0; //sets flag
00302         }
00303         s=s_1;
00304     }
00305     subsettings(lcd,pad);
00306 }
00307 
00308 void Menu::inverse_mode(N5110 &lcd, Gamepad &pad)
00309 {
00310     lcd.clear(); //Sets up LCD
00311     lcd.printString("Inverse Mode:",3,0);
00312     lcd.printString("Press A to",3,1);
00313     lcd.printString("toggle",3,2);
00314     lcd.refresh();
00315     menuflag=1;// initial value
00316     toggle=true;
00317     while (menuflag==1) {
00318         if (pad.A_pressed()) {
00319             if (toggle==true) {
00320                 lcd.normalMode();
00321                 toggle=false;
00322             } else if (toggle==false) {
00323                 lcd.inverseMode();
00324                 toggle=true;
00325             }
00326             wait_ms(500);//debounce
00327         }
00328         if (pad.B_pressed()) {
00329             menuflag=0;//allows loop exit
00330         }
00331     }
00332     wait_ms(500);//debounce
00333     pad.reset_buttons();
00334     subsettings(lcd,pad);//launches setting submenu
00335 }
00336 
00337 //Private Methods--------------------------------------------------------------
00338 void Menu::printmainmenu(N5110 &lcd)   //prints main menu
00339 {
00340     //printf("Printing Main Menu \n");
00341     lcd.clear(); //clears current buffer
00342     lcd.drawRect(78,g_selecty,5,5,FILL_BLACK); //prints select box at y value
00343     lcd.printString("MAIN MENU",3,0); //title print
00344     //SUBMENU TITLES
00345     lcd.printString("Waveforms",3,1);
00346     lcd.printString("Instructions",3,2);
00347     lcd.printString("Settings",3,3);
00348     lcd.printString("Credits",3,4);
00349     lcd.refresh(); //updates display
00350 }
00351 
00352 void Menu::printsubwaveforms(N5110 &lcd)   //prints subwaveforms menu
00353 {
00354     //printf("Printing Waveforms menu\n");
00355     lcd.clear(); //clears current buffer
00356     lcd.drawRect(78,g_selecty,5,5,FILL_BLACK); //prints select box at y value
00357     lcd.printString("WAVEFORMS:",3,0); //title print
00358     //SUBMENU TITLES
00359     lcd.printString("Sine",3,1);
00360     lcd.printString("Triangle",3,2);
00361     lcd.printString("Square",3,3);
00362     lcd.refresh(); //updates display
00363 }
00364 
00365 void Menu::printsubsettings(N5110 &lcd)   //prints settings menu
00366 {
00367     //printf("Printing Settings menu\n");
00368     lcd.clear();
00369     lcd.drawRect(78,g_selecty,5,5,FILL_BLACK); //prints select box at y value
00370     lcd.printString("Settings:",3,0); //title print
00371     //SUBMENU TITLES
00372     lcd.printString("Volume",3,1);
00373     lcd.printString("Backlight",3,2);
00374     lcd.printString("Contrast",3,3);
00375     lcd.printString("Inverse Mode",3,4);
00376     lcd.refresh(); //updates display
00377 }
00378 
00379 void Menu::printcontrast(N5110 &lcd, float contrast)   //prints contrast edit screen
00380 {
00381     lcd.clear();
00382     lcd.printString("Contrast:",3,0);//title print
00383     lcd.printString("VISIBILITY",12,3);
00384     lcd.refresh();
00385 }
00386 
00387 int Menu::scroll_check (Gamepad &pad)
00388 {
00389     return(pad.get_direction()); //checks for stick
00390 }