Check program for 7-segment LED driver [OSL10564-74HC595-x] library

Dependencies:   OSL10564_74HC595 mbed

main.cpp

Committer:
kenjiArai
Date:
2018-01-22
Revision:
0:b24071fbcbb3

File content as of revision 0:b24071fbcbb3:

/*
 * Mbed Application program / Akizuki 7-segment LED driver [OSL10564-74HC595-x]
 *      AKIZUKI AE-7SEG-BOARD-KIT-BLUE
 *      http://akizukidenshi.com/catalog/g/gK-10344/
 *
 * Copyright (c) 2018 Kenji Arai / JH1PJL
 *  http://www.page.sannet.ne.jp/kenjia/index.html
 *  http://mbed.org/users/kenjiArai/
 *      Created:    January    7th, 2018
 *      Revised:    January   22nd, 2018
 */

//  Include --------------------------------------------------------------------
#include "mbed.h"
#include "7segLed_HC595.h"

//  Definition -----------------------------------------------------------------
#define NUM_OF_DIGIT    6

#define KEYIN_THEN_EXIT_WHILE() {if(exit_while_loop_when_keyinput()){ break;}}

//  Constructor ----------------------------------------------------------------
Serial      pc(USBTX, USBRX);
#if defined(TARGET_NUCLEO_F446RE) || defined(TARGET_NUCLEO_F411RE)\
 || defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_L152RE)\
 || defined(TARGET_NUCLEO_L073RZ) || defined(TARGET_NUCLEO_L053R8)\
 || defined(TARGET_NUCLEO_L476RG)
//                SPI MOSI,SCLK,any port, PWM, number of digit
SevenSegLed led_7segs(D4,  D3,  D5,       D6,  NUM_OF_DIGIT);
#elif defined(TARGET_NUCLEO_F334R8)
//                SPI MOSI,SCLK,any port, PWM, number of digit
SevenSegLed led_7segs(D4,  D3,  D5,       D7,  NUM_OF_DIGIT);
#elif defined(TARGET_NUCLEO_F303K8)
//                SPI MOSI,SCLK,any port, PWM, number of digit
SevenSegLed led_7segs(A6,  A4,  A5,       A3,  NUM_OF_DIGIT);
#elif TARGET_Freescale
//                SPI MOSI,SCLK,any port, PWM, number of digit
SevenSegLed led_7segs(D11, D13, D12,     D10,  NUM_OF_DIGIT);
#else
#error    "Please set your own SevenSegLed constractor!"
#endif
DigitalOut  myled(LED1);
AnalogIn    vol(A0);

//  RAM ------------------------------------------------------------------------
time_t seconds;

//  ROM / Constant data --------------------------------------------------------

//  Function prototypes --------------------------------------------------------
bool exit_while_loop_when_keyinput(void);

//------------------------------------------------------------------------------
//  Control Program
//------------------------------------------------------------------------------
int main()
{
    //--------------------------------------------------------------------------
    pc.printf("Hit any key to go next step\r\n");
    pc.printf("Step1\r\n");
    {
        uint32_t max = 9;
        for (uint32_t i = 1; i < NUM_OF_DIGIT; i++) {
            max = max * 10 + 9;
        }
        pc.printf("max = %d\r\n", max);
        led_7segs.zero_suppress(true);
        int32_t count = 0;
        while(true) {
            led_7segs = count++;
            if (count > max) {
                count = 0;
            }
            float wait_time = 5.0f / (float)(count + 1);
            if (wait_time > 0.01f) {
                wait(wait_time);
            }
            KEYIN_THEN_EXIT_WHILE();
        }
    }
    //--------------------------------------------------------------------------
    pc.printf("Step2\r\n");
    {
        char buf[16];

        led_7segs.zero_suppress(false);
        float led_bright = 0.5f;
        while(true) {
            time_t seconds = time(NULL);
            strftime(buf, 10, "%H.%M.%S", localtime(&seconds));
            //strftime(buf, 10, "1.2.3.4.%S", localtime(&seconds));
            pc.printf("%s\r\n", buf);
            led_7segs.put_ascii(buf);
            led_7segs.brightness(led_bright);
            if (led_bright == 0.5f) {
                led_bright = 1.0f;
            } else {
                led_bright = 0.5f;
            }
            wait(1.0f);
            KEYIN_THEN_EXIT_WHILE();
        }
    }
    //--------------------------------------------------------------------------
    pc.printf("Step3\r\n");
    {
        uint8_t seg_bf[6] =  {
            0b00000001     // LSB
            ,0b00000010
            ,0b10000100     // +Dot
            ,0b00001000
            ,0b00010000
            ,0b00100000     // MSB
        };

        led_7segs.zero_suppress(true);
        led_7segs.brightness(1.0f);
        int32_t count = 0;
        while(true) {
            count++;
            if (count & 0x01) {
                led_7segs.put_raw(seg_bf);
            } else {
                led_7segs.put_ascii("12.34567");
            }
            wait(1.0f);
            KEYIN_THEN_EXIT_WHILE();
        }
    }
    //--------------------------------------------------------------------------
    pc.printf("Step4\r\n");
    {
        char buf[16];

        for (uint32_t i = 0; i < sizeof(buf); i++) {
            buf[i] = ' ';
        }
        bool exit_req = false;
        while(true) {
            for (uint32_t n = ' '; n < '~'; n++) {
                for (uint32_t i = 0 ; i < sizeof(buf) - 1; i++) {
                    buf[i] = buf[i + 1];
                }
                buf[NUM_OF_DIGIT - 1] = n;
                pc.putc(n);
                led_7segs.put_strings(buf);
                led_7segs.brightness(vol);
                wait(1.0f);
                if(exit_while_loop_when_keyinput()) {
                    exit_req = true;
                    break;
                }
            }
            if (exit_req == true) {
                break;
            }
        }
        for (uint32_t i = 0; i < sizeof(buf); i++) {
            buf[i] = ' ';
        }
        led_7segs.put_strings(buf);
        pc.printf("\r\n");
    }
    //--------------------------------------------------------------------------
    pc.printf("Step5\r\n");
    {
        char buf[16];

        pc.printf("hit [Esc] to exit the function\r\n");
        for (uint32_t i = 0; i < sizeof(buf); i++) {
            buf[i] = ' ';
        }
        led_7segs.put_strings(buf);
        while(true) {
            while(pc.readable() == 0) {
                ;
            }
            char c = pc.getc();
            pc.putc(c);
            if (c == 0x1b) {    // [Esc]
                break;
            }
            for (uint32_t i = 0 ; i < sizeof(buf) - 1; i++) {
                buf[i] = buf[i + 1];
            }
            buf[NUM_OF_DIGIT - 1] = c;
            led_7segs.put_strings(buf);
        }
        for (uint32_t i = 0; i < sizeof(buf); i++) {
            buf[i] = ' ';
        }
        led_7segs.put_strings(buf);
        pc.printf("\r\n");
    }
    //--------------------------------------------------------------------------
    pc.printf("Step_END\r\n");
    {
        while(true) {
            pc.printf("Finished -> Reset then start again\r\n");
            wait(10.0f);
        }
    }
}

bool exit_while_loop_when_keyinput(void)
{
    if (pc.readable()) {
        while(pc.readable()) {
            char c = pc.getc();
        }
        return true;
    } else {
        return false;
    }
}