![](/media/cache/profiles/b4fcae87a46c0afe6dd16d9cff8a209a.jpg.50x50_q85.jpg)
Network clock using 7 segment. add SHT11
Dependencies: SHTx SNTPClient WIZnetInterface mbed
Revision 0:179f2315915f, committed 2016-04-05
- Comitter:
- nanjsk
- Date:
- Tue Apr 05 11:50:51 2016 +0000
- Commit message:
- first
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SHTx.lib Tue Apr 05 11:50:51 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/NegativeBlack/code/SHTx/#8465801be23f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SNTPClient.lib Tue Apr 05 11:50:51 2016 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/xeon011/code/SNTPClient/#137fc24033c4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WIZnetInterface.lib Tue Apr 05 11:50:51 2016 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/teams/WIZnet/code/WIZnetInterface/#c91884bd2713
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Apr 05 11:50:51 2016 +0000 @@ -0,0 +1,187 @@ +#include "mbed.h" +#include "segment.h" +#include "EthernetInterface.h" +#include "SNTPClient.h" +#include "SHTx/sht15.hpp" + +Serial pc(USBTX,USBRX); +EthernetInterface eth; +datetime ntptime; + +InterruptIn SW1(P21); +DigitalOut led1(LED1); +DigitalOut led2(LED2); + +SHTx::SHT15 sensor(P22, P23); + +void SW1_Interrupt(); +void SNTP_Connect(); +void time_set(); +void time_update(char buffer[]); +float update_sht11(uint8_t sensor_sel); + +struct tm timeinfo; + +uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x11, 0x22, 0xab}; +uint8_t display_mode = 0; +uint8_t update_mode = 0; +uint8_t Set_update[3] = {18, 00, 00}; //Hour,Minute,Second +uint8_t SW_toggle = 0; + +void SW1_Interrupt(){ + //led2=!led2; + display_mode = display_mode + 1; + + if(display_mode == 4) display_mode = 0; + printf("Display Mode : %d\n\r",display_mode); +} + +void SNTP_Connect() { + printf("Getting time information by using NTP...\r\n"); + + SNTPClient sntp("time.nist.gov", 40); // timezone: Korea, Republic of + sntp.connect(); + if(sntp.getTime(&ntptime) == true) { + printf("%d-%d-%d, %02d:%02d:%02d\r\n", ntptime.yy, ntptime.mo, ntptime.dd, ntptime.hh, ntptime.mm, ntptime.ss); + printf("Completed Get and Set Time\r\n\r\n"); + led1 = 0; + } + else { + while(sntp.getTime(&ntptime) == true) { + printf("%d-%d-%d, %02d:%02d:%02d\r\n", ntptime.yy, ntptime.mo, ntptime.dd, ntptime.hh, ntptime.mm, ntptime.ss); + printf("Completed Get and Set Time\r\n\r\n"); + led1 = 0; + break; + } + } +} +void time_set() { + timeinfo.tm_mon = ntptime.mo-1; + timeinfo.tm_mday = ntptime.dd; + timeinfo.tm_hour = ntptime.hh; + timeinfo.tm_min = ntptime.mm; + timeinfo.tm_sec = ntptime.ss; + timeinfo.tm_year = ntptime.yy-1900; + time_t t =mktime(&timeinfo); + set_time(t); + t = time(NULL); +} + +void time_update(char buffer[]) { + uint8_t h_buffer = ((buffer[0]-48)*10) + (buffer[1]-48); + uint8_t m_buffer = ((buffer[2]-48)*10) + (buffer[3]-48); + uint8_t s_buffer = ((buffer[4]-48)*10) + (buffer[5]-48); + + if(update_mode == 0){ + if(h_buffer == Set_update[0] && m_buffer == Set_update[1] && s_buffer == Set_update[2]){ + SNTP_Connect(); + time_set(); + update_mode = 1; + printf("Time Update Completed.\n\r\n\r"); + } + } + else if(update_mode == 1){ + if(!(h_buffer == Set_update[0] && m_buffer == Set_update[1] && s_buffer == Set_update[2])){ + update_mode = 0; + } + } +} +float update_sht11(uint8_t sensor_sel){ + sensor.update(); + sensor.setScale(false); + if(sensor_sel == 0) return sensor.getTemperature(); + else if(sensor_sel == 1) return sensor.getHumidity(); +} + +int main() { + pc.baud(115200); + wait(0.1); + printf("\n\rHello WIZwiki-W7500!\n\r"); + printf("===========================================\n\r"); + led1 = led2 = 1; + + Seg_Reset(); + SW1.fall(&SW1_Interrupt); + + sensor.setOTPReload(false); + sensor.setResolution(true); + + eth.init(mac_addr); //Use DHCP + printf("Check Ethernet Link\r\n"); + while(1) //Wait link up + { + if(eth.link() == true) + break; + } + printf("Link up\r\n"); + eth.connect(); + printf("My IP Address is %s\r\n", eth.getIPAddress()); + + SNTP_Connect(); + time_set(); + + //ymd_buffer[0]~[3] : Year + //ymd_buffer[4]~[5] : Month + //ymd_buffer[6]~[7] : Day + char ymd_buffer[8]; + //hms_buffer[0]~[1] : Hour + //hms_buffer[2]~[3] : Minute + //hms_buffer[4]~[5] : Second + char hms_buffer[6]; + + float temp_val = 0; + float humi_val = 0; + int temp_mode = 0; + int humi_mode = 0; + + while(1) { + time_t seconds = time(NULL); + + strftime(hms_buffer, 6, "%H%M%S\n\r", localtime(&seconds)); + strftime(ymd_buffer, 8, "%Y%m%d%\n\r", localtime(&seconds)); + + if(hms_buffer[4] == '0' && hms_buffer[5] == '0'){ + time_update(hms_buffer); + } + if(display_mode == 0) { + SW_toggle = 0; + display_hms(hms_buffer); + } + else if(display_mode == 1) { + SW_toggle = 0; + display_ymd(ymd_buffer); + } + else if(display_mode == 2) { + if(temp_mode == 0){ + if(hms_buffer[5]%5 == 0){ + temp_val = update_sht11(0); + temp_mode = 1; + } + } + if(temp_mode == 1){ + if(hms_buffer[5]%5 != 0){ + temp_mode = 0; + } + } + display_temp(temp_val); + } + else if(display_mode == 3) { + if(humi_mode == 0){ + if(hms_buffer[5]%5 == 0){ + humi_val = update_sht11(1); + humi_mode = 1; + } + } + if(temp_mode == 1){ + if(hms_buffer[5]%5 != 0){ + humi_mode = 0; + } + } + display_humi(humi_val); + } + else { + display_hms(hms_buffer); + } + //Seg_Test_2(); + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Apr 05 11:50:51 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/252557024ec3 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/segment.cpp Tue Apr 05 11:50:51 2016 +0000 @@ -0,0 +1,164 @@ +#include "mbed.h" +#include "segment.h" +Serial pc1(USBTX,USBRX); + +BusOut Seg_num(P5,P6,P7,P8,P9,P10,P11,P12); +BusOut Seg_Sel(P20,P19,P18,P17,P16,P15,P14,P13); + + +uint8_t SEGMENTS[37] = { + //********************************************************* + // 7segment pattern, + //********************************************************* + // seg: g f e d c b a + // bit: 6 5 4 3 2 1 0 + // -------------------- + 0xC0, // 0 1 0 0 0 0 0 0 + 0xF9, // 1 ./ 1 1 1 1 0 0 1 + 0xA4, // 2 0 1 0 0 1 0 0 + 0xB0, // 3 0 1 1 0 0 0 0 + 0x99, // 4 0 0 1 1 0 0 1 + 0x92, // 5 0 0 1 0 0 1 0 + 0x82, // 6 0 0 0 0 0 1 0 + 0xD8, // 7 1 0 1 1 0 0 0 + 0x80, // 8 0 0 0 0 0 0 0 + 0x90, // 9 0 0 1 0 0 0 0 + 0x88, // A 0 0 0 1 0 0 0 + 0x83, // B 0 0 0 0 0 1 1 + 0xC6, // C 1 0 0 0 1 1 0 + 0xA1, // D 0 1 0 0 0 0 1 + 0x86, // E 0 0 0 0 1 1 0 + 0x8E, // F 0 0 0 1 1 1 0 + 0xC2, // G 1 0 0 0 0 1 0 + 0x89, // H 0 0 0 1 0 1 1 + 0xCF, // I 1 0 0 1 1 1 1 + 0xE1, // J 1 1 0 0 0 0 1 + 0x8A, // K 0 0 0 1 0 1 0 + 0xC7, // L 1 0 0 0 1 1 1 + 0xEA, // M 1 1 0 1 0 1 0 + 0xAB, // N 0 1 0 1 0 1 1 + 0xA3, // O 0 1 0 0 0 1 1 + 0x8C, // P 0 0 0 1 1 0 0 + 0x98, // Q 0 0 1 1 0 0 0 + 0xCC, // R 1 0 0 1 1 0 0 + 0x96, // S 0 0 1 0 1 1 0 + 0x87, // T 0 0 0 0 1 1 1 + 0xE3, // U 1 1 0 0 0 1 1 + 0xC1, // V 1 0 0 0 0 0 1 + 0xD5, // W 1 0 1 0 1 0 1 + 0x89, // X 0 0 0 1 0 0 1 + 0x91, // Y 0 0 1 0 0 0 1 + 0xB4, // Z 0 1 1 0 1 0 0 + 0xFF // 1 1 1 1 1 1 1 + }; + +uint8_t SEGMENT_SEL[9] = {0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; + +void Seg_Drive(int seg, int num, int dot) +{ + Seg_num = 0xff; + Seg_Sel = SEGMENT_SEL[seg]; + if(dot == 1) + { + Seg_num = SEGMENTS[num] & 0x7F; + } + else + { + Seg_num = SEGMENTS[num]; + } + wait_ms(1); +} + +void Seg_Test_1() +{ + for(int j = 1 ; j <9 ; j++) + { + pc1.printf("SEGMENT_SEL : %x\r\n",SEGMENT_SEL[j]); + for(int i = 0; i<10 ; i++) + { + Seg_Drive(j,i,1); + pc1.printf("Seg Num : %d\r\n",i); + wait(0.05); + } + } + Seg_num = 0xff; +} +void Seg_Test_2() +{ + Seg_num = 0x00; + Seg_Sel = 0xff; + wait(0.5); + Seg_num = 0xff; + Seg_Sel = 0x00; + wait(0.5); +} + +void Seg_Reset() +{ + Seg_num = 0xff; + Seg_Sel = 0x00; +} + +void display_ymd(char buffer[]) +{ + int dot = 0; + for(int i = 0 ; i <= 7 ; i++) + { + if(i == 3) dot = 1; + else if(i == 5) dot = 1; + else if(i == 7) dot = 1; + else dot = 0; + buffer[i] -= 48; + Seg_Drive(i+1,buffer[i],dot); + } + +} + +void display_hms(char buffer[]) +{ + int dot = 0; + for(int i = 0 ; i < 6 ; i++) + { + if(i == 1) dot = 1; + else if(i == 3) dot = 1; + else if(i == 5) dot = 1; + else dot = 0; + buffer[i] -= 48; + Seg_Drive(i+2,buffer[i],dot); + } +} + +void display_temp(float temp_val){ + //Seg_Reset(); + int temp_val_int = (int)(temp_val*10); + char temp_val_arr[5]={0,0,0,36,12}; + + temp_val_arr[0] = temp_val_int/100; + temp_val_arr[1] = (temp_val_int-(temp_val_arr[0]*100))/10; + temp_val_arr[2] = temp_val_int-((temp_val_arr[0]*100)+(temp_val_arr[1]*10)); + + int dot = 0; + for(int i = 0 ; i < 5 ; i++) + { + if(i == 1) dot = 1; + else dot = 0; + Seg_Drive(i+3,temp_val_arr[i],dot); + } +} +void display_humi(float humi_val){ + //Seg_Reset(); + int humi_val_int = (int)(humi_val*10); + char humi_val_arr[5]={0,0,0,36,17}; + + humi_val_arr[0] = humi_val_int/100; + humi_val_arr[1] = (humi_val_int-(humi_val_arr[0]*100))/10; + humi_val_arr[2] = humi_val_int-((humi_val_arr[0]*100)+(humi_val_arr[1]*10)); + + int dot = 0; + for(int i = 0 ; i < 5 ; i++) + { + if(i == 1) dot = 1; + else dot = 0; + Seg_Drive(i+3,humi_val_arr[i],dot); + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/segment.h Tue Apr 05 11:50:51 2016 +0000 @@ -0,0 +1,9 @@ + +void Seg_Drive(int seg, int num, int dot); +void Seg_Test_1(); +void Seg_Test_2(); +void Seg_Reset(); +void display_ymd(char buffer[]); +void display_hms(char buffer[]); +void display_temp(float temp_val); +void display_humi(float humi_val); \ No newline at end of file