Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BMP180 ConfigFile N5110 PowerControl beep mbed
SettingController.h
- Committer:
- OHstin
- Date:
- 2015-05-11
- Revision:
- 0:da2b8c7a1ec1
File content as of revision 0:da2b8c7a1ec1:
/**
@file SettingController.h
*/
#ifndef SETTINGCONTROLLER_H
#define SETTINGCONTROLLER_H
#include "Outputs.h"
/**
@brief Has the same features as the List Controller.\n
@brief Displays the current state of a given setting on the screen\n
@author Augustine Kizito K\n
@date April 2015
*/
class SettingController
{
private:
int currentSetting; // the previously set setting
char title[32]; // title of the setting
char option1[32]; // the 1st option
char option2[32]; // the 2nd option
char option3[32]; // the 3rd option
char option4[32]; // the 4th option
int currentOption; // the current cell position
int numberOfOptions; // the number of available of options
void setSetting(int option); // make this option a new setting
void invertPixels(int option); // highlights pixels in a bank
void removeSetting(int option); // remove this option as a setting
protected:
/**
Creates a Setting Controller instance
@param t - string title of list
@param op1 - option 1 on the list
@param op2 - option 2 on the list
@param op3 - option 3 on the list
@param op4 - option 4 on the list
@param nOO 0 - available number of options
*/
SettingController( char t[], char opt1[],char opt2[], char opt3[], char opt4[],int nOO);
/**
Populates the LCD screen with the a list of browse-able and selectable options
*/
void showInfo();
/**
Scrolls to the next option
*/
void scrollDown();
/**
Scrolls to the previous option
*/
void scrollUp();
/**
Gets the current/highlighted option and returns is to the calling function
@returns the currentt option 0 - 3
*/
int getCurrentOption();
/**
Updates the LCD screen with new data
*/
void updateData();
/**
Makes an option the current setting
@param cS - integer location of the setting to be made the current setting
*/
void setCurrentSetting(int cS);
/**
Gets the location of the current setting and returns it
@returns - interger location of current setting 0 - 3
*/
int getCurrentSetting();
/**
Changes the current setting to the new setting
*/
void changeSetting();
};
SettingController::SettingController( char t[], char op1[], char op2[], char op3[], char op4[], int nOO )
{
// initilaisations
strcpy(title,t);
strcpy(option1,op1);
strcpy(option2,op2);
strcpy(option3,op3);
strcpy(option4,op4);
numberOfOptions = nOO;
currentOption = 0;
}
void SettingController::showInfo()
{
lcd.printString(title,0,1); // print title
lcd.printString(option1,0,2); // print option1
lcd.printString(option2,0,3); // print option2
lcd.printString(option3,0,4); // print option3
lcd.printString(option4,0,5); // print option4
setSetting(currentSetting);
invertPixels(currentOption); // highlight the current option
}
void SettingController::scrollUp()
{
playSound(); // sound the buzzer
invertPixels(currentOption); // UN invert/highlight current option
currentOption--; // current position is less by 1
if (currentOption < 0) { // prevents from inverting a non existent option
currentOption = 0;
invertPixels(currentOption); // invert all pixels in current bank
} else {
invertPixels(currentOption); // invert all pixels in current bank
}
}
void SettingController::scrollDown()
{
playSound(); // sound the buzzer
invertPixels(currentOption); // UN-invert/highlight the current option
currentOption++; // current option is more by 1
if (currentOption > numberOfOptions-1) { // prevents from inverting a non existant option
currentOption = numberOfOptions-1;
invertPixels(currentOption); // invert all pixels in current option
} else {
invertPixels(currentOption); // invert all pixels in current option
}
}
int SettingController::getCurrentOption()
{
return currentOption;
}
int SettingController::getCurrentSetting()
{
return currentSetting;
}
void SettingController::setCurrentSetting( int cs)
{
currentSetting = cs;
}
void SettingController::invertPixels(int option)
{
int onset; // x coordinate where inversion starts
// first bank consists of status bar showing time and battery icon
// second bank consists of the title
if (option == 0) { // invert third bank
onset = 15;
} else if ( option == 1) { // invert fourth bank
onset = 23;
} else if ( option == 2) { // invert fifth bank
onset = 31;
} else {
onset = 39; // invert sixth bank
}
int termination = onset + 9; // bank's length height is 9 pixels
for ( int m = onset; m < termination; m++) {
for ( int n = 0; n < 84; n++) {
if((lcd.getPixel(n,m)) == 0) { // if the pixel is clear
lcd.setPixel(n,m); // set the pixel
} else {
lcd.clearPixel(n,m); // else clear the pixel
}
}
}
lcd.refresh(); // refresh the lcd screen
}
void SettingController::changeSetting()
{
//saveSetting();
//first un-invert the current option
invertPixels(currentOption);
//then remove the setting from option it was
removeSetting(currentSetting);
// make the new option as the new setting
setSetting(currentOption);
//update the current setting
currentSetting = currentOption;
// ivert the current option
invertPixels(currentOption);
}
void SettingController::removeSetting(int option)
{
// remove the setting marker from the option by removing the letter o
if ( option == 0 ) {
lcd.printString(" ",78,2); //option1
} else if ( option == 1 ) {
lcd.printString(" ",78,3); //option2
} else if ( option == 2 ) {
lcd.printString(" ",78,4); //option3
} else {
lcd.printString(" ",78,5); //option4
}
}
void SettingController::setSetting(int option)
{
// make the current position as the new setting by adding letter 0
// at the end of the option
if ( option == 0 ) {
lcd.printString("o",78,2); //option1
} else if ( option == 1 ) {
lcd.printString("o",78,3); //option2
} else if ( option == 2 ) {
lcd.printString("o",78,4); //option3
} else {
lcd.printString("o",78,5); //option4
}
lcd.refresh();
}
#endif