Network clock using 7 segment.
Dependencies: SNTPClient WIZnetInterface mbed
Fork of mbed_blinky by
main.cpp@12:e60d3d6f24e8, 2016-03-02 (annotated)
- 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?
User | Revision | Line number | New 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 | } |