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.
Fork of FRDM-KL46Z LCD rtc Demo by
main.cpp@3:fb38dbc95b12, 2014-09-27 (annotated)
- Committer:
- salemtang
- Date:
- Sat Sep 27 14:56:06 2014 +0000
- Revision:
- 3:fb38dbc95b12
- Parent:
- 2:678c0be8c23d
- Child:
- 4:15da67d64f85
20140927_2356 modified
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
salemtang | 2:678c0be8c23d | 1 | //_____________________________________________________________// |
salemtang | 2:678c0be8c23d | 2 | //======== INCLUDES ===========================================// |
salemtang | 2:678c0be8c23d | 3 | //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// |
star297 | 0:4f67859595b2 | 4 | #include "mbed.h" |
star297 | 0:4f67859595b2 | 5 | #include "SLCD.h" |
star297 | 0:4f67859595b2 | 6 | |
salemtang | 2:678c0be8c23d | 7 | //_____________________________________________________________// |
salemtang | 2:678c0be8c23d | 8 | //======== DEFINES ============================================// |
salemtang | 2:678c0be8c23d | 9 | //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// |
salemtang | 3:fb38dbc95b12 | 10 | #define PWMDWELL 50 // milliseconds |
salemtang | 3:fb38dbc95b12 | 11 | #define DFDELTA 0.01 |
salemtang | 3:fb38dbc95b12 | 12 | |
salemtang | 3:fb38dbc95b12 | 13 | //_____________________________________________________________// |
salemtang | 3:fb38dbc95b12 | 14 | //======== MACROS =============================================// |
salemtang | 3:fb38dbc95b12 | 15 | //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// |
star297 | 0:4f67859595b2 | 16 | |
salemtang | 2:678c0be8c23d | 17 | //_____________________________________________________________// |
salemtang | 2:678c0be8c23d | 18 | //======== PROTOTYPES =========================================// |
salemtang | 2:678c0be8c23d | 19 | //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// |
salemtang | 3:fb38dbc95b12 | 20 | void initializeSetting (void); |
salemtang | 3:fb38dbc95b12 | 21 | void ledBlink (float dutyfactor); |
salemtang | 3:fb38dbc95b12 | 22 | void rtcClock (void); |
salemtang | 3:fb38dbc95b12 | 23 | void scrollMessage (void); |
salemtang | 3:fb38dbc95b12 | 24 | void switchinput1_INTIRQ (void); |
salemtang | 3:fb38dbc95b12 | 25 | void switchinput3_INTIRQ (void); |
salemtang | 3:fb38dbc95b12 | 26 | |
salemtang | 3:fb38dbc95b12 | 27 | //_____________________________________________________________// |
salemtang | 3:fb38dbc95b12 | 28 | //======== TABLES =============================================// |
salemtang | 3:fb38dbc95b12 | 29 | //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// |
salemtang | 2:678c0be8c23d | 30 | |
salemtang | 2:678c0be8c23d | 31 | //_____________________________________________________________// |
salemtang | 2:678c0be8c23d | 32 | //======== VARIABLES ==========================================// |
salemtang | 2:678c0be8c23d | 33 | //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// |
salemtang | 3:fb38dbc95b12 | 34 | DigitalOut greenled_DO(LED1); |
salemtang | 3:fb38dbc95b12 | 35 | DigitalOut redled_DO(LED2); |
salemtang | 3:fb38dbc95b12 | 36 | PwmOut greenled_PO(LED1); |
salemtang | 3:fb38dbc95b12 | 37 | PwmOut redled_PO(LED2); |
salemtang | 3:fb38dbc95b12 | 38 | DigitalIn switchinput1_DI(SW1); |
salemtang | 3:fb38dbc95b12 | 39 | DigitalIn switchinput3_DI(SW3); |
salemtang | 3:fb38dbc95b12 | 40 | InterruptIn switchinput1_INT(SW1); |
salemtang | 3:fb38dbc95b12 | 41 | InterruptIn switchinput3_INT(SW3); |
star297 | 0:4f67859595b2 | 42 | SLCD slcd; |
star297 | 0:4f67859595b2 | 43 | Timer scroll; |
star297 | 0:4f67859595b2 | 44 | struct tm t; |
salemtang | 2:678c0be8c23d | 45 | int i, j, k, lastscroll, display_timer, minute, hour, colon, dp; |
star297 | 1:34f0bfc62803 | 46 | char message[60]; |
star297 | 0:4f67859595b2 | 47 | char buffer[32]; |
salemtang | 3:fb38dbc95b12 | 48 | float defaultdutyfactor = 0.0; |
star297 | 0:4f67859595b2 | 49 | |
salemtang | 2:678c0be8c23d | 50 | //_____________________________________________________________// |
salemtang | 2:678c0be8c23d | 51 | //======== MAIN() =============================================// |
salemtang | 2:678c0be8c23d | 52 | //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// |
salemtang | 2:678c0be8c23d | 53 | int main () |
star297 | 1:34f0bfc62803 | 54 | { |
salemtang | 3:fb38dbc95b12 | 55 | initializeSetting(); |
salemtang | 2:678c0be8c23d | 56 | |
salemtang | 3:fb38dbc95b12 | 57 | while (true) { |
salemtang | 3:fb38dbc95b12 | 58 | rtcClock(); |
salemtang | 3:fb38dbc95b12 | 59 | |
salemtang | 3:fb38dbc95b12 | 60 | if (!switchinput1_DI) { |
salemtang | 3:fb38dbc95b12 | 61 | ledBlink(1.0); |
salemtang | 3:fb38dbc95b12 | 62 | } else if (!switchinput3_DI) { |
salemtang | 3:fb38dbc95b12 | 63 | ledBlink(10.0); |
star297 | 1:34f0bfc62803 | 64 | } else { |
star297 | 0:4f67859595b2 | 65 | } |
star297 | 0:4f67859595b2 | 66 | } |
star297 | 1:34f0bfc62803 | 67 | } |
star297 | 0:4f67859595b2 | 68 | |
salemtang | 2:678c0be8c23d | 69 | //_____________________________________________________________// |
salemtang | 2:678c0be8c23d | 70 | //======== FUNC() =============================================// |
salemtang | 2:678c0be8c23d | 71 | //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// |
salemtang | 3:fb38dbc95b12 | 72 | //! ------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 73 | //! @brief Initialize Setting |
salemtang | 3:fb38dbc95b12 | 74 | //! @[in] nil |
salemtang | 3:fb38dbc95b12 | 75 | //! @retval nil |
salemtang | 3:fb38dbc95b12 | 76 | //! ------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 77 | void initializeSetting (void) |
salemtang | 3:fb38dbc95b12 | 78 | { |
salemtang | 3:fb38dbc95b12 | 79 | time_t seconds = time(NULL); |
salemtang | 3:fb38dbc95b12 | 80 | |
salemtang | 3:fb38dbc95b12 | 81 | switchinput1_DI.mode(PullUp); |
salemtang | 3:fb38dbc95b12 | 82 | switchinput3_DI.mode(PullUp); |
salemtang | 3:fb38dbc95b12 | 83 | |
salemtang | 3:fb38dbc95b12 | 84 | slcd.All_Segments(1); |
salemtang | 3:fb38dbc95b12 | 85 | wait(2); |
salemtang | 3:fb38dbc95b12 | 86 | slcd.All_Segments(0); |
salemtang | 3:fb38dbc95b12 | 87 | wait(1); |
salemtang | 3:fb38dbc95b12 | 88 | |
salemtang | 3:fb38dbc95b12 | 89 | greenled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 90 | redled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 91 | |
salemtang | 3:fb38dbc95b12 | 92 | sprintf(message, " rtc clock s3 sets the hours s1 sets the minutes"); |
salemtang | 3:fb38dbc95b12 | 93 | |
salemtang | 3:fb38dbc95b12 | 94 | // scrolling message |
salemtang | 3:fb38dbc95b12 | 95 | scroll.start(); |
salemtang | 3:fb38dbc95b12 | 96 | while (i < 58) { |
salemtang | 3:fb38dbc95b12 | 97 | while (i < 58) { |
salemtang | 3:fb38dbc95b12 | 98 | scrollMessage(); |
salemtang | 3:fb38dbc95b12 | 99 | } |
salemtang | 3:fb38dbc95b12 | 100 | } |
salemtang | 3:fb38dbc95b12 | 101 | wait(1); |
salemtang | 3:fb38dbc95b12 | 102 | |
salemtang | 3:fb38dbc95b12 | 103 | switchinput1_INT.rise(switchinput1_INTIRQ); // start set Minutes IRQ |
salemtang | 3:fb38dbc95b12 | 104 | switchinput3_INT.rise(switchinput3_INTIRQ); // start set Hours IRQ |
salemtang | 3:fb38dbc95b12 | 105 | } |
salemtang | 3:fb38dbc95b12 | 106 | |
salemtang | 3:fb38dbc95b12 | 107 | //! ------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 108 | //! @brief LED Blink |
salemtang | 3:fb38dbc95b12 | 109 | //! @[in] dutyfactor Duty Factor |
salemtang | 3:fb38dbc95b12 | 110 | //! @retval nil |
salemtang | 3:fb38dbc95b12 | 111 | //! ------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 112 | void ledBlink (float dutyfactor) |
salemtang | 3:fb38dbc95b12 | 113 | { |
salemtang | 3:fb38dbc95b12 | 114 | redled_PO.write(defaultdutyfactor); |
salemtang | 3:fb38dbc95b12 | 115 | greenled_PO.write(dutyfactor - defaultdutyfactor); |
salemtang | 3:fb38dbc95b12 | 116 | defaultdutyfactor += DFDELTA; |
salemtang | 3:fb38dbc95b12 | 117 | if (defaultdutyfactor >= dutyfactor) defaultdutyfactor = 0.0; |
salemtang | 3:fb38dbc95b12 | 118 | wait_ms(PWMDWELL); |
salemtang | 3:fb38dbc95b12 | 119 | } |
salemtang | 3:fb38dbc95b12 | 120 | |
salemtang | 3:fb38dbc95b12 | 121 | //! ------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 122 | //! @brief RTC Clock |
salemtang | 3:fb38dbc95b12 | 123 | //! @[in] nil |
salemtang | 3:fb38dbc95b12 | 124 | //! @retval nil |
salemtang | 3:fb38dbc95b12 | 125 | //! ------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 126 | void rtcClock (void) |
salemtang | 3:fb38dbc95b12 | 127 | { |
salemtang | 3:fb38dbc95b12 | 128 | time_t seconds = time(NULL); |
salemtang | 3:fb38dbc95b12 | 129 | |
salemtang | 3:fb38dbc95b12 | 130 | if (display_timer > 6) { |
salemtang | 3:fb38dbc95b12 | 131 | strftime(buffer, 4, "%H%M", localtime(&seconds)); // display Hours,Minutes for 2 seconds |
salemtang | 3:fb38dbc95b12 | 132 | slcd.Colon(1); |
salemtang | 3:fb38dbc95b12 | 133 | redled_DO = 0; |
salemtang | 3:fb38dbc95b12 | 134 | slcd.DP2(0); |
salemtang | 3:fb38dbc95b12 | 135 | greenled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 136 | } else { |
salemtang | 3:fb38dbc95b12 | 137 | strftime(buffer, 4, "%M%S", localtime(&seconds)); // display Minutes,Seconds for 8 seconds |
salemtang | 3:fb38dbc95b12 | 138 | slcd.Colon(0); |
salemtang | 3:fb38dbc95b12 | 139 | redled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 140 | slcd.DP2(1); |
salemtang | 3:fb38dbc95b12 | 141 | greenled_DO = 0; |
salemtang | 3:fb38dbc95b12 | 142 | } |
salemtang | 3:fb38dbc95b12 | 143 | |
salemtang | 3:fb38dbc95b12 | 144 | slcd.printf(buffer); |
salemtang | 3:fb38dbc95b12 | 145 | wait(0.5); |
salemtang | 3:fb38dbc95b12 | 146 | slcd.DP2(0); |
salemtang | 3:fb38dbc95b12 | 147 | greenled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 148 | display_timer++; |
salemtang | 3:fb38dbc95b12 | 149 | if (display_timer > 9) display_timer = 0; |
salemtang | 3:fb38dbc95b12 | 150 | wait(0.5); |
salemtang | 3:fb38dbc95b12 | 151 | } |
salemtang | 3:fb38dbc95b12 | 152 | |
salemtang | 3:fb38dbc95b12 | 153 | //! ------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 154 | //! @brief Scroll Message |
salemtang | 3:fb38dbc95b12 | 155 | //! @[in] nil |
salemtang | 3:fb38dbc95b12 | 156 | //! @retval nil |
salemtang | 3:fb38dbc95b12 | 157 | //! ------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 158 | void scrollMessage (void) |
star297 | 0:4f67859595b2 | 159 | { |
star297 | 1:34f0bfc62803 | 160 | if (scroll.read_ms() > lastscroll + 350) { |
star297 | 0:4f67859595b2 | 161 | scroll.reset(); |
star297 | 1:34f0bfc62803 | 162 | if (i > 58) { |
star297 | 0:4f67859595b2 | 163 | i=0; |
star297 | 0:4f67859595b2 | 164 | } |
star297 | 0:4f67859595b2 | 165 | int j, k = i; |
star297 | 0:4f67859595b2 | 166 | for (j = 0; j < 4; j++) { |
star297 | 0:4f67859595b2 | 167 | if (message[k+j]) { |
star297 | 0:4f67859595b2 | 168 | slcd.putc(message[k+j]); |
star297 | 0:4f67859595b2 | 169 | } else { |
star297 | 0:4f67859595b2 | 170 | slcd.putc(' '); |
star297 | 0:4f67859595b2 | 171 | k--; |
star297 | 0:4f67859595b2 | 172 | } |
star297 | 0:4f67859595b2 | 173 | } |
star297 | 0:4f67859595b2 | 174 | i++; |
salemtang | 2:678c0be8c23d | 175 | lastscroll = scroll.read_ms(); |
star297 | 0:4f67859595b2 | 176 | } |
star297 | 0:4f67859595b2 | 177 | } |
salemtang | 3:fb38dbc95b12 | 178 | //! ------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 179 | //! @brief Set Minutes ISR |
salemtang | 3:fb38dbc95b12 | 180 | //! @[in] nil |
salemtang | 3:fb38dbc95b12 | 181 | //! @retval nil |
salemtang | 3:fb38dbc95b12 | 182 | //! ------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 183 | void switchinput1_INTIRQ (void) |
star297 | 0:4f67859595b2 | 184 | { |
salemtang | 2:678c0be8c23d | 185 | display_timer = 7; |
star297 | 0:4f67859595b2 | 186 | time_t seconds = time(NULL); |
star297 | 1:34f0bfc62803 | 187 | char buffer[2]; |
star297 | 0:4f67859595b2 | 188 | strftime(buffer, 2,"%H", localtime(&seconds)); |
star297 | 1:34f0bfc62803 | 189 | hour = atoi(buffer); // get Hour integer |
star297 | 0:4f67859595b2 | 190 | strftime(buffer, 2,"%M", localtime(&seconds)); |
salemtang | 2:678c0be8c23d | 191 | minute = atoi(buffer); // get Minutes integer |
star297 | 0:4f67859595b2 | 192 | minute++; |
salemtang | 2:678c0be8c23d | 193 | if (minute > 59) minute = 0; |
salemtang | 2:678c0be8c23d | 194 | t.tm_sec = 0; // Seconds reset to zero |
star297 | 1:34f0bfc62803 | 195 | t.tm_min = minute; |
star297 | 1:34f0bfc62803 | 196 | t.tm_hour = hour; |
star297 | 1:34f0bfc62803 | 197 | t.tm_mday = 1; |
star297 | 1:34f0bfc62803 | 198 | t.tm_mon = 2; |
star297 | 1:34f0bfc62803 | 199 | t.tm_year = 114; |
salemtang | 2:678c0be8c23d | 200 | set_time(mktime(&t)); |
star297 | 0:4f67859595b2 | 201 | } |
star297 | 0:4f67859595b2 | 202 | |
salemtang | 3:fb38dbc95b12 | 203 | //! ------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 204 | //! @brief Set Hours ISR |
salemtang | 3:fb38dbc95b12 | 205 | //! @[in] nil |
salemtang | 3:fb38dbc95b12 | 206 | //! @retval nil |
salemtang | 3:fb38dbc95b12 | 207 | //! ------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 208 | void switchinput3_INTIRQ (void) |
star297 | 0:4f67859595b2 | 209 | { |
salemtang | 2:678c0be8c23d | 210 | display_timer = 7; |
star297 | 0:4f67859595b2 | 211 | time_t seconds = time(NULL); |
star297 | 0:4f67859595b2 | 212 | char buffer[2]; |
star297 | 1:34f0bfc62803 | 213 | strftime(buffer, 2,"%H", localtime(&seconds)); |
star297 | 1:34f0bfc62803 | 214 | hour = atoi(buffer); // get Hour integer |
star297 | 0:4f67859595b2 | 215 | strftime(buffer, 2,"%M", localtime(&seconds)); |
salemtang | 2:678c0be8c23d | 216 | minute = atoi(buffer); // get Minutes integer |
star297 | 0:4f67859595b2 | 217 | hour++; |
salemtang | 2:678c0be8c23d | 218 | if (hour > 23) hour = 0; |
salemtang | 2:678c0be8c23d | 219 | t.tm_sec = 0; // Seconds reset to zero |
star297 | 1:34f0bfc62803 | 220 | t.tm_min = minute; |
star297 | 1:34f0bfc62803 | 221 | t.tm_hour = hour; |
star297 | 1:34f0bfc62803 | 222 | t.tm_mday = 1; |
star297 | 1:34f0bfc62803 | 223 | t.tm_mon = 2; |
star297 | 1:34f0bfc62803 | 224 | t.tm_year = 114; |
salemtang | 2:678c0be8c23d | 225 | set_time(mktime(&t)); |
star297 | 0:4f67859595b2 | 226 | } |