Network clock using 7 segment.

Dependencies:   SNTPClient WIZnetInterface mbed

Fork of mbed_blinky by Mbed

Committer:
nanjsk
Date:
Wed Mar 02 01:30:10 2016 +0000
Revision:
12:e60d3d6f24e8
Parent:
11:8a1ab8deea2b
Add Time Update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan 0:7dec7e9ac085 1 #include "mbed.h"
nanjsk 11:8a1ab8deea2b 2 #include "segment.h"
nanjsk 11:8a1ab8deea2b 3 #include "EthernetInterface.h"
nanjsk 11:8a1ab8deea2b 4 #include "SNTPClient.h"
nanjsk 11:8a1ab8deea2b 5
nanjsk 11:8a1ab8deea2b 6 Serial pc(USBTX,USBRX);
nanjsk 11:8a1ab8deea2b 7 EthernetInterface eth;
nanjsk 11:8a1ab8deea2b 8 datetime ntptime;
dan 0:7dec7e9ac085 9
nanjsk 11:8a1ab8deea2b 10 InterruptIn SW1(PA_15);
nanjsk 11:8a1ab8deea2b 11 DigitalOut ledR(LED1);
nanjsk 11:8a1ab8deea2b 12 DigitalOut ledG(LED2);
nanjsk 11:8a1ab8deea2b 13 DigitalOut ledB(LED3);
nanjsk 11:8a1ab8deea2b 14
nanjsk 11:8a1ab8deea2b 15 struct tm timeinfo;
nanjsk 11:8a1ab8deea2b 16
nanjsk 11:8a1ab8deea2b 17 uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x11, 0x22, 0xab};
nanjsk 11:8a1ab8deea2b 18 uint8_t display_mode = 0;
nanjsk 12:e60d3d6f24e8 19 uint8_t update_mode = 0;
nanjsk 11:8a1ab8deea2b 20
nanjsk 11:8a1ab8deea2b 21
nanjsk 11:8a1ab8deea2b 22 void SW1_Interrupt(){
nanjsk 11:8a1ab8deea2b 23 ledG=!ledG;
nanjsk 11:8a1ab8deea2b 24 display_mode = display_mode + 1;
nanjsk 11:8a1ab8deea2b 25 if(display_mode == 2) display_mode = 0;
nanjsk 11:8a1ab8deea2b 26 pc.printf("Display Mode : %d\n\r",display_mode);
nanjsk 11:8a1ab8deea2b 27 }
nanjsk 11:8a1ab8deea2b 28
nanjsk 12:e60d3d6f24e8 29 void SNTP_Connect() {
nanjsk 12:e60d3d6f24e8 30 printf("Getting time information by using NTP...\r\n");
nanjsk 12:e60d3d6f24e8 31
nanjsk 12:e60d3d6f24e8 32 SNTPClient sntp("time.nist.gov", 40); // timezone: Korea, Republic of
nanjsk 12:e60d3d6f24e8 33 sntp.connect();
nanjsk 12:e60d3d6f24e8 34 if(sntp.getTime(&ntptime) == true) {
nanjsk 12:e60d3d6f24e8 35 printf("%d-%d-%d, %02d:%02d:%02d\r\n", ntptime.yy, ntptime.mo, ntptime.dd, ntptime.hh, ntptime.mm, ntptime.ss);
nanjsk 12:e60d3d6f24e8 36 printf("Completed Get and Set Time\r\n\r\n");
nanjsk 12:e60d3d6f24e8 37 ledR = 0;
nanjsk 12:e60d3d6f24e8 38 }
nanjsk 12:e60d3d6f24e8 39 else {
nanjsk 12:e60d3d6f24e8 40 while(sntp.getTime(&ntptime) == true) {
nanjsk 12:e60d3d6f24e8 41 printf("%d-%d-%d, %02d:%02d:%02d\r\n", ntptime.yy, ntptime.mo, ntptime.dd, ntptime.hh, ntptime.mm, ntptime.ss);
nanjsk 12:e60d3d6f24e8 42 printf("Completed Get and Set Time\r\n\r\n");
nanjsk 12:e60d3d6f24e8 43 ledR = 0;
nanjsk 12:e60d3d6f24e8 44 break;
nanjsk 12:e60d3d6f24e8 45 }
nanjsk 12:e60d3d6f24e8 46 }
nanjsk 12:e60d3d6f24e8 47 }
nanjsk 12:e60d3d6f24e8 48 void time_set() {
nanjsk 12:e60d3d6f24e8 49 timeinfo.tm_mon = ntptime.mo-1;
nanjsk 12:e60d3d6f24e8 50 timeinfo.tm_mday = ntptime.dd;
nanjsk 12:e60d3d6f24e8 51 timeinfo.tm_hour = ntptime.hh;
nanjsk 12:e60d3d6f24e8 52 timeinfo.tm_min = ntptime.mm;
nanjsk 12:e60d3d6f24e8 53 timeinfo.tm_sec = ntptime.ss;
nanjsk 12:e60d3d6f24e8 54 timeinfo.tm_year = ntptime.yy-1900;
nanjsk 12:e60d3d6f24e8 55 time_t t =mktime(&timeinfo);
nanjsk 12:e60d3d6f24e8 56 set_time(t);
nanjsk 12:e60d3d6f24e8 57 t = time(NULL);
nanjsk 12:e60d3d6f24e8 58 }
nanjsk 12:e60d3d6f24e8 59
nanjsk 12:e60d3d6f24e8 60 void time_update(char buffer[]) {
nanjsk 12:e60d3d6f24e8 61 uint8_t h_buffer = ((buffer[0]-48)*10) + (buffer[1]-48);
nanjsk 12:e60d3d6f24e8 62 uint8_t m_buffer = ((buffer[2]-48)*10) + (buffer[3]-48);
nanjsk 12:e60d3d6f24e8 63 uint8_t s_buffer = ((buffer[4]-48)*10) + (buffer[5]-48);
nanjsk 12:e60d3d6f24e8 64 uint8_t time_update[3] = {10, 17, 00}; //Hour,Minute,Second
nanjsk 12:e60d3d6f24e8 65
nanjsk 12:e60d3d6f24e8 66 if(update_mode == 0){
nanjsk 12:e60d3d6f24e8 67 if(h_buffer == time_update[0] && m_buffer == time_update[1] && s_buffer == time_update[2]){
nanjsk 12:e60d3d6f24e8 68 SNTP_Connect();
nanjsk 12:e60d3d6f24e8 69 time_set();
nanjsk 12:e60d3d6f24e8 70 update_mode = 1;
nanjsk 12:e60d3d6f24e8 71 printf("Time Update Completed.\n\r\n\r");
nanjsk 12:e60d3d6f24e8 72 }
nanjsk 12:e60d3d6f24e8 73 }
nanjsk 12:e60d3d6f24e8 74 else if(update_mode == 1){
nanjsk 12:e60d3d6f24e8 75 if(!(h_buffer == time_update[0] && m_buffer == time_update[1] && s_buffer == time_update[2])){
nanjsk 12:e60d3d6f24e8 76 update_mode = 0;
nanjsk 12:e60d3d6f24e8 77 }
nanjsk 12:e60d3d6f24e8 78 }
nanjsk 12:e60d3d6f24e8 79 }
nanjsk 12:e60d3d6f24e8 80
nanjsk 11:8a1ab8deea2b 81 int main() {
nanjsk 11:8a1ab8deea2b 82 pc.baud(115200);
nanjsk 12:e60d3d6f24e8 83 wait(0.1);
nanjsk 12:e60d3d6f24e8 84 printf("\n\rHello WIZwiki-W7500!\n\r");
nanjsk 11:8a1ab8deea2b 85 printf("===========================================\n\r");
nanjsk 11:8a1ab8deea2b 86 ledR = ledG = ledB = 1;
nanjsk 11:8a1ab8deea2b 87
nanjsk 11:8a1ab8deea2b 88 Seg_Reset();
nanjsk 12:e60d3d6f24e8 89 SW1.fall(&SW1_Interrupt);
nanjsk 11:8a1ab8deea2b 90
nanjsk 11:8a1ab8deea2b 91 eth.init(mac_addr); //Use DHCP
nanjsk 11:8a1ab8deea2b 92 printf("Check Ethernet Link\r\n");
nanjsk 11:8a1ab8deea2b 93 while(1) //Wait link up
nanjsk 11:8a1ab8deea2b 94 {
nanjsk 11:8a1ab8deea2b 95 if(eth.link() == true)
nanjsk 11:8a1ab8deea2b 96 break;
nanjsk 11:8a1ab8deea2b 97 }
nanjsk 11:8a1ab8deea2b 98 printf("Link up\r\n");
nanjsk 11:8a1ab8deea2b 99 eth.connect();
nanjsk 11:8a1ab8deea2b 100 printf("My IP Address is %s\r\n", eth.getIPAddress());
nanjsk 11:8a1ab8deea2b 101
nanjsk 12:e60d3d6f24e8 102 SNTP_Connect();
nanjsk 11:8a1ab8deea2b 103 time_set();
nanjsk 12:e60d3d6f24e8 104 //ymd_buffer[0]~[3] : Year
nanjsk 12:e60d3d6f24e8 105 //ymd_buffer[4]~[5] : Month
nanjsk 12:e60d3d6f24e8 106 //ymd_buffer[6]~[7] : Day
nanjsk 11:8a1ab8deea2b 107 char ymd_buffer[8];
nanjsk 12:e60d3d6f24e8 108 //hms_buffer[0]~[1] : Hour
nanjsk 12:e60d3d6f24e8 109 //hms_buffer[2]~[3] : Minute
nanjsk 12:e60d3d6f24e8 110 //hms_buffer[4]~[5] : Second
nanjsk 11:8a1ab8deea2b 111 char hms_buffer[6];
nanjsk 11:8a1ab8deea2b 112
nanjsk 11:8a1ab8deea2b 113 while(1) {
nanjsk 11:8a1ab8deea2b 114 time_t seconds = time(NULL);
nanjsk 12:e60d3d6f24e8 115
nanjsk 12:e60d3d6f24e8 116 strftime(hms_buffer, 6, "%H%M%S\n\r", localtime(&seconds));
nanjsk 11:8a1ab8deea2b 117 strftime(ymd_buffer, 8, "%Y%m%d%\n\r", localtime(&seconds));
nanjsk 12:e60d3d6f24e8 118
nanjsk 12:e60d3d6f24e8 119 if(hms_buffer[4] == '0' && hms_buffer[5] == '0'){
nanjsk 12:e60d3d6f24e8 120 time_update(hms_buffer);
nanjsk 12:e60d3d6f24e8 121 }
nanjsk 11:8a1ab8deea2b 122
nanjsk 12:e60d3d6f24e8 123 if(display_mode == 0) {
nanjsk 12:e60d3d6f24e8 124 display_hms(hms_buffer);
nanjsk 12:e60d3d6f24e8 125 }
nanjsk 12:e60d3d6f24e8 126 else if(display_mode == 1) {
nanjsk 12:e60d3d6f24e8 127
nanjsk 12:e60d3d6f24e8 128 display_ymd(ymd_buffer);
nanjsk 12:e60d3d6f24e8 129 }
nanjsk 12:e60d3d6f24e8 130 else {
nanjsk 12:e60d3d6f24e8 131 display_hms(hms_buffer);
nanjsk 12:e60d3d6f24e8 132 }
nanjsk 11:8a1ab8deea2b 133 }
nanjsk 11:8a1ab8deea2b 134 }