Year Two Project ELEC 2645: Embedded Systems Project Portable Weather Station

Dependencies:   BMP180 ConfigFile N5110 PowerControl beep mbed

MainMenuScreen.h

Committer:
OHstin
Date:
2015-05-11
Revision:
0:da2b8c7a1ec1

File content as of revision 0:da2b8c7a1ec1:

/**
@file MainMenuScreen.h

*/
#ifndef MAINMENUSCREEN_H
#define MAINMENUSCREEN_H

#include "ListController.h"
#include "Inputs.h"

/**
@brief Displays the main menu on the LCD screen\n 
@brief It is a list with four selectable options :\n
@brief temperature, pressue , log and settings
@author Augustine Kizito K
@date April 2015
*/



class MainMenuScreen : public ListController
{
private:
    bool changeScreen; // tracks if the user pressed a button that changes the screen
    int nextScreen; // tracks whether the user wants to go to
    //the previous screen or next screen

    void onScrollUp(); // user pressed the scroll up button
    void onScrollDown(); // user pressed the scroll down button
    void onEnter(); // user pressed the enter button

public:
    /**
    Creates an instance of the main menu screen
    
    */
    MainMenuScreen()
        :ListController( "MainMenu", // Title
                         "Temperature", // Option 1
                         "Pressure", // Option 2
                         "Log", // Option 3
                         "Settings", // Option 4
                         4) // Number of Options
    {};
    /*
    Manages the execution of the main menu screen
    
    @returns
    0  - User selected option 1\n
    1  - User selected option 2\n
    2  - User selected option 3\n
    3  - User selected option 4\n
    
    */
    int start(); 


};
int MainMenuScreen::start()
{


    enterButton.mode(PullDown); // activate pull down resistor
    upButton.mode(PullDown); // activate pull down resistor
    downButton.mode(PullDown); // acivate pull down resistor

    upButton.rise(this,&MainMenuScreen::onScrollUp); // call onScrollUp when the up button is pressed
    downButton.rise(this,&MainMenuScreen::onScrollDown); // call onScrollDown when the down button is pressed
    enterButton.rise(this,&MainMenuScreen::onEnter); // call onEnter when the enter button is pressed

    // Launch the List Controller
    ListController::showInfo();
    changeScreen = false;

    debounce.start(); // start the debouncing timer

    while(!changeScreen) {

        // mbed goes to sleep to save power
        Sleep();
    }

    // detach all interrupts
    upButton.rise(NULL);
    downButton.rise(NULL);
    enterButton.rise(NULL);
    backButton.rise(NULL);

    return nextScreen;
}

void MainMenuScreen::onScrollUp()
{
    if (debounceSuccess()) { // debouncing successful

        ListController::scrollUp(); // scroll up
        debounce.reset(); // reset the debounce timer
    }
}

void MainMenuScreen::onScrollDown()
{
    if (debounceSuccess()) { // debouncing successful

        ListController::scrollDown(); // scroll down
        debounce.reset(); // reset the debounce timer
    }
}

void MainMenuScreen::onEnter()
{
    if (debounceSuccess()){ // debouncing successful
    // sound the buzzer
    playSound();
    nextScreen = ListController::getCurrentOption(); //  get the option that user selected
    changeScreen = true; // user wants to go to a different screen
    // reset the debounce timer
    debounce.reset();
    }
}

#endif