Network clock using 7 segment.

Dependencies:   SNTPClient WIZnetInterface mbed

Fork of mbed_blinky by Mbed

Revision:
11:8a1ab8deea2b
Parent:
4:81cea7a352b0
Child:
12:e60d3d6f24e8
--- a/main.cpp	Sun Jan 17 03:25:27 2016 +0000
+++ b/main.cpp	Tue Mar 01 17:26:46 2016 +0000
@@ -1,12 +1,109 @@
 #include "mbed.h"
+#include "segment.h"
+#include "EthernetInterface.h"
+#include "SNTPClient.h"
+
+Serial pc(USBTX,USBRX);
+EthernetInterface eth;
+datetime ntptime;
 
-DigitalOut myled(LED1);
+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;
 
-int main() {
-    while(1) {
-        myled = 1;
-        wait(0.2);
-        myled = 0;
-        wait(0.2);
+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);
+    }
+}
\ No newline at end of file