Network clock using 7 segment.
Dependencies: SNTPClient WIZnetInterface mbed
Fork of mbed_blinky by
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 }
Generated on Sat Jul 16 2022 10:51:04 by 1.7.2