FRDM-KL46Z board sLCD demo code
Fork of FRDM-KL46Z LCD rtc Demo by
main.cpp@7:33a8bfcbe3be, 2014-09-29 (annotated)
- Committer:
- salemtang
- Date:
- Mon Sep 29 15:55:03 2014 +0000
- Revision:
- 7:33a8bfcbe3be
- Parent:
- 6:10b73ebdba3d
- Child:
- 8:18e86eb228ca
20140930_0055 modified
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
salemtang | 6:10b73ebdba3d | 1 | /** |
salemtang | 6:10b73ebdba3d | 2 | * @file main.cpp |
salemtang | 6:10b73ebdba3d | 3 | * @brief Abstract |
salemtang | 6:10b73ebdba3d | 4 | * @copyright (c) |
salemtang | 6:10b73ebdba3d | 5 | */ |
salemtang | 6:10b73ebdba3d | 6 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 7 | // note |
salemtang | 6:10b73ebdba3d | 8 | // ----------------------------------------------------------------------------- |
salemtang | 4:15da67d64f85 | 9 | |
salemtang | 6:10b73ebdba3d | 10 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 11 | // include files |
salemtang | 6:10b73ebdba3d | 12 | // ----------------------------------------------------------------------------- |
salemtang | 7:33a8bfcbe3be | 13 | #include "main.h" |
salemtang | 4:15da67d64f85 | 14 | #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) |
star297 | 0:4f67859595b2 | 15 | #include "mbed.h" |
salemtang | 6:10b73ebdba3d | 16 | #endif // RTC_CLOCK_TEST || LED_BLINK_TEST |
salemtang | 4:15da67d64f85 | 17 | #ifdef RTC_CLOCK_TEST |
star297 | 0:4f67859595b2 | 18 | #include "SLCD.h" |
salemtang | 6:10b73ebdba3d | 19 | #endif // RTC_CLOCK_TEST |
salemtang | 6:10b73ebdba3d | 20 | |
salemtang | 6:10b73ebdba3d | 21 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 22 | // general define |
salemtang | 6:10b73ebdba3d | 23 | // ----------------------------------------------------------------------------- |
star297 | 0:4f67859595b2 | 24 | |
salemtang | 6:10b73ebdba3d | 25 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 26 | // struct define |
salemtang | 6:10b73ebdba3d | 27 | // ----------------------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 28 | |
salemtang | 6:10b73ebdba3d | 29 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 30 | // external function |
salemtang | 6:10b73ebdba3d | 31 | // ----------------------------------------------------------------------------- |
star297 | 0:4f67859595b2 | 32 | |
salemtang | 6:10b73ebdba3d | 33 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 34 | // function prototype |
salemtang | 6:10b73ebdba3d | 35 | // ----------------------------------------------------------------------------- |
salemtang | 4:15da67d64f85 | 36 | #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) |
salemtang | 3:fb38dbc95b12 | 37 | void initializeSetting (void); |
salemtang | 6:10b73ebdba3d | 38 | #endif // RTC_CLOCK_TEST || LED_BLINK_TEST |
salemtang | 4:15da67d64f85 | 39 | #ifdef LED_BLINK_TEST |
salemtang | 3:fb38dbc95b12 | 40 | void ledBlink (float dutyfactor); |
salemtang | 6:10b73ebdba3d | 41 | #endif // LED_BLINK_TEST |
salemtang | 4:15da67d64f85 | 42 | #ifdef RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 43 | void rtcClock (void); |
salemtang | 3:fb38dbc95b12 | 44 | void scrollMessage (void); |
salemtang | 3:fb38dbc95b12 | 45 | void switchinput1_INTIRQ (void); |
salemtang | 3:fb38dbc95b12 | 46 | void switchinput3_INTIRQ (void); |
salemtang | 6:10b73ebdba3d | 47 | #endif // LED_BLINK_TEST |
salemtang | 3:fb38dbc95b12 | 48 | |
salemtang | 6:10b73ebdba3d | 49 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 50 | // external variable |
salemtang | 6:10b73ebdba3d | 51 | // ----------------------------------------------------------------------------- |
salemtang | 2:678c0be8c23d | 52 | |
salemtang | 6:10b73ebdba3d | 53 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 54 | // global variable |
salemtang | 6:10b73ebdba3d | 55 | // ----------------------------------------------------------------------------- |
salemtang | 4:15da67d64f85 | 56 | #ifdef LED_BLINK_TEST |
salemtang | 3:fb38dbc95b12 | 57 | PwmOut greenled_PO(LED1); |
salemtang | 3:fb38dbc95b12 | 58 | PwmOut redled_PO(LED2); |
salemtang | 3:fb38dbc95b12 | 59 | DigitalIn switchinput1_DI(SW1); |
salemtang | 3:fb38dbc95b12 | 60 | DigitalIn switchinput3_DI(SW3); |
salemtang | 4:15da67d64f85 | 61 | float defaultdutyfactor = 0.0; |
salemtang | 6:10b73ebdba3d | 62 | #endif // LED_BLINK_TEST |
salemtang | 4:15da67d64f85 | 63 | #ifdef RTC_CLOCK_TEST |
salemtang | 4:15da67d64f85 | 64 | DigitalOut greenled_DO(LED1); |
salemtang | 4:15da67d64f85 | 65 | DigitalOut redled_DO(LED2); |
salemtang | 3:fb38dbc95b12 | 66 | InterruptIn switchinput1_INT(SW1); |
salemtang | 3:fb38dbc95b12 | 67 | InterruptIn switchinput3_INT(SW3); |
star297 | 0:4f67859595b2 | 68 | SLCD slcd; |
star297 | 0:4f67859595b2 | 69 | Timer scroll; |
star297 | 0:4f67859595b2 | 70 | struct tm t; |
salemtang | 2:678c0be8c23d | 71 | int i, j, k, lastscroll, display_timer, minute, hour, colon, dp; |
star297 | 1:34f0bfc62803 | 72 | char message[60]; |
star297 | 0:4f67859595b2 | 73 | char buffer[32]; |
salemtang | 6:10b73ebdba3d | 74 | #endif // RTC_CLOCK_TEST |
star297 | 0:4f67859595b2 | 75 | |
salemtang | 6:10b73ebdba3d | 76 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 77 | // function |
salemtang | 6:10b73ebdba3d | 78 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 79 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 80 | //! @brief Main Function |
salemtang | 6:10b73ebdba3d | 81 | //! @param [in] nil |
salemtang | 6:10b73ebdba3d | 82 | //! @retval int |
salemtang | 6:10b73ebdba3d | 83 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 84 | int main (void) |
star297 | 1:34f0bfc62803 | 85 | { |
salemtang | 4:15da67d64f85 | 86 | #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) |
salemtang | 3:fb38dbc95b12 | 87 | initializeSetting(); |
salemtang | 6:10b73ebdba3d | 88 | #endif // RTC_CLOCK_TEST || LED_BLINK_TEST |
salemtang | 2:678c0be8c23d | 89 | |
salemtang | 3:fb38dbc95b12 | 90 | while (true) { |
salemtang | 4:15da67d64f85 | 91 | #ifdef RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 92 | rtcClock(); |
salemtang | 6:10b73ebdba3d | 93 | #endif // RTC_CLOCK_TEST |
salemtang | 4:15da67d64f85 | 94 | |
salemtang | 4:15da67d64f85 | 95 | #ifdef LED_BLINK_TEST |
salemtang | 3:fb38dbc95b12 | 96 | if (!switchinput1_DI) { |
salemtang | 4:15da67d64f85 | 97 | ledBlink(0.5); |
salemtang | 4:15da67d64f85 | 98 | } else if (!switchinput3_DI) { |
salemtang | 3:fb38dbc95b12 | 99 | ledBlink(1.0); |
star297 | 1:34f0bfc62803 | 100 | } else { |
salemtang | 4:15da67d64f85 | 101 | ledBlink(2.0); |
star297 | 0:4f67859595b2 | 102 | } |
salemtang | 6:10b73ebdba3d | 103 | #endif // LED_BLINK_TEST |
star297 | 0:4f67859595b2 | 104 | } |
star297 | 1:34f0bfc62803 | 105 | } |
star297 | 0:4f67859595b2 | 106 | |
salemtang | 6:10b73ebdba3d | 107 | // ----------------------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 108 | //! @brief Initialize Setting |
salemtang | 6:10b73ebdba3d | 109 | //! @param [in] nil |
salemtang | 3:fb38dbc95b12 | 110 | //! @retval nil |
salemtang | 6:10b73ebdba3d | 111 | // ----------------------------------------------------------------------------- |
salemtang | 4:15da67d64f85 | 112 | #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) |
salemtang | 3:fb38dbc95b12 | 113 | void initializeSetting (void) |
salemtang | 3:fb38dbc95b12 | 114 | { |
salemtang | 4:15da67d64f85 | 115 | #ifdef LED_BLINK_TEST |
salemtang | 3:fb38dbc95b12 | 116 | switchinput1_DI.mode(PullUp); |
salemtang | 3:fb38dbc95b12 | 117 | switchinput3_DI.mode(PullUp); |
salemtang | 6:10b73ebdba3d | 118 | #endif // LED_BLINK_TEST |
salemtang | 4:15da67d64f85 | 119 | |
salemtang | 4:15da67d64f85 | 120 | #ifdef RTC_CLOCK_TEST |
salemtang | 4:15da67d64f85 | 121 | time_t seconds = time(NULL); |
salemtang | 3:fb38dbc95b12 | 122 | |
salemtang | 3:fb38dbc95b12 | 123 | slcd.All_Segments(1); |
salemtang | 3:fb38dbc95b12 | 124 | wait(2); |
salemtang | 3:fb38dbc95b12 | 125 | slcd.All_Segments(0); |
salemtang | 3:fb38dbc95b12 | 126 | wait(1); |
salemtang | 3:fb38dbc95b12 | 127 | |
salemtang | 3:fb38dbc95b12 | 128 | greenled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 129 | redled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 130 | |
salemtang | 4:15da67d64f85 | 131 | sprintf(message, " rtc clock sw3 sets the hours sw1 sets the minutes"); |
salemtang | 3:fb38dbc95b12 | 132 | |
salemtang | 3:fb38dbc95b12 | 133 | // scrolling message |
salemtang | 3:fb38dbc95b12 | 134 | scroll.start(); |
salemtang | 3:fb38dbc95b12 | 135 | while (i < 58) { |
salemtang | 3:fb38dbc95b12 | 136 | while (i < 58) { |
salemtang | 3:fb38dbc95b12 | 137 | scrollMessage(); |
salemtang | 3:fb38dbc95b12 | 138 | } |
salemtang | 3:fb38dbc95b12 | 139 | } |
salemtang | 3:fb38dbc95b12 | 140 | wait(1); |
salemtang | 3:fb38dbc95b12 | 141 | |
salemtang | 5:15c484c41006 | 142 | switchinput1_INT.rise(switchinput1_INTIRQ); |
salemtang | 5:15c484c41006 | 143 | switchinput3_INT.rise(switchinput3_INTIRQ); |
salemtang | 6:10b73ebdba3d | 144 | #endif // RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 145 | } |
salemtang | 6:10b73ebdba3d | 146 | #endif // RTC_CLOCK_TEST || LED_BLINK_TEST |
salemtang | 3:fb38dbc95b12 | 147 | |
salemtang | 6:10b73ebdba3d | 148 | // ----------------------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 149 | //! @brief LED Blink |
salemtang | 6:10b73ebdba3d | 150 | //! @param [in] dutyfactor Duty Factor Integer |
salemtang | 3:fb38dbc95b12 | 151 | //! @retval nil |
salemtang | 6:10b73ebdba3d | 152 | // ----------------------------------------------------------------------------- |
salemtang | 4:15da67d64f85 | 153 | #ifdef LED_BLINK_TEST |
salemtang | 3:fb38dbc95b12 | 154 | void ledBlink (float dutyfactor) |
salemtang | 3:fb38dbc95b12 | 155 | { |
salemtang | 3:fb38dbc95b12 | 156 | redled_PO.write(defaultdutyfactor); |
salemtang | 3:fb38dbc95b12 | 157 | greenled_PO.write(dutyfactor - defaultdutyfactor); |
salemtang | 6:10b73ebdba3d | 158 | defaultdutyfactor += 0.01; |
salemtang | 3:fb38dbc95b12 | 159 | if (defaultdutyfactor >= dutyfactor) defaultdutyfactor = 0.0; |
salemtang | 6:10b73ebdba3d | 160 | wait(0.5); |
salemtang | 3:fb38dbc95b12 | 161 | } |
salemtang | 4:15da67d64f85 | 162 | #endif |
salemtang | 3:fb38dbc95b12 | 163 | |
salemtang | 6:10b73ebdba3d | 164 | // ----------------------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 165 | //! @brief RTC Clock |
salemtang | 6:10b73ebdba3d | 166 | //! @param [in] nil |
salemtang | 3:fb38dbc95b12 | 167 | //! @retval nil |
salemtang | 6:10b73ebdba3d | 168 | // ----------------------------------------------------------------------------- |
salemtang | 4:15da67d64f85 | 169 | #ifdef RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 170 | void rtcClock (void) |
salemtang | 3:fb38dbc95b12 | 171 | { |
salemtang | 3:fb38dbc95b12 | 172 | time_t seconds = time(NULL); |
salemtang | 3:fb38dbc95b12 | 173 | |
salemtang | 3:fb38dbc95b12 | 174 | if (display_timer > 6) { |
salemtang | 5:15c484c41006 | 175 | // display Hours,Minutes for 2 seconds |
salemtang | 5:15c484c41006 | 176 | strftime(buffer, 4, "%H%M", localtime(&seconds)); |
salemtang | 3:fb38dbc95b12 | 177 | slcd.Colon(1); |
salemtang | 3:fb38dbc95b12 | 178 | redled_DO = 0; |
salemtang | 3:fb38dbc95b12 | 179 | slcd.DP2(0); |
salemtang | 3:fb38dbc95b12 | 180 | greenled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 181 | } else { |
salemtang | 5:15c484c41006 | 182 | // display Minutes,Seconds for 8 seconds |
salemtang | 5:15c484c41006 | 183 | strftime(buffer, 4, "%M%S", localtime(&seconds)); |
salemtang | 3:fb38dbc95b12 | 184 | slcd.Colon(0); |
salemtang | 3:fb38dbc95b12 | 185 | redled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 186 | slcd.DP2(1); |
salemtang | 3:fb38dbc95b12 | 187 | greenled_DO = 0; |
salemtang | 3:fb38dbc95b12 | 188 | } |
salemtang | 3:fb38dbc95b12 | 189 | |
salemtang | 3:fb38dbc95b12 | 190 | slcd.printf(buffer); |
salemtang | 3:fb38dbc95b12 | 191 | wait(0.5); |
salemtang | 3:fb38dbc95b12 | 192 | slcd.DP2(0); |
salemtang | 3:fb38dbc95b12 | 193 | greenled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 194 | display_timer++; |
salemtang | 3:fb38dbc95b12 | 195 | if (display_timer > 9) display_timer = 0; |
salemtang | 3:fb38dbc95b12 | 196 | wait(0.5); |
salemtang | 3:fb38dbc95b12 | 197 | } |
salemtang | 6:10b73ebdba3d | 198 | #endif // RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 199 | |
salemtang | 6:10b73ebdba3d | 200 | // ----------------------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 201 | //! @brief Scroll Message |
salemtang | 6:10b73ebdba3d | 202 | //! @param [in] nil |
salemtang | 3:fb38dbc95b12 | 203 | //! @retval nil |
salemtang | 6:10b73ebdba3d | 204 | // ----------------------------------------------------------------------------- |
salemtang | 4:15da67d64f85 | 205 | #ifdef RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 206 | void scrollMessage (void) |
star297 | 0:4f67859595b2 | 207 | { |
star297 | 1:34f0bfc62803 | 208 | if (scroll.read_ms() > lastscroll + 350) { |
star297 | 0:4f67859595b2 | 209 | scroll.reset(); |
star297 | 1:34f0bfc62803 | 210 | if (i > 58) { |
salemtang | 4:15da67d64f85 | 211 | i = 0; |
star297 | 0:4f67859595b2 | 212 | } |
star297 | 0:4f67859595b2 | 213 | int j, k = i; |
star297 | 0:4f67859595b2 | 214 | for (j = 0; j < 4; j++) { |
star297 | 0:4f67859595b2 | 215 | if (message[k+j]) { |
star297 | 0:4f67859595b2 | 216 | slcd.putc(message[k+j]); |
star297 | 0:4f67859595b2 | 217 | } else { |
star297 | 0:4f67859595b2 | 218 | slcd.putc(' '); |
star297 | 0:4f67859595b2 | 219 | k--; |
star297 | 0:4f67859595b2 | 220 | } |
star297 | 0:4f67859595b2 | 221 | } |
star297 | 0:4f67859595b2 | 222 | i++; |
salemtang | 2:678c0be8c23d | 223 | lastscroll = scroll.read_ms(); |
star297 | 0:4f67859595b2 | 224 | } |
star297 | 0:4f67859595b2 | 225 | } |
salemtang | 6:10b73ebdba3d | 226 | #endif // RTC_CLOCK_TEST |
salemtang | 4:15da67d64f85 | 227 | |
salemtang | 6:10b73ebdba3d | 228 | // ----------------------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 229 | //! @brief Set Minutes ISR |
salemtang | 6:10b73ebdba3d | 230 | //! @param [in] nil |
salemtang | 3:fb38dbc95b12 | 231 | //! @retval nil |
salemtang | 6:10b73ebdba3d | 232 | // ----------------------------------------------------------------------------- |
salemtang | 4:15da67d64f85 | 233 | #ifdef RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 234 | void switchinput1_INTIRQ (void) |
star297 | 0:4f67859595b2 | 235 | { |
salemtang | 2:678c0be8c23d | 236 | display_timer = 7; |
star297 | 0:4f67859595b2 | 237 | time_t seconds = time(NULL); |
star297 | 1:34f0bfc62803 | 238 | char buffer[2]; |
star297 | 0:4f67859595b2 | 239 | strftime(buffer, 2,"%H", localtime(&seconds)); |
salemtang | 6:10b73ebdba3d | 240 | hour = atoi(buffer); // get Hour integer |
star297 | 0:4f67859595b2 | 241 | strftime(buffer, 2,"%M", localtime(&seconds)); |
salemtang | 6:10b73ebdba3d | 242 | minute = atoi(buffer); // get Minutes integer |
star297 | 0:4f67859595b2 | 243 | minute++; |
salemtang | 2:678c0be8c23d | 244 | if (minute > 59) minute = 0; |
salemtang | 6:10b73ebdba3d | 245 | t.tm_sec = 0; // Seconds reset to zero |
star297 | 1:34f0bfc62803 | 246 | t.tm_min = minute; |
star297 | 1:34f0bfc62803 | 247 | t.tm_hour = hour; |
star297 | 1:34f0bfc62803 | 248 | t.tm_mday = 1; |
star297 | 1:34f0bfc62803 | 249 | t.tm_mon = 2; |
star297 | 1:34f0bfc62803 | 250 | t.tm_year = 114; |
salemtang | 2:678c0be8c23d | 251 | set_time(mktime(&t)); |
star297 | 0:4f67859595b2 | 252 | } |
salemtang | 6:10b73ebdba3d | 253 | #endif // RTC_CLOCK_TEST |
star297 | 0:4f67859595b2 | 254 | |
salemtang | 6:10b73ebdba3d | 255 | // ----------------------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 256 | //! @brief Set Hours ISR |
salemtang | 6:10b73ebdba3d | 257 | //! @param [in] nil |
salemtang | 3:fb38dbc95b12 | 258 | //! @retval nil |
salemtang | 6:10b73ebdba3d | 259 | // ----------------------------------------------------------------------------- |
salemtang | 4:15da67d64f85 | 260 | #ifdef RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 261 | void switchinput3_INTIRQ (void) |
star297 | 0:4f67859595b2 | 262 | { |
salemtang | 2:678c0be8c23d | 263 | display_timer = 7; |
star297 | 0:4f67859595b2 | 264 | time_t seconds = time(NULL); |
star297 | 0:4f67859595b2 | 265 | char buffer[2]; |
star297 | 1:34f0bfc62803 | 266 | strftime(buffer, 2,"%H", localtime(&seconds)); |
salemtang | 6:10b73ebdba3d | 267 | hour = atoi(buffer); // get Hour integer |
star297 | 0:4f67859595b2 | 268 | strftime(buffer, 2,"%M", localtime(&seconds)); |
salemtang | 6:10b73ebdba3d | 269 | minute = atoi(buffer); // get Minutes integer |
star297 | 0:4f67859595b2 | 270 | hour++; |
salemtang | 2:678c0be8c23d | 271 | if (hour > 23) hour = 0; |
salemtang | 6:10b73ebdba3d | 272 | t.tm_sec = 0; // Seconds reset to zero |
star297 | 1:34f0bfc62803 | 273 | t.tm_min = minute; |
star297 | 1:34f0bfc62803 | 274 | t.tm_hour = hour; |
star297 | 1:34f0bfc62803 | 275 | t.tm_mday = 1; |
star297 | 1:34f0bfc62803 | 276 | t.tm_mon = 2; |
star297 | 1:34f0bfc62803 | 277 | t.tm_year = 114; |
salemtang | 2:678c0be8c23d | 278 | set_time(mktime(&t)); |
star297 | 0:4f67859595b2 | 279 | } |
salemtang | 6:10b73ebdba3d | 280 | #endif //RTC_CLOCK_TEST |