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

Dependencies:   BMP180 ConfigFile N5110 PowerControl beep mbed

LogScreen.h

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

File content as of revision 0:da2b8c7a1ec1:

/**
@file LogScreen.h


*/

#ifndef LOGSCREEN_H
#define LOGSCREEN_H

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

/**
@brief Displays the options related to persistent data on the LCD screen \n
@brief It is a list with two selectable options :\n
@brief new log and view log\n
@brief new log option allows the user to log temperature or pressure or a preset amount of time\n
@brief and store the recorded data on the mbed flash drive\n
@brief view log option allows the user to view data that has been previously logged, either temperature or pressure.\n
@brief user will be able to know, the date, time and duration of the log. the user will view a summary of the logged data\n
@brief i.e maximum, minimum and average values of the recorded data. A plot agains time of the data will also be available
@author Augustine Kizito K
@date April 2015
*/



class LogScreen : public ListController // inherit the list Controller properties
{
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
    void onBack(); // user pressed the back button

public:
    /**
    Creates an instance of the Log Screen
    
    */
    LogScreen()
        :ListController( "Log", // Title
                         "New Log", // Option 1
                         "View Log", // Option 2
                         "", // Option 3
                         "", // Option 4
                         2) // Number of Options
    {};
    /**
    Manages the execution of the Log Screen
    
    @returns
    
    -1 - Navigate to previous screen\n
    0  - User selected option 1\n
    1  - User selected option 2
    
    */
    int start(); // Manages the execution of the Temperature Screen


};

int LogScreen::start()
{

    // Activate PullDown Resistors
    enterButton.mode(PullDown);
    upButton.mode(PullDown);
    downButton.mode(PullDown);
    backButton.mode(PullDown);

    upButton.rise(this,&LogScreen::onScrollUp); // call onScrollUp when the up button is pressed
    downButton.rise(this,&LogScreen::onScrollDown); // call onScrollDown when the down button is pressed
    enterButton.rise(this,&LogScreen::onEnter); // call onEnter when the enter button is pressed
    backButton.rise(this,&LogScreen::onBack); // call onBack when the back button is pressed
    
    // Launch the List Controller
    ListController::showInfo();
    changeScreen = false;

    debounce.start(); // start the debounce 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 LogScreen::onScrollUp()
{
    if (debounceSuccess()) {  // check if debouncing succeeded

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

void LogScreen::onScrollDown()
{
    if (debounceSuccess()) { // check if debouncing succeeded

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

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

void LogScreen::onBack()
{
    if(debounceSuccess()) { // debugging was successful
      // sound the buzzer
      playSound();
      nextScreen = -1; // go to previous screen
      changeScreen = true; // user wants to go to a different screen
      debounce.reset(); // reset the debounce timer
    }

}

#endif