Network clock using 7 segment.

Dependencies:   SNTPClient WIZnetInterface mbed

Fork of mbed_blinky by Mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "segment.h"
00003 #include "EthernetInterface.h"
00004 #include "SNTPClient.h"
00005 
00006 Serial pc(USBTX,USBRX);
00007 EthernetInterface eth;
00008 datetime ntptime;
00009 
00010 InterruptIn SW1(PA_15);
00011 DigitalOut ledR(LED1);
00012 DigitalOut ledG(LED2);
00013 DigitalOut ledB(LED3);
00014 
00015 struct tm timeinfo;
00016 
00017 uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x11, 0x22, 0xab};
00018 uint8_t display_mode = 0;
00019 uint8_t update_mode = 0;
00020 
00021 
00022 void SW1_Interrupt(){
00023     ledG=!ledG;
00024     display_mode = display_mode + 1;
00025     if(display_mode == 2)    display_mode = 0;
00026     pc.printf("Display Mode : %d\n\r",display_mode);
00027 }
00028 
00029 void SNTP_Connect() {
00030     printf("Getting time information by using NTP...\r\n");
00031     
00032     SNTPClient sntp("time.nist.gov", 40);   // timezone: Korea, Republic of
00033     sntp.connect();
00034     if(sntp.getTime(&ntptime) == true) {
00035           printf("%d-%d-%d, %02d:%02d:%02d\r\n", ntptime.yy, ntptime.mo, ntptime.dd, ntptime.hh, ntptime.mm, ntptime.ss);
00036           printf("Completed Get and Set Time\r\n\r\n");
00037           ledR = 0;
00038     }
00039     else {
00040         while(sntp.getTime(&ntptime) == true) {
00041             printf("%d-%d-%d, %02d:%02d:%02d\r\n", ntptime.yy, ntptime.mo, ntptime.dd, ntptime.hh, ntptime.mm, ntptime.ss);
00042             printf("Completed Get and Set Time\r\n\r\n");
00043             ledR = 0;
00044             break;
00045         }
00046     }
00047 }
00048 void time_set() {
00049     timeinfo.tm_mon = ntptime.mo-1;
00050     timeinfo.tm_mday = ntptime.dd;
00051     timeinfo.tm_hour = ntptime.hh;
00052     timeinfo.tm_min = ntptime.mm;
00053     timeinfo.tm_sec = ntptime.ss;
00054     timeinfo.tm_year = ntptime.yy-1900;
00055     time_t t =mktime(&timeinfo);
00056     set_time(t);
00057     t = time(NULL);
00058 }
00059 
00060 void time_update(char buffer[]) {
00061     uint8_t h_buffer = ((buffer[0]-48)*10) + (buffer[1]-48);
00062     uint8_t m_buffer = ((buffer[2]-48)*10) + (buffer[3]-48);
00063     uint8_t s_buffer = ((buffer[4]-48)*10) + (buffer[5]-48);
00064     uint8_t time_update[3] = {10, 17, 00};   //Hour,Minute,Second
00065 
00066     if(update_mode == 0){
00067         if(h_buffer == time_update[0] && m_buffer == time_update[1] && s_buffer == time_update[2]){
00068             SNTP_Connect();
00069             time_set();
00070             update_mode = 1;
00071             printf("Time Update Completed.\n\r\n\r");
00072         }
00073     }
00074     else if(update_mode == 1){
00075         if(!(h_buffer == time_update[0] && m_buffer == time_update[1] && s_buffer == time_update[2])){
00076             update_mode = 0;
00077         }
00078     }
00079 }
00080 
00081 int main() {    
00082     pc.baud(115200);
00083     wait(0.1);
00084     printf("\n\rHello WIZwiki-W7500!\n\r");
00085     printf("===========================================\n\r");
00086     ledR = ledG = ledB = 1;
00087     
00088     Seg_Reset();
00089     SW1.fall(&SW1_Interrupt);
00090     
00091     eth.init(mac_addr); //Use DHCP
00092     printf("Check Ethernet Link\r\n");
00093     while(1) //Wait link up
00094     {
00095         if(eth.link() == true) 
00096             break;
00097     }
00098     printf("Link up\r\n");
00099     eth.connect();
00100     printf("My IP Address is %s\r\n", eth.getIPAddress());
00101     
00102     SNTP_Connect();
00103     time_set();
00104     //ymd_buffer[0]~[3] : Year
00105     //ymd_buffer[4]~[5] : Month
00106     //ymd_buffer[6]~[7] : Day
00107     char ymd_buffer[8];
00108     //hms_buffer[0]~[1] : Hour
00109     //hms_buffer[2]~[3] : Minute
00110     //hms_buffer[4]~[5] : Second
00111     char hms_buffer[6];
00112     
00113     while(1) {
00114         time_t seconds = time(NULL);
00115         
00116         strftime(hms_buffer, 6, "%H%M%S\n\r", localtime(&seconds));
00117         strftime(ymd_buffer, 8, "%Y%m%d%\n\r", localtime(&seconds));
00118         
00119         if(hms_buffer[4] == '0' && hms_buffer[5] == '0'){
00120             time_update(hms_buffer);
00121         }
00122         
00123         if(display_mode == 0) {
00124             display_hms(hms_buffer);
00125         }
00126         else if(display_mode == 1) {
00127             
00128             display_ymd(ymd_buffer);
00129         }
00130         else {
00131             display_hms(hms_buffer);
00132         }
00133     }
00134 }