Year Two Project ELEC 2645: Embedded Systems Project Portable Weather Station
Dependencies: BMP180 ConfigFile N5110 PowerControl beep mbed
SettingController.h@0:da2b8c7a1ec1, 2015-05-11 (annotated)
- Committer:
- OHstin
- Date:
- Mon May 11 15:25:52 2015 +0000
- Revision:
- 0:da2b8c7a1ec1
Completed Weather Station
Who changed what in which revision?
User | Revision | Line number | New 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 |