Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SX1276Lib AdaFruit_RGBLCD MCP23017 mbed
Fork of AdaFruit_RGBLCD by
Modules/TimeModule.cpp@11:96146db429de, 2014-08-10 (annotated)
- Committer:
- vtraveller
- Date:
- Sun Aug 10 15:45:03 2014 +0000
- Revision:
- 11:96146db429de
- Parent:
- 10:3fcab08717fc
- Child:
- 13:9641bc42db92
Added support for changing time.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| vtraveller | 10:3fcab08717fc | 1 | #include "mbed.h" |
| vtraveller | 10:3fcab08717fc | 2 | #include "TimeModule.h" |
| vtraveller | 10:3fcab08717fc | 3 | #include "time_helper.h" |
| vtraveller | 10:3fcab08717fc | 4 | |
| vtraveller | 10:3fcab08717fc | 5 | #if 0 |
| vtraveller | 10:3fcab08717fc | 6 | tm sTM; |
| vtraveller | 10:3fcab08717fc | 7 | sTM.tm_sec = 0; |
| vtraveller | 10:3fcab08717fc | 8 | sTM.tm_min = 0; |
| vtraveller | 10:3fcab08717fc | 9 | sTM.tm_hour = 18; |
| vtraveller | 10:3fcab08717fc | 10 | sTM.tm_mday = 9; |
| vtraveller | 10:3fcab08717fc | 11 | sTM.tm_mon = 8 - 1; |
| vtraveller | 10:3fcab08717fc | 12 | sTM.tm_year = 2014 - 1900; |
| vtraveller | 10:3fcab08717fc | 13 | sTM.tm_wday = 6; |
| vtraveller | 10:3fcab08717fc | 14 | |
| vtraveller | 10:3fcab08717fc | 15 | rtc.SetTime(sTM,true); |
| vtraveller | 10:3fcab08717fc | 16 | #endif |
| vtraveller | 10:3fcab08717fc | 17 | |
| vtraveller | 10:3fcab08717fc | 18 | |
| vtraveller | 10:3fcab08717fc | 19 | TimeModule::TimeModule |
| vtraveller | 10:3fcab08717fc | 20 | ( |
| vtraveller | 10:3fcab08717fc | 21 | Adafruit_RGBLCDShield & in_cLCD, |
| vtraveller | 10:3fcab08717fc | 22 | RTclock & in_cRTclock |
| vtraveller | 10:3fcab08717fc | 23 | ) |
| vtraveller | 10:3fcab08717fc | 24 | : Module(in_cLCD) |
| vtraveller | 10:3fcab08717fc | 25 | , m_cRTclock(in_cRTclock) |
| vtraveller | 10:3fcab08717fc | 26 | { |
| vtraveller | 10:3fcab08717fc | 27 | } |
| vtraveller | 10:3fcab08717fc | 28 | |
| vtraveller | 10:3fcab08717fc | 29 | TimeModule::~TimeModule() |
| vtraveller | 10:3fcab08717fc | 30 | { |
| vtraveller | 10:3fcab08717fc | 31 | } |
| vtraveller | 11:96146db429de | 32 | |
| vtraveller | 11:96146db429de | 33 | void TimeModule::change |
| vtraveller | 11:96146db429de | 34 | ( |
| vtraveller | 11:96146db429de | 35 | int in_nIndexX, |
| vtraveller | 11:96146db429de | 36 | int in_nCursorY, |
| vtraveller | 11:96146db429de | 37 | bool in_bUp |
| vtraveller | 11:96146db429de | 38 | ) |
| vtraveller | 11:96146db429de | 39 | { |
| vtraveller | 11:96146db429de | 40 | tm sTM; |
| vtraveller | 10:3fcab08717fc | 41 | |
| vtraveller | 11:96146db429de | 42 | // to get the current time information |
| vtraveller | 11:96146db429de | 43 | if (!m_cRTclock.getTime(sTM)) GetTime(sTM); |
| vtraveller | 11:96146db429de | 44 | bool bTwelveHour = m_cRTclock.isTwelveHour(); |
| vtraveller | 11:96146db429de | 45 | |
| vtraveller | 11:96146db429de | 46 | enum ETime |
| vtraveller | 11:96146db429de | 47 | { |
| vtraveller | 11:96146db429de | 48 | eHourTen = 0, |
| vtraveller | 11:96146db429de | 49 | eHourSingle, |
| vtraveller | 11:96146db429de | 50 | eMinTen, |
| vtraveller | 11:96146db429de | 51 | eMinSingle, |
| vtraveller | 11:96146db429de | 52 | eSecondTen, |
| vtraveller | 11:96146db429de | 53 | eSecondSingle, |
| vtraveller | 11:96146db429de | 54 | eAmPm, |
| vtraveller | 11:96146db429de | 55 | }; |
| vtraveller | 11:96146db429de | 56 | |
| vtraveller | 11:96146db429de | 57 | switch (in_nIndexX) |
| vtraveller | 11:96146db429de | 58 | { |
| vtraveller | 11:96146db429de | 59 | case eHourTen: sTM.tm_hour += (in_bUp ? 1 : -1) * 10; break; |
| vtraveller | 11:96146db429de | 60 | case eHourSingle: sTM.tm_hour += (in_bUp ? 1 : -1); break; |
| vtraveller | 11:96146db429de | 61 | case eMinTen: sTM.tm_min += (in_bUp ? 1 : -1) * 10; break; |
| vtraveller | 11:96146db429de | 62 | case eMinSingle: sTM.tm_min += (in_bUp ? 1 : -1); break; |
| vtraveller | 11:96146db429de | 63 | case eSecondTen: sTM.tm_sec += (in_bUp ? 1 : -1) * 10; break; |
| vtraveller | 11:96146db429de | 64 | case eSecondSingle: sTM.tm_sec += (in_bUp ? 1 : -1); break; |
| vtraveller | 11:96146db429de | 65 | case eAmPm: |
| vtraveller | 11:96146db429de | 66 | if (bTwelveHour) |
| vtraveller | 11:96146db429de | 67 | { |
| vtraveller | 11:96146db429de | 68 | if (in_bUp) |
| vtraveller | 11:96146db429de | 69 | { |
| vtraveller | 11:96146db429de | 70 | if (sTM.tm_hour >= 12) bTwelveHour = !bTwelveHour; else sTM.tm_hour += 12; |
| vtraveller | 11:96146db429de | 71 | } |
| vtraveller | 11:96146db429de | 72 | else |
| vtraveller | 11:96146db429de | 73 | { |
| vtraveller | 11:96146db429de | 74 | if (sTM.tm_hour >= 12) sTM.tm_hour -= 12; else bTwelveHour = !bTwelveHour; |
| vtraveller | 11:96146db429de | 75 | } |
| vtraveller | 11:96146db429de | 76 | } |
| vtraveller | 11:96146db429de | 77 | else |
| vtraveller | 11:96146db429de | 78 | { |
| vtraveller | 11:96146db429de | 79 | bTwelveHour = !bTwelveHour; |
| vtraveller | 11:96146db429de | 80 | if (in_bUp && sTM.tm_hour >= 12) sTM.tm_hour -= 12; |
| vtraveller | 11:96146db429de | 81 | if (!in_bUp && sTM.tm_hour < 12) sTM.tm_hour += 12; |
| vtraveller | 11:96146db429de | 82 | } |
| vtraveller | 11:96146db429de | 83 | break; |
| vtraveller | 11:96146db429de | 84 | } |
| vtraveller | 11:96146db429de | 85 | |
| vtraveller | 11:96146db429de | 86 | if (sTM.tm_hour < 0) sTM.tm_hour = 0; |
| vtraveller | 11:96146db429de | 87 | if (sTM.tm_hour > 23) sTM.tm_hour = 23; |
| vtraveller | 11:96146db429de | 88 | if (sTM.tm_min < 0) sTM.tm_min = 0; |
| vtraveller | 11:96146db429de | 89 | if (sTM.tm_hour > 59) sTM.tm_min = 59; |
| vtraveller | 11:96146db429de | 90 | if (sTM.tm_sec < 0) sTM.tm_sec = 0; |
| vtraveller | 11:96146db429de | 91 | if (sTM.tm_sec > 59) sTM.tm_sec = 59; |
| vtraveller | 11:96146db429de | 92 | |
| vtraveller | 11:96146db429de | 93 | if (m_cRTclock.setTime(sTM,bTwelveHour)) |
| vtraveller | 11:96146db429de | 94 | { |
| vtraveller | 11:96146db429de | 95 | m_cRTclock.mapTime(); |
| vtraveller | 11:96146db429de | 96 | } |
| vtraveller | 11:96146db429de | 97 | else |
| vtraveller | 11:96146db429de | 98 | { |
| vtraveller | 11:96146db429de | 99 | SetTime(sTM); |
| vtraveller | 11:96146db429de | 100 | } |
| vtraveller | 11:96146db429de | 101 | } |
| vtraveller | 11:96146db429de | 102 | |
| vtraveller | 10:3fcab08717fc | 103 | int TimeModule::setCursor |
| vtraveller | 10:3fcab08717fc | 104 | ( |
| vtraveller | 10:3fcab08717fc | 105 | int in_nIndex, |
| vtraveller | 10:3fcab08717fc | 106 | int in_nCursorX, |
| vtraveller | 10:3fcab08717fc | 107 | int in_nCursorY |
| vtraveller | 10:3fcab08717fc | 108 | ) |
| vtraveller | 10:3fcab08717fc | 109 | { |
| vtraveller | 10:3fcab08717fc | 110 | const int k_aCursor[] = { 0, 1, 3, 4, 6, 7, 10 }; |
| vtraveller | 10:3fcab08717fc | 111 | |
| vtraveller | 10:3fcab08717fc | 112 | int nIndex = in_nIndex; |
| vtraveller | 10:3fcab08717fc | 113 | if (nIndex < 0) nIndex = 0; |
| vtraveller | 10:3fcab08717fc | 114 | if (nIndex >= _countof(k_aCursor)) nIndex = _countof(k_aCursor) - 1; |
| vtraveller | 10:3fcab08717fc | 115 | |
| vtraveller | 10:3fcab08717fc | 116 | int nCursorX = k_aCursor[nIndex]; |
| vtraveller | 10:3fcab08717fc | 117 | m_cLCD.setCursor(in_nCursorX + nCursorX,in_nCursorY); |
| vtraveller | 10:3fcab08717fc | 118 | |
| vtraveller | 10:3fcab08717fc | 119 | return nIndex; |
| vtraveller | 10:3fcab08717fc | 120 | } |
| vtraveller | 10:3fcab08717fc | 121 | |
| vtraveller | 10:3fcab08717fc | 122 | void TimeModule::show() |
| vtraveller | 10:3fcab08717fc | 123 | { |
| vtraveller | 10:3fcab08717fc | 124 | tm sTM; |
| vtraveller | 10:3fcab08717fc | 125 | const char * pUnits = " "; |
| vtraveller | 10:3fcab08717fc | 126 | |
| vtraveller | 10:3fcab08717fc | 127 | // to get the current time information |
| vtraveller | 10:3fcab08717fc | 128 | if (m_cRTclock.getTime(sTM)) |
| vtraveller | 10:3fcab08717fc | 129 | { |
| vtraveller | 10:3fcab08717fc | 130 | // Adjust for 12 hour clock |
| vtraveller | 10:3fcab08717fc | 131 | if (m_cRTclock.isTwelveHour()) |
| vtraveller | 10:3fcab08717fc | 132 | { |
| vtraveller | 10:3fcab08717fc | 133 | pUnits = (sTM.tm_hour < 12) ? "am":"pm"; |
| vtraveller | 10:3fcab08717fc | 134 | sTM.tm_hour %= 12; |
| vtraveller | 10:3fcab08717fc | 135 | } |
| vtraveller | 10:3fcab08717fc | 136 | } |
| vtraveller | 10:3fcab08717fc | 137 | else |
| vtraveller | 10:3fcab08717fc | 138 | { |
| vtraveller | 10:3fcab08717fc | 139 | // If failed get internal time (as at least that's something |
| vtraveller | 10:3fcab08717fc | 140 | GetTime(sTM); |
| vtraveller | 10:3fcab08717fc | 141 | } |
| vtraveller | 10:3fcab08717fc | 142 | |
| vtraveller | 10:3fcab08717fc | 143 | m_cLCD.printf ("%02i:%02i:%02i %s ", sTM.tm_hour, sTM.tm_min, sTM.tm_sec, pUnits); |
| vtraveller | 10:3fcab08717fc | 144 | } |
