Year Two Project ELEC 2645: Embedded Systems Project Portable Weather Station
Dependencies: BMP180 ConfigFile N5110 PowerControl beep mbed
CurrentTemperatureScreen.h
- Committer:
- OHstin
- Date:
- 2015-05-11
- Revision:
- 0:da2b8c7a1ec1
File content as of revision 0:da2b8c7a1ec1:
/** @file CurrentTemperatureScreen.h */ #ifndef CURRENTTEMPERATURESCREEN_H #define CURRENTTEMPERATURESCREEN_H #include "ParameterController.h" #include "Inputs.h" #include "Sensors.h" /** @brief Displays the current temperature along with it's sentiment on the LCD screen\n @brief It consists of a parameter controller\n @brief temperature is shown in deg cel by default but can be toggled to deg fahr\n @brief whent the enter button is pressed\n @author Augustine Kizito K\n @date April 2015 */ class CurrentTemperatureScreen : public ParameterController // inherit ParameterController Properties { private: void setTemperatureSentiment( float temperature); // get temperature sentiment void temperatureUpdate(); // update the temperature float getCurrentTemperature(); // get the current temperature void changeUnits(); // change units form celsius to fahrenheit 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 bool celsius; // tracks the current units of temperature Ticker tempTicker; // create ticker object public: /** This function manages the execution of the temperature screen @ returns -1 - navigate to previous screen */ int start(); /** This function creates an instance of the current temperature scren */ CurrentTemperatureScreen() :ParameterController( "Temperature", // Parameter "Deg Cel") // Units {} // initialises parameter controller }; int CurrentTemperatureScreen::start() { changeScreen = false; celsius = true; // units are in celsius float currentTemperature = getCurrentTemperature(); // get current temperature backButton.mode(PullDown); // activate pullDown resistor enterButton.mode(PullDown); // activate pullDown resistor backButton.rise(this,&CurrentTemperatureScreen::onBack); // call onBack when the back button is pressed enterButton.rise(this,&CurrentTemperatureScreen::onEnter); // call onBack when the back button is pressed debounce.start(); // start the debouncing timer tempTicker.attach(this, &CurrentTemperatureScreen::temperatureUpdate, 10); // update parameter every 30 seconds // initialise the ParameterController appropriately ParameterController::setValue(currentTemperature); setTemperatureSentiment(currentTemperature); // 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); enterButton.rise(NULL); tempTicker.detach(); return nextScreen; } void CurrentTemperatureScreen::temperatureUpdate() { float currentTemperature = getCurrentTemperature(); // get current temperature setTemperatureSentiment(currentTemperature); // update the temperature sentiment if (!celsius) { // units are in celsius //convert to fahrenheit currentTemperature = (currentTemperature*9/5)+32; } // initialise the ParameterController appropriately ParameterController::setValue(currentTemperature); ParameterController::updateInfo(); } void CurrentTemperatureScreen::setTemperatureSentiment(float temperature) { if (temperature > 35) { // Blazing if temperature is greature than 35 Deg ParameterController::setSentiment("Blazing "); } else if ( temperature <= 35 && temperature > 25 ) { ParameterController::setSentiment("Hot "); // Hot if temperature is between 35 and 25 Deg Cel } else if ( temperature <= 25 && temperature > 20 ) { ParameterController::setSentiment("Warm "); // Warm if temperature is between 25 and 20 Deg Cel } else if ( temperature <= 20 && temperature > 15 ) { ParameterController::setSentiment("Cool "); // Cool if temperature is between 20 and 15 Deg Cel } else if ( temperature <= 15 && temperature >= 10 ) { ParameterController::setSentiment("Cold "); // Cold if temperature is between 15 and 10 Deg Cel } else { ParameterController::setSentiment("Frigid "); // Frigid if temperature is less than 10 } } float CurrentTemperatureScreen::getCurrentTemperature() { float temperature = getTemperature(); // read temperature from BMP180 sensor return temperature; } void CurrentTemperatureScreen::onBack() { if (debounceSuccess()) { // debugging successful playSound(); // play sound from buzzer nextScreen = -1; changeScreen = true; // user wants to view a different screen debounce.reset(); // reset the timer } } void CurrentTemperatureScreen::onEnter() { if (debounceSuccess()) { // debugging successful playSound(); // sound the buzzer changeUnits(); // change the units debounce.reset(); // reset the timer } } void CurrentTemperatureScreen::changeUnits() { // toggle the units form Cel to Fahr and back celsius = !celsius; float currentTemperature = getCurrentTemperature(); // get current temperature setTemperatureSentiment(currentTemperature); if (celsius) { // Units are in celsius ParameterController::setUnit("Deg Cel "); } else { // Units are in Fahrenheit ParameterController::setUnit("Deg Fahr"); //convert to fahrenheit currentTemperature = (currentTemperature*9/5)+32; } // update the ParameterController appropriately ParameterController::setValue(currentTemperature); ParameterController::updateInfo(); } #endif