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-29
Revision:
6:10b73ebdba3d
Parent:
5:15c484c41006
Child:
7:33a8bfcbe3be

File content as of revision 6:10b73ebdba3d:

#ifndef RTC_CLOCK_TEST
//#define RTC_CLOCK_TEST
#endif  // RTC_CLOCK_TEST
#ifndef LED_BLINK_TEST
//#define LED_BLINK_TEST
#endif  // LED_BLINK_TEST
/**
 * @file   main.cpp
 * @brief  Abstract
 * @copyright (c) 
 */
// -----------------------------------------------------------------------------
//  note
// -----------------------------------------------------------------------------

// -----------------------------------------------------------------------------
//  include files
// -----------------------------------------------------------------------------
#if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST)
#include "mbed.h"
#endif  // RTC_CLOCK_TEST || LED_BLINK_TEST
#ifdef RTC_CLOCK_TEST
#include "SLCD.h"
#endif  // RTC_CLOCK_TEST

// -----------------------------------------------------------------------------
//  general define
// -----------------------------------------------------------------------------

// -----------------------------------------------------------------------------
//  struct define
// -----------------------------------------------------------------------------

// -----------------------------------------------------------------------------
//  external function
// -----------------------------------------------------------------------------

// -----------------------------------------------------------------------------
//  function prototype
// -----------------------------------------------------------------------------
#if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST)
void initializeSetting (void);
#endif  // RTC_CLOCK_TEST || LED_BLINK_TEST
#ifdef LED_BLINK_TEST
void ledBlink (float dutyfactor);
#endif  // LED_BLINK_TEST
#ifdef RTC_CLOCK_TEST
void rtcClock (void);
void scrollMessage (void);
void switchinput1_INTIRQ (void);
void switchinput3_INTIRQ (void);
#endif  // LED_BLINK_TEST

// -----------------------------------------------------------------------------
//  external variable
// -----------------------------------------------------------------------------

// -----------------------------------------------------------------------------
//  global variable
// -----------------------------------------------------------------------------
#ifdef LED_BLINK_TEST
PwmOut greenled_PO(LED1);
PwmOut redled_PO(LED2);
DigitalIn switchinput1_DI(SW1);
DigitalIn switchinput3_DI(SW3);
float defaultdutyfactor = 0.0;
#endif  // LED_BLINK_TEST
#ifdef RTC_CLOCK_TEST
DigitalOut greenled_DO(LED1);
DigitalOut redled_DO(LED2);
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];
#endif  // RTC_CLOCK_TEST

// -----------------------------------------------------------------------------
//  function
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
//! @brief  Main Function
//! @param  [in] nil
//! @retval int
// -----------------------------------------------------------------------------
int main (void)
{
#if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST)
    initializeSetting();
#endif  // RTC_CLOCK_TEST || LED_BLINK_TEST

    while (true) {
#ifdef RTC_CLOCK_TEST
        rtcClock();
#endif  // RTC_CLOCK_TEST

#ifdef LED_BLINK_TEST
        if (!switchinput1_DI) {
            ledBlink(0.5);
        } else if (!switchinput3_DI) {
            ledBlink(1.0);
        } else {
            ledBlink(2.0);
        }
#endif  // LED_BLINK_TEST
    }
}

// -----------------------------------------------------------------------------
//! @brief  Initialize Setting
//! @param  [in] nil
//! @retval nil
// -----------------------------------------------------------------------------
#if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST)
void initializeSetting (void)
{
#ifdef LED_BLINK_TEST
    switchinput1_DI.mode(PullUp);
    switchinput3_DI.mode(PullUp);
#endif  // LED_BLINK_TEST

#ifdef RTC_CLOCK_TEST
    time_t seconds = time(NULL);

    slcd.All_Segments(1);
    wait(2);
    slcd.All_Segments(0);
    wait(1);    

    greenled_DO = 1;
    redled_DO = 1;

    sprintf(message, "    rtc clock    sw3 sets the hours    sw1 sets the minutes");

    // scrolling message    
    scroll.start();
    while (i < 58) {
        while (i < 58) {
            scrollMessage();
         }
    }
    wait(1);
    
    switchinput1_INT.rise(switchinput1_INTIRQ);
    switchinput3_INT.rise(switchinput3_INTIRQ);
#endif  // RTC_CLOCK_TEST
}
#endif  // RTC_CLOCK_TEST || LED_BLINK_TEST

// -----------------------------------------------------------------------------
//! @brief  LED Blink
//! @param  [in] dutyfactor Duty Factor Integer
//! @retval nil
// -----------------------------------------------------------------------------
#ifdef LED_BLINK_TEST
void ledBlink (float dutyfactor)
{
        redled_PO.write(defaultdutyfactor);
        greenled_PO.write(dutyfactor - defaultdutyfactor);
        defaultdutyfactor += 0.01;
        if (defaultdutyfactor >= dutyfactor) defaultdutyfactor = 0.0;
        wait(0.5);
}
#endif

// -----------------------------------------------------------------------------
//! @brief  RTC Clock
//! @param  [in] nil
//! @retval nil
// -----------------------------------------------------------------------------
#ifdef RTC_CLOCK_TEST
void rtcClock (void)
{
    time_t seconds = time(NULL);

    if (display_timer > 6) {
        // display Hours,Minutes for 2 seconds
        strftime(buffer, 4, "%H%M", localtime(&seconds));
        slcd.Colon(1);
        redled_DO = 0;
        slcd.DP2(0);
        greenled_DO = 1;
    } else {
        // display Minutes,Seconds for 8 seconds
        strftime(buffer, 4, "%M%S", localtime(&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);
}
#endif  // RTC_CLOCK_TEST

// -----------------------------------------------------------------------------
//! @brief  Scroll Message
//! @param  [in] nil
//! @retval nil
// -----------------------------------------------------------------------------
#ifdef RTC_CLOCK_TEST
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();
    }
}
#endif  // RTC_CLOCK_TEST

// -----------------------------------------------------------------------------
//! @brief  Set Minutes ISR
//! @param  [in] nil
//! @retval nil
// -----------------------------------------------------------------------------
#ifdef RTC_CLOCK_TEST
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));
}
#endif  // RTC_CLOCK_TEST

// -----------------------------------------------------------------------------
//! @brief  Set Hours ISR
//! @param  [in] nil
//! @retval nil
// -----------------------------------------------------------------------------
#ifdef RTC_CLOCK_TEST
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));
}
#endif  //RTC_CLOCK_TEST