FRDM-KL46Z board sLCD demo code

Dependencies:   SLCD mbed

Fork of FRDM-KL46Z LCD rtc Demo by Paul Staron

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);