Network clock using 7 segment.
Dependencies: SNTPClient WIZnetInterface mbed
Fork of mbed_blinky by
main.cpp@11:8a1ab8deea2b, 2016-03-01 (annotated)
- Committer:
- nanjsk
- Date:
- Tue Mar 01 17:26:46 2016 +0000
- Revision:
- 11:8a1ab8deea2b
- Parent:
- 4:81cea7a352b0
- Child:
- 12:e60d3d6f24e8
first
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 | //char ip_addr[4] = {222,98,173.222}; |
nanjsk | 11:8a1ab8deea2b | 19 | //char mask_addr[4] = {255,255,255,0}; |
nanjsk | 11:8a1ab8deea2b | 20 | //char gw_addr[4] = {222,98,173,254}; |
nanjsk | 11:8a1ab8deea2b | 21 | uint8_t display_mode = 0; |
dan | 0:7dec7e9ac085 | 22 | |
nanjsk | 11:8a1ab8deea2b | 23 | void time_set(){ |
nanjsk | 11:8a1ab8deea2b | 24 | timeinfo.tm_mon = ntptime.mo-1; |
nanjsk | 11:8a1ab8deea2b | 25 | timeinfo.tm_mday = ntptime.dd; |
nanjsk | 11:8a1ab8deea2b | 26 | timeinfo.tm_hour = ntptime.hh; |
nanjsk | 11:8a1ab8deea2b | 27 | timeinfo.tm_min = ntptime.mm; |
nanjsk | 11:8a1ab8deea2b | 28 | timeinfo.tm_sec = ntptime.ss; |
nanjsk | 11:8a1ab8deea2b | 29 | timeinfo.tm_year = ntptime.yy-1900; |
nanjsk | 11:8a1ab8deea2b | 30 | //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); |
nanjsk | 11:8a1ab8deea2b | 31 | time_t t =mktime(&timeinfo); |
nanjsk | 11:8a1ab8deea2b | 32 | set_time(t); |
nanjsk | 11:8a1ab8deea2b | 33 | t = time(NULL); |
nanjsk | 11:8a1ab8deea2b | 34 | } |
nanjsk | 11:8a1ab8deea2b | 35 | |
nanjsk | 11:8a1ab8deea2b | 36 | uint8_t SNTP_Connect(){ |
nanjsk | 11:8a1ab8deea2b | 37 | printf("Getting time information by using NTP...\r\n"); |
nanjsk | 11:8a1ab8deea2b | 38 | |
nanjsk | 11:8a1ab8deea2b | 39 | SNTPClient sntp("time.nist.gov", 40); // timezone: Korea, Republic of |
nanjsk | 11:8a1ab8deea2b | 40 | sntp.connect(); |
nanjsk | 11:8a1ab8deea2b | 41 | if(sntp.getTime(&ntptime) == true) |
nanjsk | 11:8a1ab8deea2b | 42 | { |
nanjsk | 11:8a1ab8deea2b | 43 | printf("%d-%d-%d, %02d:%02d:%02d\r\n", ntptime.yy, ntptime.mo, ntptime.dd, ntptime.hh, ntptime.mm, ntptime.ss); |
nanjsk | 11:8a1ab8deea2b | 44 | printf("Completed Get and Set Time\r\n\r\n"); |
nanjsk | 11:8a1ab8deea2b | 45 | ledR = 0; |
nanjsk | 11:8a1ab8deea2b | 46 | return 0; |
nanjsk | 11:8a1ab8deea2b | 47 | } |
nanjsk | 11:8a1ab8deea2b | 48 | else |
nanjsk | 11:8a1ab8deea2b | 49 | { |
nanjsk | 11:8a1ab8deea2b | 50 | while(sntp.getTime(&ntptime) == true) |
nanjsk | 11:8a1ab8deea2b | 51 | { |
nanjsk | 11:8a1ab8deea2b | 52 | break; |
nanjsk | 11:8a1ab8deea2b | 53 | } |
nanjsk | 11:8a1ab8deea2b | 54 | return 1; |
stevep | 4:81cea7a352b0 | 55 | } |
dan | 0:7dec7e9ac085 | 56 | } |
nanjsk | 11:8a1ab8deea2b | 57 | |
nanjsk | 11:8a1ab8deea2b | 58 | void SW1_Interrupt(){ |
nanjsk | 11:8a1ab8deea2b | 59 | ledG=!ledG; |
nanjsk | 11:8a1ab8deea2b | 60 | display_mode = display_mode + 1; |
nanjsk | 11:8a1ab8deea2b | 61 | if(display_mode == 2) display_mode = 0; |
nanjsk | 11:8a1ab8deea2b | 62 | pc.printf("Display Mode : %d\n\r",display_mode); |
nanjsk | 11:8a1ab8deea2b | 63 | } |
nanjsk | 11:8a1ab8deea2b | 64 | |
nanjsk | 11:8a1ab8deea2b | 65 | int main() { |
nanjsk | 11:8a1ab8deea2b | 66 | pc.baud(115200); |
nanjsk | 11:8a1ab8deea2b | 67 | wait(0.5f); |
nanjsk | 11:8a1ab8deea2b | 68 | printf("Hello WIZwiki-W7500!\n\r"); |
nanjsk | 11:8a1ab8deea2b | 69 | printf("===========================================\n\r"); |
nanjsk | 11:8a1ab8deea2b | 70 | ledR = ledG = ledB = 1; |
nanjsk | 11:8a1ab8deea2b | 71 | |
nanjsk | 11:8a1ab8deea2b | 72 | Seg_Reset(); |
nanjsk | 11:8a1ab8deea2b | 73 | |
nanjsk | 11:8a1ab8deea2b | 74 | eth.init(mac_addr); //Use DHCP |
nanjsk | 11:8a1ab8deea2b | 75 | //eth.init(mac_addr, ip_addr, mask_addr, gw_addr); |
nanjsk | 11:8a1ab8deea2b | 76 | printf("Check Ethernet Link\r\n"); |
nanjsk | 11:8a1ab8deea2b | 77 | while(1) //Wait link up |
nanjsk | 11:8a1ab8deea2b | 78 | { |
nanjsk | 11:8a1ab8deea2b | 79 | if(eth.link() == true) |
nanjsk | 11:8a1ab8deea2b | 80 | break; |
nanjsk | 11:8a1ab8deea2b | 81 | } |
nanjsk | 11:8a1ab8deea2b | 82 | printf("Link up\r\n"); |
nanjsk | 11:8a1ab8deea2b | 83 | eth.connect(); |
nanjsk | 11:8a1ab8deea2b | 84 | printf("My IP Address is %s\r\n", eth.getIPAddress()); |
nanjsk | 11:8a1ab8deea2b | 85 | |
nanjsk | 11:8a1ab8deea2b | 86 | //printf("SNTP_Connect : %d\r\n",SNTP_Connect()); |
nanjsk | 11:8a1ab8deea2b | 87 | while(SNTP_Connect()); |
nanjsk | 11:8a1ab8deea2b | 88 | time_set(); |
nanjsk | 11:8a1ab8deea2b | 89 | |
nanjsk | 11:8a1ab8deea2b | 90 | char ymd_buffer[8]; |
nanjsk | 11:8a1ab8deea2b | 91 | char hms_buffer[6]; |
nanjsk | 11:8a1ab8deea2b | 92 | |
nanjsk | 11:8a1ab8deea2b | 93 | SW1.fall(&SW1_Interrupt); |
nanjsk | 11:8a1ab8deea2b | 94 | while(1) { |
nanjsk | 11:8a1ab8deea2b | 95 | time_t seconds = time(NULL); |
nanjsk | 11:8a1ab8deea2b | 96 | //ymd_buffer[0]~[3] : Year |
nanjsk | 11:8a1ab8deea2b | 97 | //ymd_buffer[4]~[5] : Month |
nanjsk | 11:8a1ab8deea2b | 98 | //ymd_buffer[6]~[7] : Day |
nanjsk | 11:8a1ab8deea2b | 99 | strftime(ymd_buffer, 8, "%Y%m%d%\n\r", localtime(&seconds)); |
nanjsk | 11:8a1ab8deea2b | 100 | //hms_buffer[0]~[1] : Hour |
nanjsk | 11:8a1ab8deea2b | 101 | //hms_buffer[2]~[3] : Minute |
nanjsk | 11:8a1ab8deea2b | 102 | //hms_buffer[4]~[5] : Second |
nanjsk | 11:8a1ab8deea2b | 103 | strftime(hms_buffer, 6, "%H%M%S\n\r", localtime(&seconds)); |
nanjsk | 11:8a1ab8deea2b | 104 | |
nanjsk | 11:8a1ab8deea2b | 105 | if(display_mode == 0) display_hms(hms_buffer); |
nanjsk | 11:8a1ab8deea2b | 106 | else if(display_mode == 1) display_ymd(ymd_buffer); |
nanjsk | 11:8a1ab8deea2b | 107 | else display_hms(hms_buffer); |
nanjsk | 11:8a1ab8deea2b | 108 | } |
nanjsk | 11:8a1ab8deea2b | 109 | } |