Network clock using 7 segment.

Dependencies:   SNTPClient WIZnetInterface mbed

Fork of mbed_blinky by Mbed

main.cpp

Committer:
nanjsk
Date:
2016-03-01
Revision:
11:8a1ab8deea2b
Parent:
4:81cea7a352b0
Child:
12:e60d3d6f24e8

File content as of revision 11:8a1ab8deea2b:

#include "mbed.h"
#include "segment.h"
#include "EthernetInterface.h"
#include "SNTPClient.h"

Serial pc(USBTX,USBRX);
EthernetInterface eth;
datetime ntptime;

InterruptIn SW1(PA_15);
DigitalOut ledR(LED1);
DigitalOut ledG(LED2);
DigitalOut ledB(LED3);

struct tm timeinfo;

uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x11, 0x22, 0xab};
//char ip_addr[4] = {222,98,173.222};
//char mask_addr[4] = {255,255,255,0};
//char gw_addr[4] = {222,98,173,254};
uint8_t display_mode = 0;

void time_set(){
    timeinfo.tm_mon = ntptime.mo-1;
    timeinfo.tm_mday = ntptime.dd;
    timeinfo.tm_hour = ntptime.hh;
    timeinfo.tm_min = ntptime.mm;
    timeinfo.tm_sec = ntptime.ss;
    timeinfo.tm_year = ntptime.yy-1900;
    //printf("%d-%d-%d, %02d:%02d:%02d\r\n", timeinfo.tm_year, timeinfo.tm_mon, timeinfo.tm_mday, timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec);
    time_t t =mktime(&timeinfo);
    set_time(t);
    t = time(NULL);
}

uint8_t SNTP_Connect(){
    printf("Getting time information by using NTP...\r\n");
    
    SNTPClient sntp("time.nist.gov", 40);   // timezone: Korea, Republic of
    sntp.connect();
    if(sntp.getTime(&ntptime) == true)
    {
          printf("%d-%d-%d, %02d:%02d:%02d\r\n", ntptime.yy, ntptime.mo, ntptime.dd, ntptime.hh, ntptime.mm, ntptime.ss);
          printf("Completed Get and Set Time\r\n\r\n");
          ledR = 0;
          return 0;
    }
    else
    {
        while(sntp.getTime(&ntptime) == true)
        {
            break;
        }
        return 1;
    }
}

void SW1_Interrupt(){
    ledG=!ledG;
    display_mode = display_mode + 1;
    if(display_mode == 2)    display_mode = 0;
    pc.printf("Display Mode : %d\n\r",display_mode);
}

int main() {    
    pc.baud(115200);
    wait(0.5f);
    printf("Hello WIZwiki-W7500!\n\r");
    printf("===========================================\n\r");
    ledR = ledG = ledB = 1;
    
    Seg_Reset();
    
    eth.init(mac_addr); //Use DHCP
    //eth.init(mac_addr, ip_addr, mask_addr, gw_addr);
    printf("Check Ethernet Link\r\n");
    while(1) //Wait link up
    {
        if(eth.link() == true) 
            break;
    }
    printf("Link up\r\n");
    eth.connect();
    printf("My IP Address is %s\r\n", eth.getIPAddress());
    
    //printf("SNTP_Connect : %d\r\n",SNTP_Connect());
    while(SNTP_Connect());
    time_set();
    
    char ymd_buffer[8];
    char hms_buffer[6];
    
    SW1.fall(&SW1_Interrupt);
    while(1) {
        time_t seconds = time(NULL);
        //ymd_buffer[0]~[3] : Year
        //ymd_buffer[4]~[5] : Month
        //ymd_buffer[6]~[7] : Day
        strftime(ymd_buffer, 8, "%Y%m%d%\n\r", localtime(&seconds));
        //hms_buffer[0]~[1] : Hour
        //hms_buffer[2]~[3] : Minute
        //hms_buffer[4]~[5] : Second
        strftime(hms_buffer, 6, "%H%M%S\n\r", localtime(&seconds));
        
        if(display_mode == 0)   display_hms(hms_buffer);
        else if(display_mode == 1)   display_ymd(ymd_buffer);
        else    display_hms(hms_buffer);
    }
}