ELEC2645 (2019/20) / Mbed 2 deprecated el18loc_final

Dependencies:   mbed

Revision:
8:f305ea78b2b1
Child:
12:7a399a476cfd
diff -r 33cb5f2db1ee -r f305ea78b2b1 Menu/Menu.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Menu/Menu.cpp	Tue May 05 16:46:01 2020 +0000
@@ -0,0 +1,206 @@
+#include "mbed.h"
+#include "Menu.h"
+
+//objects
+Front front;
+
+//constructor/destructor
+Menu::Menu()
+{
+}
+Menu::~Menu()
+{
+}
+
+// PUBLIC methods---------------------------------------------------------------
+void Menu::mainmenu(N5110 &lcd, Gamepad &pad) //main menu
+{
+    menusize=3;
+    g_selecty=10;
+    submenu=1; //initialises starting point
+    printmainmenu(lcd); //prints menu to display
+    int menuflag=1; //sets flag
+    while (menuflag==1) {
+        s=scroll(lcd, pad);
+        if (s==1) {
+            printmainmenu(lcd);
+        }
+        if ( pad.A_pressed())  { //selects
+            // printf("A pressed\n");
+            printf("SubMenu %d selected\n", submenu);
+            wait_ms(200); //debounce
+            menuflag=0;
+        }
+    }
+    while (1) {
+        if (submenu==1) { //waveform submenu launch
+            subwaveforms(lcd, pad, submenu);
+            break;
+        }
+        if (submenu==2) { //instructions submenu launch
+            subinstructions(lcd,pad);
+            break;
+        }
+        if (submenu==3) { //credits subemnu launch
+            subcredits(lcd, pad);
+            break;
+        }
+    }
+}
+
+void Menu::subwaveforms(N5110 &lcd, Gamepad &pad, int submenu) //waveforms sub
+{
+    menusize=3;
+    g_selecty=10;
+    submenu=1; //initialises starting point
+    menuflag=1; //resets flag
+    printf("Waveforms menu \n");
+    lcd.clear(); //clear buffer
+    lcd.printString("Waveforms:",3,0);
+    printsubwaveforms(lcd);
+    while (menuflag==1) { //looped
+        s=scroll(lcd,pad);
+        if (s==1) {
+            printsubwaveforms(lcd);
+        }
+        if (pad.A_pressed())  { //go back menu
+            // printf("A pressed\n");
+            printf("Submenu: %d selected\n", submenu); //debug
+            wait_ms(200); //debounce
+            menuflag=0; //sets flag
+        }
+        if (pad.B_pressed())  { //go back menu
+            // printf("B pressed\n");
+            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);
+    }
+    if(submenu>=1) { //allows waveform selected
+        front.frontrun(lcd,pad,submenu);
+    }
+}
+
+
+void Menu::subinstructions(N5110 &lcd, Gamepad &pad) //instruction sub
+{
+    menuflag=1; //sets flag
+    printf("Instructions menu \n");
+    lcd.clear();
+    lcd.printString("Instructions:",3,0);
+    subunavailiable(lcd); //currently unused
+    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
+    while (menuflag==1) {
+        if (pad.B_pressed())  { //go back menu
+            // printf("B pressed\n");
+            printf("Main Menu selected\n");
+            submenu=0;
+            wait_ms(200); //debounce
+            menuflag=0; //sets flag
+        }
+    }
+    if(submenu==0) { //back to main
+        mainmenu(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("Credits",3,3);
+    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::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) //checks srolling
+{
+    int d=scroll_check(pad);
+    if(d != 0) {
+        if (d==5)  { //N scrolls up
+            //printf("N \n"); //debug
+            g_selecty=g_selecty+8; //line size=8
+            submenu++;
+            if (submenu > menusize) { //3 items in menu stops overflow
+                submenu = submenu-1;
+                g_selecty = g_selecty-8;
+            }
+            //printmainmenu(lcd); //reprints main
+            //prntf("SubMenu= %d\n", submenu); //debug
+        }
+        if (d==1)  { //S scrolls down
+            //printf("S \n");
+            g_selecty=g_selecty-8;
+            submenu=submenu-1;
+            if (submenu <=0) { //stops overflow
+                submenu = submenu+1;
+                g_selecty = g_selecty+8;
+            }
+            //printmainmenu(lcd); //reprints menu
+            //printf("SubMenu= %d\n", submenu); //debug
+        }
+        wait_ms(200); //debounce
+        return(1);
+    } else {
+        return(0);
+    }
+}
+int Menu::scroll_check (Gamepad &pad)
+{
+    return(pad.get_direction()); //checks for stick
+}
\ No newline at end of file