FRDM-KL46Z board sLCD demo code
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 | } |