FRDM-KL46Z board sLCD demo code

Dependencies:   SLCD mbed

Fork of FRDM-KL46Z LCD rtc Demo by Paul Staron

Committer:
salemtang
Date:
Mon Sep 29 15:24:17 2014 +0000
Revision:
6:10b73ebdba3d
Parent:
5:15c484c41006
Child:
7:33a8bfcbe3be
20140930_0024 modified

Who changed what in which revision?

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