FRDM-KL46Z board sLCD demo code
Fork of FRDM-KL46Z LCD rtc Demo by
Diff: main.cpp
- Revision:
- 3:fb38dbc95b12
- Parent:
- 2:678c0be8c23d
- Child:
- 4:15da67d64f85
--- a/main.cpp Sat Sep 27 02:26:19 2014 +0000 +++ b/main.cpp Sat Sep 27 14:56:06 2014 +0000 @@ -7,88 +7,155 @@ //_____________________________________________________________// //======== DEFINES ============================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// +#define PWMDWELL 50 // milliseconds +#define DFDELTA 0.01 + +//_____________________________________________________________// +//======== MACROS =============================================// +//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// //_____________________________________________________________// //======== PROTOTYPES =========================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// -void scroll_message (void); -void setMinuteIRQ (void); -void setHourIRQ (void); +void initializeSetting (void); +void ledBlink (float dutyfactor); +void rtcClock (void); +void scrollMessage (void); +void switchinput1_INTIRQ (void); +void switchinput3_INTIRQ (void); + +//_____________________________________________________________// +//======== TABLES =============================================// +//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// //_____________________________________________________________// //======== VARIABLES ==========================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// -DigitalOut led1_DO(LED1); -DigitalOut led2_DO(LED2); -InterruptIn setMinute(SW1); -InterruptIn setHour(SW3); -time_t seconds = time(NULL); // needed to start rtc on reset to maintain reasonable time if hard reset +DigitalOut greenled_DO(LED1); +DigitalOut redled_DO(LED2); +PwmOut greenled_PO(LED1); +PwmOut redled_PO(LED2); +DigitalIn switchinput1_DI(SW1); +DigitalIn switchinput3_DI(SW3); +InterruptIn switchinput1_INT(SW1); +InterruptIn switchinput3_INT(SW3); SLCD slcd; Timer scroll; struct tm t; int i, j, k, lastscroll, display_timer, minute, hour, colon, dp; char message[60]; char buffer[32]; +float defaultdutyfactor = 0.0; //_____________________________________________________________// //======== MAIN() =============================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// int main () { - slcd.All_Segments(1); - wait(2); - slcd.All_Segments(0); - wait(1); - - led1_DO = 1; - led2_DO = 1; - - sprintf(message, " rtc clock s3 sets the hours s1 sets the minutes"); + initializeSetting(); -// scrolling message - scroll.start(); - while (i < 58) { - while (i < 58) { - scroll_message(); - } - } - wait(1); - - setMinute.rise(setMinuteIRQ); // start set Minutes IRQ - setHour.rise(setHourIRQ); // start set Hours IRQ - -// rtc clock function - while (1) { - time_t seconds = time(NULL); - - if (display_timer > 6) { - strftime(buffer, 4, "%H%M", localtime(&seconds)); // display Hours,Minutes for 2 seconds - slcd.Colon(1); - led2_DO = 0; - slcd.DP2(0); - led1_DO = 1; + while (true) { + rtcClock(); + + if (!switchinput1_DI) { + ledBlink(1.0); + } else if (!switchinput3_DI) { + ledBlink(10.0); } else { - strftime(buffer, 4, "%M%S", localtime(&seconds)); // display Minutes,Seconds for 8 seconds - slcd.Colon(0); - led2_DO = 1; - slcd.DP2(1); - led1_DO = 0; } - slcd.printf(buffer); - wait(0.5); - slcd.DP2(0); - led1_DO = 1; - display_timer++; - if (display_timer > 9) display_timer = 0; - wait(0.5); } } //_____________________________________________________________// //======== FUNC() =============================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// -// message control -void scroll_message (void) +//! ------------------------------------------------------------- +//! @brief Initialize Setting +//! @[in] nil +//! @retval nil +//! ------------------------------------------------------------- +void initializeSetting (void) +{ + time_t seconds = time(NULL); + + switchinput1_DI.mode(PullUp); + switchinput3_DI.mode(PullUp); + + slcd.All_Segments(1); + wait(2); + slcd.All_Segments(0); + wait(1); + + greenled_DO = 1; + redled_DO = 1; + + sprintf(message, " rtc clock s3 sets the hours s1 sets the minutes"); + + // scrolling message + scroll.start(); + while (i < 58) { + while (i < 58) { + scrollMessage(); + } + } + wait(1); + + switchinput1_INT.rise(switchinput1_INTIRQ); // start set Minutes IRQ + switchinput3_INT.rise(switchinput3_INTIRQ); // start set Hours IRQ +} + +//! ------------------------------------------------------------- +//! @brief LED Blink +//! @[in] dutyfactor Duty Factor +//! @retval nil +//! ------------------------------------------------------------- +void ledBlink (float dutyfactor) +{ + redled_PO.write(defaultdutyfactor); + greenled_PO.write(dutyfactor - defaultdutyfactor); + defaultdutyfactor += DFDELTA; + if (defaultdutyfactor >= dutyfactor) defaultdutyfactor = 0.0; + wait_ms(PWMDWELL); +} + +//! ------------------------------------------------------------- +//! @brief RTC Clock +//! @[in] nil +//! @retval nil +//! ------------------------------------------------------------- +void rtcClock (void) +{ + time_t seconds = time(NULL); + + if (display_timer > 6) { + strftime(buffer, 4, "%H%M", localtime(&seconds)); // display Hours,Minutes for 2 seconds + slcd.Colon(1); + redled_DO = 0; + slcd.DP2(0); + greenled_DO = 1; + } else { + strftime(buffer, 4, "%M%S", localtime(&seconds)); // display Minutes,Seconds for 8 seconds + slcd.Colon(0); + redled_DO = 1; + slcd.DP2(1); + greenled_DO = 0; + } + + slcd.printf(buffer); + wait(0.5); + slcd.DP2(0); + greenled_DO = 1; + display_timer++; + if (display_timer > 9) display_timer = 0; + wait(0.5); +} + +//! ------------------------------------------------------------- +//! @brief Scroll Message +//! @[in] nil +//! @retval nil +//! ------------------------------------------------------------- +void scrollMessage (void) { if (scroll.read_ms() > lastscroll + 350) { scroll.reset(); @@ -108,9 +175,12 @@ lastscroll = scroll.read_ms(); } } - -// set Minutes ISR -void setMinuteIRQ (void) +//! ------------------------------------------------------------- +//! @brief Set Minutes ISR +//! @[in] nil +//! @retval nil +//! ------------------------------------------------------------- +void switchinput1_INTIRQ (void) { display_timer = 7; time_t seconds = time(NULL); @@ -130,8 +200,12 @@ set_time(mktime(&t)); } -// set Hours ISR -void setHourIRQ (void) +//! ------------------------------------------------------------- +//! @brief Set Hours ISR +//! @[in] nil +//! @retval nil +//! ------------------------------------------------------------- +void switchinput3_INTIRQ (void) { display_timer = 7; time_t seconds = time(NULL);