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
4Interrupt.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 | //------------------------------------------------------------------------------ |
fusop | 0:63db1c7ee975 | 3 | // INTERRUPT ROUTINE |
fusop | 0:63db1c7ee975 | 4 | //------------------------------------------------------------------------------ |
fusop | 0:63db1c7ee975 | 5 | |
fusop | 0:63db1c7ee975 | 6 | void InterruptAction (void const *n) |
fusop | 0:63db1c7ee975 | 7 | { |
fusop | 0:63db1c7ee975 | 8 | int num = 0; |
fusop | 0:63db1c7ee975 | 9 | //-------------------------------------------------------------------------- |
fusop | 0:63db1c7ee975 | 10 | // TIME UPDATE |
fusop | 0:63db1c7ee975 | 11 | //-------------------------------------------------------------------------- |
fusop | 0:63db1c7ee975 | 12 | if (numCount != -1) |
fusop | 0:63db1c7ee975 | 13 | { |
fusop | 0:63db1c7ee975 | 14 | if (numCount == 1000) |
fusop | 0:63db1c7ee975 | 15 | { |
fusop | 0:63db1c7ee975 | 16 | //Time increment Section-------------------------------------------- |
fusop | 0:63db1c7ee975 | 17 | numCount = 0; |
fusop | 0:63db1c7ee975 | 18 | //Check for Seconds |
fusop | 0:63db1c7ee975 | 19 | if (secs == 59) |
fusop | 0:63db1c7ee975 | 20 | { |
fusop | 0:63db1c7ee975 | 21 | secs = 0; |
fusop | 0:63db1c7ee975 | 22 | //Check for Minutes |
fusop | 0:63db1c7ee975 | 23 | if (mins == 59) |
fusop | 0:63db1c7ee975 | 24 | { |
fusop | 0:63db1c7ee975 | 25 | mins = 0; |
fusop | 0:63db1c7ee975 | 26 | //Check for Hours |
fusop | 0:63db1c7ee975 | 27 | if (hours == 23) hours = 0; |
fusop | 0:63db1c7ee975 | 28 | else hours++; |
fusop | 0:63db1c7ee975 | 29 | } |
fusop | 0:63db1c7ee975 | 30 | else |
fusop | 0:63db1c7ee975 | 31 | { |
fusop | 0:63db1c7ee975 | 32 | mins++; |
fusop | 0:63db1c7ee975 | 33 | TimeDisplay(); //Update time every minute |
fusop | 0:63db1c7ee975 | 34 | } //Always display time on all pages |
fusop | 0:63db1c7ee975 | 35 | } |
fusop | 0:63db1c7ee975 | 36 | else secs++; |
fusop | 0:63db1c7ee975 | 37 | |
fusop | 0:63db1c7ee975 | 38 | //Alarm Section----------------------------------------------------- |
fusop | 0:63db1c7ee975 | 39 | //Assuming the CPU can do this really really fast, I hope it won't affect |
fusop | 0:63db1c7ee975 | 40 | //the overall performance of the program |
fusop | 0:63db1c7ee975 | 41 | for (num = 0; num < 5; num++) |
fusop | 0:63db1c7ee975 | 42 | { |
fusop | 0:63db1c7ee975 | 43 | if (remData[num].rExist == 1) |
fusop | 0:63db1c7ee975 | 44 | { |
fusop | 0:63db1c7ee975 | 45 | if (remData[num].rHours == hours && remData[num].rMins == mins) |
fusop | 0:63db1c7ee975 | 46 | { |
fusop | 0:63db1c7ee975 | 47 | fAlarm = 1; |
fusop | 0:63db1c7ee975 | 48 | nAlarm = num; |
fusop | 0:63db1c7ee975 | 49 | num = 5; //Just to exit the loop |
fusop | 0:63db1c7ee975 | 50 | } |
fusop | 0:63db1c7ee975 | 51 | } |
fusop | 0:63db1c7ee975 | 52 | } |
fusop | 0:63db1c7ee975 | 53 | } |
fusop | 0:63db1c7ee975 | 54 | else numCount++; |
fusop | 0:63db1c7ee975 | 55 | } |
fusop | 0:63db1c7ee975 | 56 | |
fusop | 0:63db1c7ee975 | 57 | //-------------------------------------------------------------------------- |
fusop | 0:63db1c7ee975 | 58 | // ALERT DISPLAY FEEDBACK |
fusop | 0:63db1c7ee975 | 59 | //-------------------------------------------------------------------------- |
fusop | 0:63db1c7ee975 | 60 | |
fusop | 0:63db1c7ee975 | 61 | if (fAlarm == 1) //1st Stage: Display |
fusop | 0:63db1c7ee975 | 62 | { |
fusop | 0:63db1c7ee975 | 63 | oled.Label((uint8_t *) remData[nAlarm].rText, 10, 15); |
fusop | 0:63db1c7ee975 | 64 | |
fusop | 0:63db1c7ee975 | 65 | //Wipe the data from memmory |
fusop | 0:63db1c7ee975 | 66 | strcpy(remData[nAlarm].rText, " "); |
fusop | 0:63db1c7ee975 | 67 | remData[nAlarm].rHours = 0; |
fusop | 0:63db1c7ee975 | 68 | remData[nAlarm].rMins = 0; |
fusop | 0:63db1c7ee975 | 69 | remData[nAlarm].rExist = 0; |
fusop | 0:63db1c7ee975 | 70 | |
fusop | 0:63db1c7ee975 | 71 | //Preparation for the next stage |
fusop | 0:63db1c7ee975 | 72 | fAlarm = 2; |
fusop | 0:63db1c7ee975 | 73 | nAlarm = 10000; //Set to 10 seconds display |
fusop | 0:63db1c7ee975 | 74 | vAlarm = 5000; //Set to 5 seconds vibration |
fusop | 0:63db1c7ee975 | 75 | |
fusop | 0:63db1c7ee975 | 76 | //Start the mayhem: |
fusop | 0:63db1c7ee975 | 77 | vibflg = 1; |
fusop | 0:63db1c7ee975 | 78 | vib = 1; |
fusop | 0:63db1c7ee975 | 79 | } |
fusop | 0:63db1c7ee975 | 80 | else if (fAlarm == 2) //2nd Stage: Hold |
fusop | 0:63db1c7ee975 | 81 | { |
fusop | 0:63db1c7ee975 | 82 | nAlarm--; |
fusop | 0:63db1c7ee975 | 83 | if (nAlarm == 0) |
fusop | 0:63db1c7ee975 | 84 | { |
fusop | 0:63db1c7ee975 | 85 | oled.DrawBox(0, 15, 96, 15, COLOR_BLACK); //Clear Area |
fusop | 0:63db1c7ee975 | 86 | fAlarm = 0; //Reset Parameters |
fusop | 0:63db1c7ee975 | 87 | nAlarm = 0; |
fusop | 0:63db1c7ee975 | 88 | } |
fusop | 0:63db1c7ee975 | 89 | } |
fusop | 0:63db1c7ee975 | 90 | |
fusop | 0:63db1c7ee975 | 91 | //-------------------------------------------------------------------------- |
fusop | 0:63db1c7ee975 | 92 | // VIBRATION HAPTIC FEEDBACK |
fusop | 0:63db1c7ee975 | 93 | //-------------------------------------------------------------------------- |
fusop | 0:63db1c7ee975 | 94 | if (vibflg == 1) |
fusop | 0:63db1c7ee975 | 95 | { |
fusop | 0:63db1c7ee975 | 96 | if (vAlarm == 0) //Prevent overlapping functions with the above vibration function |
fusop | 0:63db1c7ee975 | 97 | { |
fusop | 0:63db1c7ee975 | 98 | vib = 1; |
fusop | 0:63db1c7ee975 | 99 | vibCount++; |
fusop | 0:63db1c7ee975 | 100 | if (vibCount == 100) |
fusop | 0:63db1c7ee975 | 101 | { |
fusop | 0:63db1c7ee975 | 102 | vibflg = 0; |
fusop | 0:63db1c7ee975 | 103 | vib = 0; |
fusop | 0:63db1c7ee975 | 104 | vibCount = 0; |
fusop | 0:63db1c7ee975 | 105 | } |
fusop | 0:63db1c7ee975 | 106 | } |
fusop | 0:63db1c7ee975 | 107 | else //Just to supress additional vibration |
fusop | 0:63db1c7ee975 | 108 | { |
fusop | 0:63db1c7ee975 | 109 | vAlarm--; |
fusop | 0:63db1c7ee975 | 110 | if (vAlarm == 0) |
fusop | 0:63db1c7ee975 | 111 | { |
fusop | 0:63db1c7ee975 | 112 | vibflg = 0; |
fusop | 0:63db1c7ee975 | 113 | vib = 0; |
fusop | 0:63db1c7ee975 | 114 | vibCount = 0; |
fusop | 0:63db1c7ee975 | 115 | } |
fusop | 0:63db1c7ee975 | 116 | } |
fusop | 0:63db1c7ee975 | 117 | } |
fusop | 0:63db1c7ee975 | 118 | |
fusop | 0:63db1c7ee975 | 119 | masa.start(1); |
fusop | 0:63db1c7ee975 | 120 | } |