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

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?

UserRevisionLine numberNew 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 }