A simple reminder program that can store up to 5 reminders, and has the ability to navigate between different pages through different functions.
Dependencies: Hexi_KW40Z Hexi_OLED_SSD1351 PWM_Tone_Library
5Pages.h@0:63db1c7ee975, 2017-04-19 (annotated)
- Committer:
- fusop
- Date:
- Wed Apr 19 14:57:15 2017 +0000
- Revision:
- 0:63db1c7ee975
Final Version of the Reminder Program;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fusop | 0:63db1c7ee975 | 1 | //------------------------------------------------------------------------------ |
fusop | 0:63db1c7ee975 | 2 | // PAGES FUNCTION DEFINITIONS |
fusop | 0:63db1c7ee975 | 3 | //------------------------------------------------------------------------------ |
fusop | 0:63db1c7ee975 | 4 | |
fusop | 0:63db1c7ee975 | 5 | void TimeSetup() |
fusop | 0:63db1c7ee975 | 6 | { |
fusop | 0:63db1c7ee975 | 7 | //Variables |
fusop | 0:63db1c7ee975 | 8 | int point = 1; //Points to which digit |
fusop | 0:63db1c7ee975 | 9 | int valid = 0; //Exit confirmation |
fusop | 0:63db1c7ee975 | 10 | int num = 0; //Temporary number holder |
fusop | 0:63db1c7ee975 | 11 | int xc = 25; //Initial cursor's x-position |
fusop | 0:63db1c7ee975 | 12 | |
fusop | 0:63db1c7ee975 | 13 | //Screen Setup |
fusop | 0:63db1c7ee975 | 14 | oled.FillScreen(COLOR_BLACK); |
fusop | 0:63db1c7ee975 | 15 | |
fusop | 0:63db1c7ee975 | 16 | strcpy((char *) str, "Set time and date"); |
fusop | 0:63db1c7ee975 | 17 | oled.Label((uint8_t *) str, 0, 0); |
fusop | 0:63db1c7ee975 | 18 | |
fusop | 0:63db1c7ee975 | 19 | strcpy((char *) str, "HH:MM"); |
fusop | 0:63db1c7ee975 | 20 | oled.Label((uint8_t *) str, 30, 20); |
fusop | 0:63db1c7ee975 | 21 | |
fusop | 0:63db1c7ee975 | 22 | strcpy((char *) str, "Hours"); |
fusop | 0:63db1c7ee975 | 23 | oled.Label((uint8_t *) str, 2, 80); |
fusop | 0:63db1c7ee975 | 24 | |
fusop | 0:63db1c7ee975 | 25 | strcpy((char *) str, "Mins/OK"); |
fusop | 0:63db1c7ee975 | 26 | oled.Label((uint8_t *) str, 43, 80); |
fusop | 0:63db1c7ee975 | 27 | |
fusop | 0:63db1c7ee975 | 28 | while (valid != 1) //This is a loop for time input |
fusop | 0:63db1c7ee975 | 29 | { |
fusop | 0:63db1c7ee975 | 30 | if (butflg == 1) |
fusop | 0:63db1c7ee975 | 31 | { |
fusop | 0:63db1c7ee975 | 32 | if (butmem == BUT_RIGHT && point == 1) //Go right to minutes |
fusop | 0:63db1c7ee975 | 33 | { |
fusop | 0:63db1c7ee975 | 34 | hours = num; |
fusop | 0:63db1c7ee975 | 35 | num = mins; |
fusop | 0:63db1c7ee975 | 36 | point = 2; |
fusop | 0:63db1c7ee975 | 37 | xc = 45; |
fusop | 0:63db1c7ee975 | 38 | } |
fusop | 0:63db1c7ee975 | 39 | else if (butmem == BUT_RIGHT && point == 2 && valid == 0) //Exit |
fusop | 0:63db1c7ee975 | 40 | { |
fusop | 0:63db1c7ee975 | 41 | mins = num; |
fusop | 0:63db1c7ee975 | 42 | valid = 1; |
fusop | 0:63db1c7ee975 | 43 | } |
fusop | 0:63db1c7ee975 | 44 | else if (butmem == BUT_LEFT && point == 2 && valid == 0) //Go left to seconds |
fusop | 0:63db1c7ee975 | 45 | { |
fusop | 0:63db1c7ee975 | 46 | mins = num; |
fusop | 0:63db1c7ee975 | 47 | num = hours; |
fusop | 0:63db1c7ee975 | 48 | point = 1; |
fusop | 0:63db1c7ee975 | 49 | xc = 25; |
fusop | 0:63db1c7ee975 | 50 | } |
fusop | 0:63db1c7ee975 | 51 | |
fusop | 0:63db1c7ee975 | 52 | //Increases the number of the hours/minutes using the up or down button |
fusop | 0:63db1c7ee975 | 53 | if (butmem == BUT_UP && ((point == 1 && num != 23) || (point == 2 && num != 59))) num++; |
fusop | 0:63db1c7ee975 | 54 | else if (butmem == BUT_DOWN && num != 0) num--; |
fusop | 0:63db1c7ee975 | 55 | butflg = 0; |
fusop | 0:63db1c7ee975 | 56 | } |
fusop | 0:63db1c7ee975 | 57 | |
fusop | 0:63db1c7ee975 | 58 | //Updates the display |
fusop | 0:63db1c7ee975 | 59 | sprintf((char *) str, "%d", num); |
fusop | 0:63db1c7ee975 | 60 | oled.TextBox((uint8_t *) str, xc, 40, 15, 15); |
fusop | 0:63db1c7ee975 | 61 | Thread::wait(500); |
fusop | 0:63db1c7ee975 | 62 | } |
fusop | 0:63db1c7ee975 | 63 | |
fusop | 0:63db1c7ee975 | 64 | numCount = 0; //Activate the time flag |
fusop | 0:63db1c7ee975 | 65 | } |
fusop | 0:63db1c7ee975 | 66 | |
fusop | 0:63db1c7ee975 | 67 | void TimeDisplay() |
fusop | 0:63db1c7ee975 | 68 | { |
fusop | 0:63db1c7ee975 | 69 | sprintf((char *) str, "%.2d : %.2d", hours, mins); |
fusop | 0:63db1c7ee975 | 70 | oled.Label((uint8_t *) str, 30, 0); |
fusop | 0:63db1c7ee975 | 71 | } |
fusop | 0:63db1c7ee975 | 72 | |
fusop | 0:63db1c7ee975 | 73 | void MainDisp() |
fusop | 0:63db1c7ee975 | 74 | { |
fusop | 0:63db1c7ee975 | 75 | //This is the home screen |
fusop | 0:63db1c7ee975 | 76 | strcpy((char *) str, "Delete"); |
fusop | 0:63db1c7ee975 | 77 | oled.Label((uint8_t *) str, 5, 80); |
fusop | 0:63db1c7ee975 | 78 | |
fusop | 0:63db1c7ee975 | 79 | strcpy((char *) str, "Add"); |
fusop | 0:63db1c7ee975 | 80 | oled.Label((uint8_t *) str, 60, 80); |
fusop | 0:63db1c7ee975 | 81 | } |
fusop | 0:63db1c7ee975 | 82 | |
fusop | 0:63db1c7ee975 | 83 | void ReminderList() |
fusop | 0:63db1c7ee975 | 84 | { |
fusop | 0:63db1c7ee975 | 85 | int m; |
fusop | 0:63db1c7ee975 | 86 | //For the other two buttons |
fusop | 0:63db1c7ee975 | 87 | if (nDisp == 5) |
fusop | 0:63db1c7ee975 | 88 | { |
fusop | 0:63db1c7ee975 | 89 | oled.DrawBox(0, 30, 96, 96-30-15, COLOR_BLACK); |
fusop | 0:63db1c7ee975 | 90 | strcpy((char *) str, "No Data"); |
fusop | 0:63db1c7ee975 | 91 | oled.Label((uint8_t *) str, 10, 45); |
fusop | 0:63db1c7ee975 | 92 | } |
fusop | 0:63db1c7ee975 | 93 | else |
fusop | 0:63db1c7ee975 | 94 | { |
fusop | 0:63db1c7ee975 | 95 | if (butmem == BUT_UP) |
fusop | 0:63db1c7ee975 | 96 | { |
fusop | 0:63db1c7ee975 | 97 | for (m = nDisp+1; m < 5; m++) |
fusop | 0:63db1c7ee975 | 98 | { |
fusop | 0:63db1c7ee975 | 99 | if (remData[m].rExist == 1) |
fusop | 0:63db1c7ee975 | 100 | { |
fusop | 0:63db1c7ee975 | 101 | nDisp = m; |
fusop | 0:63db1c7ee975 | 102 | break; |
fusop | 0:63db1c7ee975 | 103 | } |
fusop | 0:63db1c7ee975 | 104 | } |
fusop | 0:63db1c7ee975 | 105 | } |
fusop | 0:63db1c7ee975 | 106 | else if (butmem == BUT_DOWN) |
fusop | 0:63db1c7ee975 | 107 | { |
fusop | 0:63db1c7ee975 | 108 | for (m = nDisp-1; m >= 0; m--) |
fusop | 0:63db1c7ee975 | 109 | { |
fusop | 0:63db1c7ee975 | 110 | if (remData[m].rExist == 1) |
fusop | 0:63db1c7ee975 | 111 | { |
fusop | 0:63db1c7ee975 | 112 | nDisp = m; |
fusop | 0:63db1c7ee975 | 113 | break; |
fusop | 0:63db1c7ee975 | 114 | } |
fusop | 0:63db1c7ee975 | 115 | } |
fusop | 0:63db1c7ee975 | 116 | } |
fusop | 0:63db1c7ee975 | 117 | |
fusop | 0:63db1c7ee975 | 118 | //Display the result |
fusop | 0:63db1c7ee975 | 119 | oled.DrawBox(0, 30, 96, 96-30-15, COLOR_BLACK); |
fusop | 0:63db1c7ee975 | 120 | oled.Label((uint8_t *) remData[nDisp].rText, 10, 40); |
fusop | 0:63db1c7ee975 | 121 | sprintf((char *) str, " %d:%d", remData[nDisp].rHours, remData[nDisp].rMins); |
fusop | 0:63db1c7ee975 | 122 | oled.Label((uint8_t *) str, 20, 55); |
fusop | 0:63db1c7ee975 | 123 | } |
fusop | 0:63db1c7ee975 | 124 | } |
fusop | 0:63db1c7ee975 | 125 | |
fusop | 0:63db1c7ee975 | 126 | void AddReminder() |
fusop | 0:63db1c7ee975 | 127 | { |
fusop | 0:63db1c7ee975 | 128 | //Temporary Variable for Input Acknowledgement |
fusop | 0:63db1c7ee975 | 129 | int inputAck = 0; |
fusop | 0:63db1c7ee975 | 130 | int xc = 25; |
fusop | 0:63db1c7ee975 | 131 | int num = 0; |
fusop | 0:63db1c7ee975 | 132 | int total = 0; |
fusop | 0:63db1c7ee975 | 133 | |
fusop | 0:63db1c7ee975 | 134 | //Clear Screen |
fusop | 0:63db1c7ee975 | 135 | oled.DrawBox(0, 30, 96, 96-30, COLOR_BLACK); |
fusop | 0:63db1c7ee975 | 136 | |
fusop | 0:63db1c7ee975 | 137 | //Count how many reminders are in there |
fusop | 0:63db1c7ee975 | 138 | //For now, limit to 5 data |
fusop | 0:63db1c7ee975 | 139 | for (num = 0; num < 5; num++) total = total+remData[num].rExist; |
fusop | 0:63db1c7ee975 | 140 | |
fusop | 0:63db1c7ee975 | 141 | //Since num is used in the time input code block, clear it |
fusop | 0:63db1c7ee975 | 142 | num = 0; |
fusop | 0:63db1c7ee975 | 143 | |
fusop | 0:63db1c7ee975 | 144 | if (total == 5) |
fusop | 0:63db1c7ee975 | 145 | { |
fusop | 0:63db1c7ee975 | 146 | strcpy((char *) str, "Reminder Full"); |
fusop | 0:63db1c7ee975 | 147 | oled.Label((uint8_t *) str, 10, 45); |
fusop | 0:63db1c7ee975 | 148 | |
fusop | 0:63db1c7ee975 | 149 | DelayProg(6); |
fusop | 0:63db1c7ee975 | 150 | } |
fusop | 0:63db1c7ee975 | 151 | else //Here is the main program for AddReminder() |
fusop | 0:63db1c7ee975 | 152 | { |
fusop | 0:63db1c7ee975 | 153 | //First we offset to the first entry with rExist = 0; |
fusop | 0:63db1c7ee975 | 154 | |
fusop | 0:63db1c7ee975 | 155 | for (rNumber = 0; rNumber < 5; rNumber++) |
fusop | 0:63db1c7ee975 | 156 | { |
fusop | 0:63db1c7ee975 | 157 | if (remData[rNumber].rExist == 0) break; |
fusop | 0:63db1c7ee975 | 158 | } |
fusop | 0:63db1c7ee975 | 159 | |
fusop | 0:63db1c7ee975 | 160 | //Then we display whatever we need to display |
fusop | 0:63db1c7ee975 | 161 | |
fusop | 0:63db1c7ee975 | 162 | //Display Entry Number |
fusop | 0:63db1c7ee975 | 163 | sprintf((char *) str, "Entry #%d", rNumber+1); |
fusop | 0:63db1c7ee975 | 164 | oled.Label((uint8_t *) str, 0, 30); |
fusop | 0:63db1c7ee975 | 165 | |
fusop | 0:63db1c7ee975 | 166 | //Text Input--------------------------------------------- |
fusop | 0:63db1c7ee975 | 167 | strcpy((char *) str, "Agenda:"); |
fusop | 0:63db1c7ee975 | 168 | oled.Label((uint8_t *) str, 0, 45); |
fusop | 0:63db1c7ee975 | 169 | |
fusop | 0:63db1c7ee975 | 170 | inputAck = CharInput(60, rNumber); |
fusop | 0:63db1c7ee975 | 171 | //DelayProg(6); |
fusop | 0:63db1c7ee975 | 172 | |
fusop | 0:63db1c7ee975 | 173 | oled.DrawBox(0, 45, 96, 96-45, COLOR_BLACK); |
fusop | 0:63db1c7ee975 | 174 | |
fusop | 0:63db1c7ee975 | 175 | if (inputAck == 0) |
fusop | 0:63db1c7ee975 | 176 | { |
fusop | 0:63db1c7ee975 | 177 | oled.DrawBox(0, 30, 96, 96-30, COLOR_BLACK); |
fusop | 0:63db1c7ee975 | 178 | |
fusop | 0:63db1c7ee975 | 179 | strcpy((char *) str, "Canceled"); |
fusop | 0:63db1c7ee975 | 180 | oled.Label((uint8_t *) str, 0, 45); |
fusop | 0:63db1c7ee975 | 181 | |
fusop | 0:63db1c7ee975 | 182 | DelayProg(6); |
fusop | 0:63db1c7ee975 | 183 | |
fusop | 0:63db1c7ee975 | 184 | //Break the hell out of this function. |
fusop | 0:63db1c7ee975 | 185 | goto AddRemExit; |
fusop | 0:63db1c7ee975 | 186 | } |
fusop | 0:63db1c7ee975 | 187 | |
fusop | 0:63db1c7ee975 | 188 | //Else, proceed to time input |
fusop | 0:63db1c7ee975 | 189 | |
fusop | 0:63db1c7ee975 | 190 | //Time input---------------------------------------------- |
fusop | 0:63db1c7ee975 | 191 | strcpy((char *) str, "Time(HH:MM):"); |
fusop | 0:63db1c7ee975 | 192 | oled.Label((uint8_t *) str, 0, 30); |
fusop | 0:63db1c7ee975 | 193 | |
fusop | 0:63db1c7ee975 | 194 | strcpy((char *) str, "Hours"); |
fusop | 0:63db1c7ee975 | 195 | oled.Label((uint8_t *) str, 2, 80); |
fusop | 0:63db1c7ee975 | 196 | |
fusop | 0:63db1c7ee975 | 197 | strcpy((char *) str, "Mins/OK"); |
fusop | 0:63db1c7ee975 | 198 | oled.Label((uint8_t *) str, 43, 80); |
fusop | 0:63db1c7ee975 | 199 | |
fusop | 0:63db1c7ee975 | 200 | //Breakdown of the variables |
fusop | 0:63db1c7ee975 | 201 | // xc = x-position, as well as the reference of hours or minutes |
fusop | 0:63db1c7ee975 | 202 | // inputAck |
fusop | 0:63db1c7ee975 | 203 | // num = temporary variable |
fusop | 0:63db1c7ee975 | 204 | |
fusop | 0:63db1c7ee975 | 205 | while (1) //This is a time input loop for reminders |
fusop | 0:63db1c7ee975 | 206 | { |
fusop | 0:63db1c7ee975 | 207 | if (butflg == 1) |
fusop | 0:63db1c7ee975 | 208 | { |
fusop | 0:63db1c7ee975 | 209 | if (butmem == BUT_RIGHT && xc == 25) //Go right to minutes |
fusop | 0:63db1c7ee975 | 210 | { |
fusop | 0:63db1c7ee975 | 211 | remData[rNumber].rHours = num; //num is recycled from previous functions |
fusop | 0:63db1c7ee975 | 212 | num = remData[rNumber].rMins; |
fusop | 0:63db1c7ee975 | 213 | xc = 45; |
fusop | 0:63db1c7ee975 | 214 | } |
fusop | 0:63db1c7ee975 | 215 | else if (butmem == BUT_LEFT && xc == 25) //Exit (Cancelled) |
fusop | 0:63db1c7ee975 | 216 | { |
fusop | 0:63db1c7ee975 | 217 | remData[rNumber].rHours = 0; |
fusop | 0:63db1c7ee975 | 218 | remData[rNumber].rMins = 0; |
fusop | 0:63db1c7ee975 | 219 | strcpy(remData[rNumber].rText, " "); |
fusop | 0:63db1c7ee975 | 220 | inputAck = 0; |
fusop | 0:63db1c7ee975 | 221 | break; //Don't forget this is the second 'if loop'. |
fusop | 0:63db1c7ee975 | 222 | } |
fusop | 0:63db1c7ee975 | 223 | else if (butmem == BUT_RIGHT && xc == 45) //Exit (Confirmed) |
fusop | 0:63db1c7ee975 | 224 | { |
fusop | 0:63db1c7ee975 | 225 | remData[rNumber].rMins = num; |
fusop | 0:63db1c7ee975 | 226 | inputAck = 1; |
fusop | 0:63db1c7ee975 | 227 | break; //Don't forget this is the second 'if loop'. |
fusop | 0:63db1c7ee975 | 228 | } |
fusop | 0:63db1c7ee975 | 229 | else if (butmem == BUT_LEFT && xc == 45) //Go left to seconds |
fusop | 0:63db1c7ee975 | 230 | { |
fusop | 0:63db1c7ee975 | 231 | remData[rNumber].rMins = num; |
fusop | 0:63db1c7ee975 | 232 | num = remData[rNumber].rHours; |
fusop | 0:63db1c7ee975 | 233 | xc = 25; |
fusop | 0:63db1c7ee975 | 234 | } |
fusop | 0:63db1c7ee975 | 235 | |
fusop | 0:63db1c7ee975 | 236 | //Increases the number of the hours/minutes using the up or down button |
fusop | 0:63db1c7ee975 | 237 | if (butmem == BUT_UP && ((xc == 25 && num != 23) || (xc == 45 && num != 59))) num++; |
fusop | 0:63db1c7ee975 | 238 | else if (butmem == BUT_DOWN && num != 0) num--; |
fusop | 0:63db1c7ee975 | 239 | butflg = 0; |
fusop | 0:63db1c7ee975 | 240 | } |
fusop | 0:63db1c7ee975 | 241 | |
fusop | 0:63db1c7ee975 | 242 | if (inputAck == 0) goto AddRemExit; //And this continues from the Exit (Cancelled) |
fusop | 0:63db1c7ee975 | 243 | |
fusop | 0:63db1c7ee975 | 244 | //Updates the display |
fusop | 0:63db1c7ee975 | 245 | sprintf((char *) str, "%d", num); |
fusop | 0:63db1c7ee975 | 246 | oled.TextBox((uint8_t *) str, xc, 60, 15, 15); |
fusop | 0:63db1c7ee975 | 247 | } |
fusop | 0:63db1c7ee975 | 248 | |
fusop | 0:63db1c7ee975 | 249 | if (inputAck == 0) |
fusop | 0:63db1c7ee975 | 250 | { |
fusop | 0:63db1c7ee975 | 251 | oled.DrawBox(0, 30, 96, 96-30, COLOR_BLACK); |
fusop | 0:63db1c7ee975 | 252 | strcpy((char *) str, "Canceled"); |
fusop | 0:63db1c7ee975 | 253 | oled.Label((uint8_t *) str, 0, 45); |
fusop | 0:63db1c7ee975 | 254 | |
fusop | 0:63db1c7ee975 | 255 | DelayProg(6); |
fusop | 0:63db1c7ee975 | 256 | |
fusop | 0:63db1c7ee975 | 257 | //Break the hell out of this function. |
fusop | 0:63db1c7ee975 | 258 | goto AddRemExit; |
fusop | 0:63db1c7ee975 | 259 | } |
fusop | 0:63db1c7ee975 | 260 | |
fusop | 0:63db1c7ee975 | 261 | //All the details are confirmed ---------------------------------------- |
fusop | 0:63db1c7ee975 | 262 | |
fusop | 0:63db1c7ee975 | 263 | remData[rNumber].rExist = 1; |
fusop | 0:63db1c7ee975 | 264 | |
fusop | 0:63db1c7ee975 | 265 | oled.DrawBox(0, 30, 96, 96-30, COLOR_BLACK); |
fusop | 0:63db1c7ee975 | 266 | strcpy((char *) str, "Reminder Added"); |
fusop | 0:63db1c7ee975 | 267 | oled.Label((uint8_t *) str, 0, 45); |
fusop | 0:63db1c7ee975 | 268 | |
fusop | 0:63db1c7ee975 | 269 | DelayProg(6); |
fusop | 0:63db1c7ee975 | 270 | } |
fusop | 0:63db1c7ee975 | 271 | |
fusop | 0:63db1c7ee975 | 272 | AddRemExit: |
fusop | 0:63db1c7ee975 | 273 | |
fusop | 0:63db1c7ee975 | 274 | //Setup Screen before exiting |
fusop | 0:63db1c7ee975 | 275 | oled.DrawBox(0, 30, 96, 96-30, COLOR_BLACK); |
fusop | 0:63db1c7ee975 | 276 | MainDisp(); |
fusop | 0:63db1c7ee975 | 277 | |
fusop | 0:63db1c7ee975 | 278 | //Set this flag to 1 to recalculate the display data |
fusop | 0:63db1c7ee975 | 279 | fReCalc = 1; |
fusop | 0:63db1c7ee975 | 280 | } |
fusop | 0:63db1c7ee975 | 281 | |
fusop | 0:63db1c7ee975 | 282 | void DelReminder() |
fusop | 0:63db1c7ee975 | 283 | { |
fusop | 0:63db1c7ee975 | 284 | int n; |
fusop | 0:63db1c7ee975 | 285 | int total = 0; |
fusop | 0:63db1c7ee975 | 286 | |
fusop | 0:63db1c7ee975 | 287 | //Clear Screen |
fusop | 0:63db1c7ee975 | 288 | oled.DrawBox(0, 30, 96, 96-30, COLOR_BLACK); |
fusop | 0:63db1c7ee975 | 289 | |
fusop | 0:63db1c7ee975 | 290 | //If total is 0, then there is no data to delete, ain't it? |
fusop | 0:63db1c7ee975 | 291 | for (n = 0; n < 5; n++) total = total+remData[n].rExist; |
fusop | 0:63db1c7ee975 | 292 | |
fusop | 0:63db1c7ee975 | 293 | if (total == 0) |
fusop | 0:63db1c7ee975 | 294 | { |
fusop | 0:63db1c7ee975 | 295 | strcpy((char *) str, "No Data"); |
fusop | 0:63db1c7ee975 | 296 | oled.Label((uint8_t *) str, 10, 45); |
fusop | 0:63db1c7ee975 | 297 | |
fusop | 0:63db1c7ee975 | 298 | DelayProg(6); |
fusop | 0:63db1c7ee975 | 299 | } |
fusop | 0:63db1c7ee975 | 300 | else //Case when there is a Data to delete |
fusop | 0:63db1c7ee975 | 301 | { |
fusop | 0:63db1c7ee975 | 302 | //First we must offset to the first existing data |
fusop | 0:63db1c7ee975 | 303 | for (n = 0; n < 5; n++) |
fusop | 0:63db1c7ee975 | 304 | { |
fusop | 0:63db1c7ee975 | 305 | if (remData[n].rExist != 0) break; |
fusop | 0:63db1c7ee975 | 306 | } |
fusop | 0:63db1c7ee975 | 307 | |
fusop | 0:63db1c7ee975 | 308 | //Then we display whatever we need to display |
fusop | 0:63db1c7ee975 | 309 | |
fusop | 0:63db1c7ee975 | 310 | //We enter the navigation |
fusop | 0:63db1c7ee975 | 311 | |
fusop | 0:63db1c7ee975 | 312 | butmem = 0; |
fusop | 0:63db1c7ee975 | 313 | |
fusop | 0:63db1c7ee975 | 314 | //First thing that it should display |
fusop | 0:63db1c7ee975 | 315 | |
fusop | 0:63db1c7ee975 | 316 | sprintf((char *) str, "Entry #%d", n+1); //Entry Number |
fusop | 0:63db1c7ee975 | 317 | oled.Label((uint8_t *) str, 0, 30); |
fusop | 0:63db1c7ee975 | 318 | oled.Label((uint8_t *) remData[n].rText, 0, 45); //Its text |
fusop | 0:63db1c7ee975 | 319 | sprintf((char *) str, "%d:%d", remData[n].rHours, remData[n].rMins); //Its time, for SPARTAAAAAAA |
fusop | 0:63db1c7ee975 | 320 | |
fusop | 0:63db1c7ee975 | 321 | while (1) //NOTE: THIS IS TERRIBLY RISKY, BUT whatever |
fusop | 0:63db1c7ee975 | 322 | { |
fusop | 0:63db1c7ee975 | 323 | if (butflg == 1) |
fusop | 0:63db1c7ee975 | 324 | { |
fusop | 0:63db1c7ee975 | 325 | //There are two parts in this section |
fusop | 0:63db1c7ee975 | 326 | |
fusop | 0:63db1c7ee975 | 327 | //FIRST PART: DO I GO NEXT OR PREVIOUS? |
fusop | 0:63db1c7ee975 | 328 | if (butmem == BUT_UP) |
fusop | 0:63db1c7ee975 | 329 | { |
fusop | 0:63db1c7ee975 | 330 | //Let's recycle total here. total is used as pointer |
fusop | 0:63db1c7ee975 | 331 | //So if there is any data after the value n, we can move up |
fusop | 0:63db1c7ee975 | 332 | for (total = n+1; total < 5; total++) |
fusop | 0:63db1c7ee975 | 333 | { |
fusop | 0:63db1c7ee975 | 334 | if (remData[total].rExist != 0) break; |
fusop | 0:63db1c7ee975 | 335 | } |
fusop | 0:63db1c7ee975 | 336 | |
fusop | 0:63db1c7ee975 | 337 | if (total != 5) n = total; |
fusop | 0:63db1c7ee975 | 338 | total = 0; //For various reasons, reset total |
fusop | 0:63db1c7ee975 | 339 | } |
fusop | 0:63db1c7ee975 | 340 | else if (butmem == BUT_DOWN) |
fusop | 0:63db1c7ee975 | 341 | { |
fusop | 0:63db1c7ee975 | 342 | //Let's...you know what I'm gonna talk about |
fusop | 0:63db1c7ee975 | 343 | for (total = n-1; total >= 0; total--) |
fusop | 0:63db1c7ee975 | 344 | { |
fusop | 0:63db1c7ee975 | 345 | if (remData[total].rExist != 0) break; |
fusop | 0:63db1c7ee975 | 346 | } |
fusop | 0:63db1c7ee975 | 347 | |
fusop | 0:63db1c7ee975 | 348 | if (total != -1) n = total; |
fusop | 0:63db1c7ee975 | 349 | total = 0; //For the same reason as above, reset total |
fusop | 0:63db1c7ee975 | 350 | } |
fusop | 0:63db1c7ee975 | 351 | |
fusop | 0:63db1c7ee975 | 352 | //SECOND PART: DO I WANT TO DELETE OR NAH |
fusop | 0:63db1c7ee975 | 353 | if (butmem == BUT_LEFT) total = 0x11; //Uh, reasons |
fusop | 0:63db1c7ee975 | 354 | else if (butmem == BUT_RIGHT) total = 0x27; //Fav Number |
fusop | 0:63db1c7ee975 | 355 | //*That is why I need to reset total everytime* |
fusop | 0:63db1c7ee975 | 356 | |
fusop | 0:63db1c7ee975 | 357 | //THIRD PART(DID YOU NOT EXPECT THE SPANISH INQUISITION?) |
fusop | 0:63db1c7ee975 | 358 | //Display the stuff |
fusop | 0:63db1c7ee975 | 359 | |
fusop | 0:63db1c7ee975 | 360 | oled.DrawBox(0, 30, 96, 96-30, COLOR_BLACK); |
fusop | 0:63db1c7ee975 | 361 | sprintf((char *) str, "Entry #%d", n+1); //Entry Number |
fusop | 0:63db1c7ee975 | 362 | oled.Label((uint8_t *) str, 0, 30); |
fusop | 0:63db1c7ee975 | 363 | oled.Label((uint8_t *) remData[n].rText, 0, 45); |
fusop | 0:63db1c7ee975 | 364 | sprintf((char *) str, "%d:%d", remData[n].rHours, remData[n].rMins); |
fusop | 0:63db1c7ee975 | 365 | oled.Label((uint8_t *) str, 0, 60); |
fusop | 0:63db1c7ee975 | 366 | |
fusop | 0:63db1c7ee975 | 367 | butflg = 0; |
fusop | 0:63db1c7ee975 | 368 | } |
fusop | 0:63db1c7ee975 | 369 | |
fusop | 0:63db1c7ee975 | 370 | //Delete Data and Exit |
fusop | 0:63db1c7ee975 | 371 | if (total == 0x27) |
fusop | 0:63db1c7ee975 | 372 | { |
fusop | 0:63db1c7ee975 | 373 | strcpy(remData[n].rText, " "); |
fusop | 0:63db1c7ee975 | 374 | remData[n].rHours = 0; |
fusop | 0:63db1c7ee975 | 375 | remData[n].rMins = 0; |
fusop | 0:63db1c7ee975 | 376 | remData[n].rExist = 0; |
fusop | 0:63db1c7ee975 | 377 | |
fusop | 0:63db1c7ee975 | 378 | oled.DrawBox(0, 30, 96, 96-30, COLOR_BLACK); |
fusop | 0:63db1c7ee975 | 379 | oled.DrawBox(0, 30, 96, 96-30, COLOR_BLACK); |
fusop | 0:63db1c7ee975 | 380 | |
fusop | 0:63db1c7ee975 | 381 | sprintf((char *) str, "Entry #%d Deleted", n+1); |
fusop | 0:63db1c7ee975 | 382 | oled.Label((uint8_t *) str, 0, 45); |
fusop | 0:63db1c7ee975 | 383 | |
fusop | 0:63db1c7ee975 | 384 | DelayProg(6); |
fusop | 0:63db1c7ee975 | 385 | |
fusop | 0:63db1c7ee975 | 386 | break; |
fusop | 0:63db1c7ee975 | 387 | } |
fusop | 0:63db1c7ee975 | 388 | //Exit this function |
fusop | 0:63db1c7ee975 | 389 | else if (total == 0x11) break; |
fusop | 0:63db1c7ee975 | 390 | |
fusop | 0:63db1c7ee975 | 391 | }//End of While Loop |
fusop | 0:63db1c7ee975 | 392 | |
fusop | 0:63db1c7ee975 | 393 | }//End of Else Loop |
fusop | 0:63db1c7ee975 | 394 | |
fusop | 0:63db1c7ee975 | 395 | //Setup Screen before exiting |
fusop | 0:63db1c7ee975 | 396 | oled.DrawBox(0, 30, 96, 96-30, COLOR_BLACK); |
fusop | 0:63db1c7ee975 | 397 | MainDisp(); |
fusop | 0:63db1c7ee975 | 398 | |
fusop | 0:63db1c7ee975 | 399 | //Set this flag to 1 to recalculate the display data |
fusop | 0:63db1c7ee975 | 400 | fReCalc = 1; |
fusop | 0:63db1c7ee975 | 401 | |
fusop | 0:63db1c7ee975 | 402 | }//End of GOSH HOW CAN YOU NOT KNOW WHAT END IS THIS? |
fusop | 0:63db1c7ee975 | 403 |