FRDM-KL46Z board sLCD demo code

Dependencies:   SLCD mbed

Fork of FRDM-KL46Z LCD rtc Demo by Paul Staron

main.cpp

Committer:
salemtang
Date:
2014-09-27
Revision:
3:fb38dbc95b12
Parent:
2:678c0be8c23d
Child:
4:15da67d64f85

File content as of revision 3:fb38dbc95b12:

//_____________________________________________________________//
//======== INCLUDES ===========================================//
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
#include "mbed.h"
#include "SLCD.h"

//_____________________________________________________________//
//======== DEFINES ============================================//
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
#define PWMDWELL 50    // milliseconds
#define DFDELTA 0.01

//_____________________________________________________________//
//======== MACROS =============================================//
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//

//_____________________________________________________________//
//======== PROTOTYPES =========================================//
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
void initializeSetting (void);
void ledBlink (float dutyfactor);
void rtcClock (void);
void scrollMessage (void);
void switchinput1_INTIRQ (void);
void switchinput3_INTIRQ (void);

//_____________________________________________________________//
//======== TABLES =============================================//
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//

//_____________________________________________________________//
//======== VARIABLES ==========================================//
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
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 ()
{
    initializeSetting();

    while (true) {
        rtcClock();
        
        if (!switchinput1_DI) {
            ledBlink(1.0);
        } else if (!switchinput3_DI) {
            ledBlink(10.0);
        } else {
        }
    }
}

//_____________________________________________________________//
//======== FUNC() =============================================//
//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
//! -------------------------------------------------------------
//! @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();
        if (i > 58) {
            i=0;
        }
        int j, k = i;
        for (j = 0; j < 4; j++) {
            if (message[k+j]) {
                slcd.putc(message[k+j]);
            } else {
                slcd.putc(' ');
                k--;
            }
        }
        i++;
        lastscroll = scroll.read_ms();
    }
}
//! -------------------------------------------------------------
//! @brief  Set Minutes ISR
//! @[in]   nil
//! @retval nil
//! -------------------------------------------------------------
void switchinput1_INTIRQ (void)
{
    display_timer = 7;
    time_t seconds = time(NULL);
    char buffer[2];
    strftime(buffer, 2,"%H", localtime(&seconds));
    hour = atoi(buffer);    // get Hour integer
    strftime(buffer, 2,"%M", localtime(&seconds));
    minute = atoi(buffer);    // get Minutes integer
    minute++;
    if (minute > 59) minute = 0;
    t.tm_sec = 0;    // Seconds reset to zero
    t.tm_min = minute;
    t.tm_hour = hour;
    t.tm_mday = 1;
    t.tm_mon = 2;
    t.tm_year = 114;
    set_time(mktime(&t));
}

//! -------------------------------------------------------------
//! @brief  Set Hours ISR
//! @[in]   nil
//! @retval nil
//! -------------------------------------------------------------
void switchinput3_INTIRQ (void)
{
    display_timer = 7;
    time_t seconds = time(NULL);
    char buffer[2];
    strftime(buffer, 2,"%H", localtime(&seconds));
    hour = atoi(buffer);    // get Hour integer
    strftime(buffer, 2,"%M", localtime(&seconds));
    minute = atoi(buffer);    // get Minutes integer
    hour++;
    if (hour > 23) hour = 0;
    t.tm_sec = 0;    // Seconds reset to zero
    t.tm_min = minute;
    t.tm_hour = hour;
    t.tm_mday = 1;
    t.tm_mon = 2;
    t.tm_year = 114;
    set_time(mktime(&t));
}