
Network clock using 7 segment.
Dependencies: SNTPClient WIZnetInterface mbed
Fork of mbed_blinky by
main.cpp
- Committer:
- nanjsk
- Date:
- 2016-03-02
- Revision:
- 12:e60d3d6f24e8
- Parent:
- 11:8a1ab8deea2b
File content as of revision 12:e60d3d6f24e8:
#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}; uint8_t display_mode = 0; uint8_t update_mode = 0; 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); } void 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; } else { while(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; break; } } } 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; time_t t =mktime(&timeinfo); set_time(t); t = time(NULL); } void time_update(char buffer[]) { uint8_t h_buffer = ((buffer[0]-48)*10) + (buffer[1]-48); uint8_t m_buffer = ((buffer[2]-48)*10) + (buffer[3]-48); uint8_t s_buffer = ((buffer[4]-48)*10) + (buffer[5]-48); uint8_t time_update[3] = {10, 17, 00}; //Hour,Minute,Second if(update_mode == 0){ if(h_buffer == time_update[0] && m_buffer == time_update[1] && s_buffer == time_update[2]){ SNTP_Connect(); time_set(); update_mode = 1; printf("Time Update Completed.\n\r\n\r"); } } else if(update_mode == 1){ if(!(h_buffer == time_update[0] && m_buffer == time_update[1] && s_buffer == time_update[2])){ update_mode = 0; } } } int main() { pc.baud(115200); wait(0.1); printf("\n\rHello WIZwiki-W7500!\n\r"); printf("===========================================\n\r"); ledR = ledG = ledB = 1; Seg_Reset(); SW1.fall(&SW1_Interrupt); eth.init(mac_addr); //Use DHCP 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()); SNTP_Connect(); time_set(); //ymd_buffer[0]~[3] : Year //ymd_buffer[4]~[5] : Month //ymd_buffer[6]~[7] : Day char ymd_buffer[8]; //hms_buffer[0]~[1] : Hour //hms_buffer[2]~[3] : Minute //hms_buffer[4]~[5] : Second char hms_buffer[6]; while(1) { time_t seconds = time(NULL); strftime(hms_buffer, 6, "%H%M%S\n\r", localtime(&seconds)); strftime(ymd_buffer, 8, "%Y%m%d%\n\r", localtime(&seconds)); if(hms_buffer[4] == '0' && hms_buffer[5] == '0'){ time_update(hms_buffer); } if(display_mode == 0) { display_hms(hms_buffer); } else if(display_mode == 1) { display_ymd(ymd_buffer); } else { display_hms(hms_buffer); } } }