Network clock using 7 segment.

Dependencies:   SNTPClient WIZnetInterface mbed

Fork of mbed_blinky by Mbed

Revision:
12:e60d3d6f24e8
Parent:
11:8a1ab8deea2b
diff -r 8a1ab8deea2b -r e60d3d6f24e8 main.cpp
--- a/main.cpp	Tue Mar 01 17:26:46 2016 +0000
+++ b/main.cpp	Wed Mar 02 01:30:10 2016 +0000
@@ -15,45 +15,9 @@
 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 update_mode = 0;
 
-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;
@@ -62,17 +26,69 @@
     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.5f);
-    printf("Hello WIZwiki-W7500!\n\r");
+    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
-    //eth.init(mac_addr, ip_addr, mask_addr, gw_addr);
     printf("Check Ethernet Link\r\n");
     while(1) //Wait link up
     {
@@ -83,27 +99,36 @@
     eth.connect();
     printf("My IP Address is %s\r\n", eth.getIPAddress());
     
-    //printf("SNTP_Connect : %d\r\n",SNTP_Connect());
-    while(SNTP_Connect());
+    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];
     
-    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(hms_buffer, 6, "%H%M%S\n\r", localtime(&seconds));
         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(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);
+        if(display_mode == 0) {
+            display_hms(hms_buffer);
+        }
+        else if(display_mode == 1) {
+            
+            display_ymd(ymd_buffer);
+        }
+        else {
+            display_hms(hms_buffer);
+        }
     }
 }
\ No newline at end of file