ELEC2645 (2019/20) / Mbed 2 deprecated el18loc_final

Dependencies:   mbed

Menu/Menu.cpp

Committer:
lukeocarwright
Date:
2020-05-08
Revision:
12:7a399a476cfd
Parent:
8:f305ea78b2b1
Child:
13:27300c533dd1

File content as of revision 12:7a399a476cfd:

#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);
            submenu++;
        }
        if (s==-1) {
            printsubwaveforms(lcd);
            submenu--;
            }
        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
            return(-1);
        }
        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
            return(1);
        }
        wait_ms(200); //debounce

    } else {
        return(0);
    }
}
int Menu::scroll_check (Gamepad &pad)
{
    return(pad.get_direction()); //checks for stick
}