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

Dependencies:   BMP180 ConfigFile N5110 PowerControl beep mbed

BatteryStatusScreen.h

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

File content as of revision 0:da2b8c7a1ec1:

/**
@file BaterryStatusScreen.h


*/

#ifndef BATTERYSTATUSSCREEN_H
#define BATTERYSTATUSSCREEN_H

#include "ParameterController.h"
#include "Inputs.h"
#include "Sensors.h"

/**

@brief Displays the current battery voltage along with it's sentiment on the LCD screen \n
@brief It consists of a parameter controller\n 
@brief battery voltage is shown in Volts\n
@author Augustine Kizito K\n
@date April 2015

*/



class BatteryStatusScreen : public ParameterController // inherit ParameterController Properties
{
    
public:
    /**
    This functions manages the execution of the battery status screen
    @returns 
     -1 - Navigate to  previous screen
    */
    int start();
    /**
    Creates an instance of the battery status screen
    
    */
    BatteryStatusScreen()
        :ParameterController( "Voltage", // Parameter
                              "Volts") // Units
    {} // initialises parameter controller
    
private:

    void setVoltageSentiment( float temperature); // get temperature sentiment
    void voltageUpdate();  // update the voltage
    float getCurrentVoltage(); // get the current voltage
    void onBack(); // user pressed the back button
    void onEnter(); // user pressed the enter button

    bool changeScreen; // tracks if the user pressed a button that changes screen
    int nextScreen; // tracks whether the user wants to go to
    //the previous screen or next screen
    Ticker voltTicker; // create ticker object


};

int BatteryStatusScreen::start()
{

    changeScreen = false;

    float currentVoltage = getCurrentVoltage(); // get current temperature

    backButton.mode(PullDown); // activate pullDown resistor
    enterButton.mode(PullDown); // activate pullDown resistor

    backButton.rise(this,&BatteryStatusScreen::onBack); // call onBack when the back button is pressed

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

    voltTicker.attach(this, &BatteryStatusScreen::voltageUpdate, 10); // update parameter every 10 seconds

    // initialise the ParameterController appropriately
    ParameterController::setValue(currentVoltage);
    setVoltageSentiment(currentVoltage);
    
    // Launch the Parameter Controller
    ParameterController::showInfo();

    while(changeScreen == false) { // shows the screen until the user presses the back button
        // mbed goes to sleep to save power
        Sleep();
    }

    // detach interrupts
    backButton.rise(NULL);
    voltTicker.detach();

    return nextScreen;
}

void BatteryStatusScreen::voltageUpdate()
{

    float currentVoltage = getCurrentVoltage(); // get current voltage
    // update the voltage sentiment
    setVoltageSentiment(currentVoltage);

    // initialise the ParameterController appropriately
    ParameterController::setValue(currentVoltage);
    ParameterController::updateInfo();

}


void BatteryStatusScreen::setVoltageSentiment(float batteryVoltage)
{
    if (batteryVoltage > 7.92) { // battery voltage is greater than 2.6V
        // battery has three bars
        ParameterController::setSentiment("Battery Full  ");

    } else if ( (batteryVoltage < 7.92 )&& (batteryVoltage > 6.5)) { // battery voltage is between 2.64V and 1.65V
        // battery has two bars
        ParameterController::setSentiment("Sufficient    ");

    } else if ((batteryVoltage < 6.5) && (batteryVoltage > 6)) { // battery voltage is between 1.65V and 0.66V
        // battery has one bar
        ParameterController::setSentiment("Battery Low   ");
    } else { // battery voltage is less than 0.66V
        // empty battery
        ParameterController::setSentiment("Change Battery");
    }

}

float BatteryStatusScreen::getCurrentVoltage()
{
    float voltage = getVoltage(); // read voltage
    return voltage;
}

void BatteryStatusScreen::onBack()
{
    if (debounceSuccess()) {
        playSound(); // play sound from buzzer
        nextScreen = -1;
        changeScreen = true; // user wants to view a different screen
        debounce.reset(); // reset the timer
    }


}





#endif