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

Dependencies:   BMP180 ConfigFile N5110 PowerControl beep mbed

Committer:
OHstin
Date:
Mon May 11 15:25:52 2015 +0000
Revision:
0:da2b8c7a1ec1
Completed Weather Station

Who changed what in which revision?

UserRevisionLine numberNew contents of line
OHstin 0:da2b8c7a1ec1 1 /**
OHstin 0:da2b8c7a1ec1 2 @file SettingController.h
OHstin 0:da2b8c7a1ec1 3
OHstin 0:da2b8c7a1ec1 4 */
OHstin 0:da2b8c7a1ec1 5
OHstin 0:da2b8c7a1ec1 6 #ifndef SETTINGCONTROLLER_H
OHstin 0:da2b8c7a1ec1 7 #define SETTINGCONTROLLER_H
OHstin 0:da2b8c7a1ec1 8
OHstin 0:da2b8c7a1ec1 9 #include "Outputs.h"
OHstin 0:da2b8c7a1ec1 10
OHstin 0:da2b8c7a1ec1 11 /**
OHstin 0:da2b8c7a1ec1 12 @brief Has the same features as the List Controller.\n
OHstin 0:da2b8c7a1ec1 13 @brief Displays the current state of a given setting on the screen\n
OHstin 0:da2b8c7a1ec1 14 @author Augustine Kizito K\n
OHstin 0:da2b8c7a1ec1 15 @date April 2015
OHstin 0:da2b8c7a1ec1 16 */
OHstin 0:da2b8c7a1ec1 17
OHstin 0:da2b8c7a1ec1 18 class SettingController
OHstin 0:da2b8c7a1ec1 19 {
OHstin 0:da2b8c7a1ec1 20 private:
OHstin 0:da2b8c7a1ec1 21 int currentSetting; // the previously set setting
OHstin 0:da2b8c7a1ec1 22 char title[32]; // title of the setting
OHstin 0:da2b8c7a1ec1 23 char option1[32]; // the 1st option
OHstin 0:da2b8c7a1ec1 24 char option2[32]; // the 2nd option
OHstin 0:da2b8c7a1ec1 25 char option3[32]; // the 3rd option
OHstin 0:da2b8c7a1ec1 26 char option4[32]; // the 4th option
OHstin 0:da2b8c7a1ec1 27 int currentOption; // the current cell position
OHstin 0:da2b8c7a1ec1 28 int numberOfOptions; // the number of available of options
OHstin 0:da2b8c7a1ec1 29 void setSetting(int option); // make this option a new setting
OHstin 0:da2b8c7a1ec1 30 void invertPixels(int option); // highlights pixels in a bank
OHstin 0:da2b8c7a1ec1 31 void removeSetting(int option); // remove this option as a setting
OHstin 0:da2b8c7a1ec1 32
OHstin 0:da2b8c7a1ec1 33
OHstin 0:da2b8c7a1ec1 34 protected:
OHstin 0:da2b8c7a1ec1 35 /**
OHstin 0:da2b8c7a1ec1 36 Creates a Setting Controller instance
OHstin 0:da2b8c7a1ec1 37
OHstin 0:da2b8c7a1ec1 38 @param t - string title of list
OHstin 0:da2b8c7a1ec1 39 @param op1 - option 1 on the list
OHstin 0:da2b8c7a1ec1 40 @param op2 - option 2 on the list
OHstin 0:da2b8c7a1ec1 41 @param op3 - option 3 on the list
OHstin 0:da2b8c7a1ec1 42 @param op4 - option 4 on the list
OHstin 0:da2b8c7a1ec1 43 @param nOO 0 - available number of options
OHstin 0:da2b8c7a1ec1 44
OHstin 0:da2b8c7a1ec1 45 */
OHstin 0:da2b8c7a1ec1 46 SettingController( char t[], char opt1[],char opt2[], char opt3[], char opt4[],int nOO);
OHstin 0:da2b8c7a1ec1 47
OHstin 0:da2b8c7a1ec1 48 /**
OHstin 0:da2b8c7a1ec1 49 Populates the LCD screen with the a list of browse-able and selectable options
OHstin 0:da2b8c7a1ec1 50
OHstin 0:da2b8c7a1ec1 51 */
OHstin 0:da2b8c7a1ec1 52 void showInfo();
OHstin 0:da2b8c7a1ec1 53
OHstin 0:da2b8c7a1ec1 54 /**
OHstin 0:da2b8c7a1ec1 55 Scrolls to the next option
OHstin 0:da2b8c7a1ec1 56
OHstin 0:da2b8c7a1ec1 57 */
OHstin 0:da2b8c7a1ec1 58 void scrollDown();
OHstin 0:da2b8c7a1ec1 59
OHstin 0:da2b8c7a1ec1 60 /**
OHstin 0:da2b8c7a1ec1 61 Scrolls to the previous option
OHstin 0:da2b8c7a1ec1 62
OHstin 0:da2b8c7a1ec1 63 */
OHstin 0:da2b8c7a1ec1 64
OHstin 0:da2b8c7a1ec1 65 void scrollUp();
OHstin 0:da2b8c7a1ec1 66
OHstin 0:da2b8c7a1ec1 67 /**
OHstin 0:da2b8c7a1ec1 68 Gets the current/highlighted option and returns is to the calling function
OHstin 0:da2b8c7a1ec1 69
OHstin 0:da2b8c7a1ec1 70 @returns the currentt option 0 - 3
OHstin 0:da2b8c7a1ec1 71 */
OHstin 0:da2b8c7a1ec1 72
OHstin 0:da2b8c7a1ec1 73 int getCurrentOption();
OHstin 0:da2b8c7a1ec1 74
OHstin 0:da2b8c7a1ec1 75 /**
OHstin 0:da2b8c7a1ec1 76 Updates the LCD screen with new data
OHstin 0:da2b8c7a1ec1 77
OHstin 0:da2b8c7a1ec1 78 */
OHstin 0:da2b8c7a1ec1 79 void updateData();
OHstin 0:da2b8c7a1ec1 80
OHstin 0:da2b8c7a1ec1 81 /**
OHstin 0:da2b8c7a1ec1 82 Makes an option the current setting
OHstin 0:da2b8c7a1ec1 83
OHstin 0:da2b8c7a1ec1 84 @param cS - integer location of the setting to be made the current setting
OHstin 0:da2b8c7a1ec1 85
OHstin 0:da2b8c7a1ec1 86 */
OHstin 0:da2b8c7a1ec1 87 void setCurrentSetting(int cS);
OHstin 0:da2b8c7a1ec1 88
OHstin 0:da2b8c7a1ec1 89 /**
OHstin 0:da2b8c7a1ec1 90 Gets the location of the current setting and returns it
OHstin 0:da2b8c7a1ec1 91
OHstin 0:da2b8c7a1ec1 92 @returns - interger location of current setting 0 - 3
OHstin 0:da2b8c7a1ec1 93
OHstin 0:da2b8c7a1ec1 94 */
OHstin 0:da2b8c7a1ec1 95
OHstin 0:da2b8c7a1ec1 96 int getCurrentSetting();
OHstin 0:da2b8c7a1ec1 97
OHstin 0:da2b8c7a1ec1 98 /**
OHstin 0:da2b8c7a1ec1 99 Changes the current setting to the new setting
OHstin 0:da2b8c7a1ec1 100
OHstin 0:da2b8c7a1ec1 101 */
OHstin 0:da2b8c7a1ec1 102 void changeSetting();
OHstin 0:da2b8c7a1ec1 103
OHstin 0:da2b8c7a1ec1 104
OHstin 0:da2b8c7a1ec1 105 };
OHstin 0:da2b8c7a1ec1 106
OHstin 0:da2b8c7a1ec1 107
OHstin 0:da2b8c7a1ec1 108
OHstin 0:da2b8c7a1ec1 109
OHstin 0:da2b8c7a1ec1 110
OHstin 0:da2b8c7a1ec1 111
OHstin 0:da2b8c7a1ec1 112
OHstin 0:da2b8c7a1ec1 113
OHstin 0:da2b8c7a1ec1 114
OHstin 0:da2b8c7a1ec1 115
OHstin 0:da2b8c7a1ec1 116
OHstin 0:da2b8c7a1ec1 117
OHstin 0:da2b8c7a1ec1 118
OHstin 0:da2b8c7a1ec1 119
OHstin 0:da2b8c7a1ec1 120
OHstin 0:da2b8c7a1ec1 121
OHstin 0:da2b8c7a1ec1 122
OHstin 0:da2b8c7a1ec1 123
OHstin 0:da2b8c7a1ec1 124
OHstin 0:da2b8c7a1ec1 125
OHstin 0:da2b8c7a1ec1 126
OHstin 0:da2b8c7a1ec1 127 SettingController::SettingController( char t[], char op1[], char op2[], char op3[], char op4[], int nOO )
OHstin 0:da2b8c7a1ec1 128 {
OHstin 0:da2b8c7a1ec1 129 // initilaisations
OHstin 0:da2b8c7a1ec1 130 strcpy(title,t);
OHstin 0:da2b8c7a1ec1 131 strcpy(option1,op1);
OHstin 0:da2b8c7a1ec1 132 strcpy(option2,op2);
OHstin 0:da2b8c7a1ec1 133 strcpy(option3,op3);
OHstin 0:da2b8c7a1ec1 134 strcpy(option4,op4);
OHstin 0:da2b8c7a1ec1 135 numberOfOptions = nOO;
OHstin 0:da2b8c7a1ec1 136 currentOption = 0;
OHstin 0:da2b8c7a1ec1 137
OHstin 0:da2b8c7a1ec1 138 }
OHstin 0:da2b8c7a1ec1 139
OHstin 0:da2b8c7a1ec1 140 void SettingController::showInfo()
OHstin 0:da2b8c7a1ec1 141 {
OHstin 0:da2b8c7a1ec1 142 lcd.printString(title,0,1); // print title
OHstin 0:da2b8c7a1ec1 143 lcd.printString(option1,0,2); // print option1
OHstin 0:da2b8c7a1ec1 144 lcd.printString(option2,0,3); // print option2
OHstin 0:da2b8c7a1ec1 145 lcd.printString(option3,0,4); // print option3
OHstin 0:da2b8c7a1ec1 146 lcd.printString(option4,0,5); // print option4
OHstin 0:da2b8c7a1ec1 147
OHstin 0:da2b8c7a1ec1 148
OHstin 0:da2b8c7a1ec1 149 setSetting(currentSetting);
OHstin 0:da2b8c7a1ec1 150 invertPixels(currentOption); // highlight the current option
OHstin 0:da2b8c7a1ec1 151
OHstin 0:da2b8c7a1ec1 152
OHstin 0:da2b8c7a1ec1 153 }
OHstin 0:da2b8c7a1ec1 154
OHstin 0:da2b8c7a1ec1 155 void SettingController::scrollUp()
OHstin 0:da2b8c7a1ec1 156 {
OHstin 0:da2b8c7a1ec1 157 playSound(); // sound the buzzer
OHstin 0:da2b8c7a1ec1 158 invertPixels(currentOption); // UN invert/highlight current option
OHstin 0:da2b8c7a1ec1 159 currentOption--; // current position is less by 1
OHstin 0:da2b8c7a1ec1 160
OHstin 0:da2b8c7a1ec1 161 if (currentOption < 0) { // prevents from inverting a non existent option
OHstin 0:da2b8c7a1ec1 162
OHstin 0:da2b8c7a1ec1 163 currentOption = 0;
OHstin 0:da2b8c7a1ec1 164 invertPixels(currentOption); // invert all pixels in current bank
OHstin 0:da2b8c7a1ec1 165
OHstin 0:da2b8c7a1ec1 166 } else {
OHstin 0:da2b8c7a1ec1 167 invertPixels(currentOption); // invert all pixels in current bank
OHstin 0:da2b8c7a1ec1 168 }
OHstin 0:da2b8c7a1ec1 169 }
OHstin 0:da2b8c7a1ec1 170
OHstin 0:da2b8c7a1ec1 171 void SettingController::scrollDown()
OHstin 0:da2b8c7a1ec1 172 {
OHstin 0:da2b8c7a1ec1 173 playSound(); // sound the buzzer
OHstin 0:da2b8c7a1ec1 174 invertPixels(currentOption); // UN-invert/highlight the current option
OHstin 0:da2b8c7a1ec1 175 currentOption++; // current option is more by 1
OHstin 0:da2b8c7a1ec1 176
OHstin 0:da2b8c7a1ec1 177 if (currentOption > numberOfOptions-1) { // prevents from inverting a non existant option
OHstin 0:da2b8c7a1ec1 178
OHstin 0:da2b8c7a1ec1 179 currentOption = numberOfOptions-1;
OHstin 0:da2b8c7a1ec1 180 invertPixels(currentOption); // invert all pixels in current option
OHstin 0:da2b8c7a1ec1 181 } else {
OHstin 0:da2b8c7a1ec1 182 invertPixels(currentOption); // invert all pixels in current option
OHstin 0:da2b8c7a1ec1 183 }
OHstin 0:da2b8c7a1ec1 184 }
OHstin 0:da2b8c7a1ec1 185
OHstin 0:da2b8c7a1ec1 186 int SettingController::getCurrentOption()
OHstin 0:da2b8c7a1ec1 187 {
OHstin 0:da2b8c7a1ec1 188
OHstin 0:da2b8c7a1ec1 189 return currentOption;
OHstin 0:da2b8c7a1ec1 190 }
OHstin 0:da2b8c7a1ec1 191
OHstin 0:da2b8c7a1ec1 192 int SettingController::getCurrentSetting()
OHstin 0:da2b8c7a1ec1 193 {
OHstin 0:da2b8c7a1ec1 194
OHstin 0:da2b8c7a1ec1 195 return currentSetting;
OHstin 0:da2b8c7a1ec1 196 }
OHstin 0:da2b8c7a1ec1 197 void SettingController::setCurrentSetting( int cs)
OHstin 0:da2b8c7a1ec1 198 {
OHstin 0:da2b8c7a1ec1 199 currentSetting = cs;
OHstin 0:da2b8c7a1ec1 200 }
OHstin 0:da2b8c7a1ec1 201
OHstin 0:da2b8c7a1ec1 202 void SettingController::invertPixels(int option)
OHstin 0:da2b8c7a1ec1 203 {
OHstin 0:da2b8c7a1ec1 204 int onset; // x coordinate where inversion starts
OHstin 0:da2b8c7a1ec1 205
OHstin 0:da2b8c7a1ec1 206 // first bank consists of status bar showing time and battery icon
OHstin 0:da2b8c7a1ec1 207 // second bank consists of the title
OHstin 0:da2b8c7a1ec1 208
OHstin 0:da2b8c7a1ec1 209 if (option == 0) { // invert third bank
OHstin 0:da2b8c7a1ec1 210 onset = 15;
OHstin 0:da2b8c7a1ec1 211 } else if ( option == 1) { // invert fourth bank
OHstin 0:da2b8c7a1ec1 212 onset = 23;
OHstin 0:da2b8c7a1ec1 213 } else if ( option == 2) { // invert fifth bank
OHstin 0:da2b8c7a1ec1 214 onset = 31;
OHstin 0:da2b8c7a1ec1 215 } else {
OHstin 0:da2b8c7a1ec1 216 onset = 39; // invert sixth bank
OHstin 0:da2b8c7a1ec1 217 }
OHstin 0:da2b8c7a1ec1 218
OHstin 0:da2b8c7a1ec1 219 int termination = onset + 9; // bank's length height is 9 pixels
OHstin 0:da2b8c7a1ec1 220
OHstin 0:da2b8c7a1ec1 221 for ( int m = onset; m < termination; m++) {
OHstin 0:da2b8c7a1ec1 222
OHstin 0:da2b8c7a1ec1 223 for ( int n = 0; n < 84; n++) {
OHstin 0:da2b8c7a1ec1 224
OHstin 0:da2b8c7a1ec1 225 if((lcd.getPixel(n,m)) == 0) { // if the pixel is clear
OHstin 0:da2b8c7a1ec1 226 lcd.setPixel(n,m); // set the pixel
OHstin 0:da2b8c7a1ec1 227 } else {
OHstin 0:da2b8c7a1ec1 228 lcd.clearPixel(n,m); // else clear the pixel
OHstin 0:da2b8c7a1ec1 229 }
OHstin 0:da2b8c7a1ec1 230
OHstin 0:da2b8c7a1ec1 231 }
OHstin 0:da2b8c7a1ec1 232 }
OHstin 0:da2b8c7a1ec1 233
OHstin 0:da2b8c7a1ec1 234 lcd.refresh(); // refresh the lcd screen
OHstin 0:da2b8c7a1ec1 235
OHstin 0:da2b8c7a1ec1 236 }
OHstin 0:da2b8c7a1ec1 237
OHstin 0:da2b8c7a1ec1 238 void SettingController::changeSetting()
OHstin 0:da2b8c7a1ec1 239 {
OHstin 0:da2b8c7a1ec1 240 //saveSetting();
OHstin 0:da2b8c7a1ec1 241 //first un-invert the current option
OHstin 0:da2b8c7a1ec1 242 invertPixels(currentOption);
OHstin 0:da2b8c7a1ec1 243 //then remove the setting from option it was
OHstin 0:da2b8c7a1ec1 244 removeSetting(currentSetting);
OHstin 0:da2b8c7a1ec1 245 // make the new option as the new setting
OHstin 0:da2b8c7a1ec1 246 setSetting(currentOption);
OHstin 0:da2b8c7a1ec1 247 //update the current setting
OHstin 0:da2b8c7a1ec1 248 currentSetting = currentOption;
OHstin 0:da2b8c7a1ec1 249 // ivert the current option
OHstin 0:da2b8c7a1ec1 250 invertPixels(currentOption);
OHstin 0:da2b8c7a1ec1 251 }
OHstin 0:da2b8c7a1ec1 252
OHstin 0:da2b8c7a1ec1 253 void SettingController::removeSetting(int option)
OHstin 0:da2b8c7a1ec1 254 {
OHstin 0:da2b8c7a1ec1 255 // remove the setting marker from the option by removing the letter o
OHstin 0:da2b8c7a1ec1 256
OHstin 0:da2b8c7a1ec1 257 if ( option == 0 ) {
OHstin 0:da2b8c7a1ec1 258 lcd.printString(" ",78,2); //option1
OHstin 0:da2b8c7a1ec1 259 } else if ( option == 1 ) {
OHstin 0:da2b8c7a1ec1 260 lcd.printString(" ",78,3); //option2
OHstin 0:da2b8c7a1ec1 261 } else if ( option == 2 ) {
OHstin 0:da2b8c7a1ec1 262 lcd.printString(" ",78,4); //option3
OHstin 0:da2b8c7a1ec1 263 } else {
OHstin 0:da2b8c7a1ec1 264 lcd.printString(" ",78,5); //option4
OHstin 0:da2b8c7a1ec1 265 }
OHstin 0:da2b8c7a1ec1 266
OHstin 0:da2b8c7a1ec1 267 }
OHstin 0:da2b8c7a1ec1 268
OHstin 0:da2b8c7a1ec1 269 void SettingController::setSetting(int option)
OHstin 0:da2b8c7a1ec1 270 {
OHstin 0:da2b8c7a1ec1 271 // make the current position as the new setting by adding letter 0
OHstin 0:da2b8c7a1ec1 272 // at the end of the option
OHstin 0:da2b8c7a1ec1 273
OHstin 0:da2b8c7a1ec1 274 if ( option == 0 ) {
OHstin 0:da2b8c7a1ec1 275 lcd.printString("o",78,2); //option1
OHstin 0:da2b8c7a1ec1 276 } else if ( option == 1 ) {
OHstin 0:da2b8c7a1ec1 277 lcd.printString("o",78,3); //option2
OHstin 0:da2b8c7a1ec1 278 } else if ( option == 2 ) {
OHstin 0:da2b8c7a1ec1 279 lcd.printString("o",78,4); //option3
OHstin 0:da2b8c7a1ec1 280 } else {
OHstin 0:da2b8c7a1ec1 281 lcd.printString("o",78,5); //option4
OHstin 0:da2b8c7a1ec1 282 }
OHstin 0:da2b8c7a1ec1 283 lcd.refresh();
OHstin 0:da2b8c7a1ec1 284
OHstin 0:da2b8c7a1ec1 285 }
OHstin 0:da2b8c7a1ec1 286
OHstin 0:da2b8c7a1ec1 287 #endif